2009-11-01から1ヶ月間の記事一覧

RGSS2を知る(18)

今回はInputモジュール。 Input.dir4とかdir8とか、なんとなくわかりやすいようなメソッドが用意されているが、たとえばdir8を使って8方向に動く処理を書こうと思うとこれが大変面倒くさい。 実は俺もDXRubyのSourceForgeに公開する前のバージョンではそのよ…

RGSS2を知る(19)

InputモジュールのInput#repeat?はキーの入力をオートリピート付きでチェックしてくれる。 この間隔を調整する機能はない。 ジャンルによるだけでなく、RPGでも物によってはもっと速く動かしたいとか要望は無いのだろうか。 それはさておき、オートリピート…

RGSS2を知る(17)

Planeクラスの使い道を調べようと思ったのだが、RPGのコードを見ても使ってるところが見当たらない。 ここで使ってる!って知ってる人がいたらぜひ教えてほしい。 必要なのかどうかわからないが、互換ライブラリなら作らないといけないのでとりあえず動かし…

RGSS互換ライブラリを考える

DXRubyのViewportがバグっているようだ。 DirectXでいうViewportというのは、射影変換後のxyそれぞれ-1〜1になった座標(zは0〜1)のはみ出したものをクリッピングした後、スクリーン座標系にスケーリングするときに使う。 つまり、元の座標を640*480の座標系…

RGSSとDXRubyの画像の扱いの違い

RGSSをいじっていて思うのは、DXRubyとの画像データの持ち方の違いである。 どっちもファイルを読んでオブジェクトとして保持する機能があり、画像に対して何かしらの編集をする機能もある。 名前はDXRubyのほうはImageクラス、RGSSはBitmapクラスだ。 DXRub…

RGSS2を知る(10)

RGSSはRubyGameScriptingSystemでRGSSなのだから、Rubyではあるのだが、ライブラリはいまいちRubyぽくない動作をする(俺的感覚)。 こういう感覚は人によって違うので、たとえばDXRubyも俺が思う以上にRubyぽいと言われたり、Rubyぽくないと言われたり、まち…

RGSS2を知る(11)

マニュアルに「返される値はコピーではなく参照だから、値を変更すれば反映される」というようなことが書いてある。 気になったからもう少し調べてみた。 さっきの「←ここ」をこのように変えると、 s.tone.gray = g # ←ここ 確かに色が変わるようになった。 …

RGSS2を知る(12)

グレースケール化の処理について。 osakana.factoryさま http://ofo.jp/osakana/cgtips/grayscale.phtml このサイトさまを参考に、Spriteのグレースケール化した色と、自前計算した色が一致するような計算式を探った。 b = Bitmap.new(200,200) b.fill_rect(…

RGSS2を知る(13)

Spriteはもともとそのクラスのオブジェクトを内部に持っていて、=付きのメソッドを呼ばれると引数の値を内部オブジェクトにコピーする、ということのようだ。 Bitmapクラスのrectはプロパティとしてではなくメソッドとマニュアルに書いてあり、設定機能はな…

RGSS2を知る(14)

気が付いたらもう14回目。 RGSS2がよくわかってきたような気はあんまりしない。 今回はViewportのフラッシュについて。 以下のコードを実行すると、指定時間が違うのにどちらも同時に消える。 v1 = Viewport.new(0,0,400,300) v2 = Viewport.new(100,100,400…

RGSS2を知る(15)

休みの日に一日中こんなことやってるのってどうなん? b = Bitmap.new(100,100) b.fill_rect(b.rect, Color.new(255,255,255,255)) s = Sprite.new s.bitmap = b s.angle = 45 loop do Graphics.update end 白い四角を回転させた。 この結果から言えることは…

RGSS2を知る(16)

終了方法がナゾだ。 DXRubyはWindow.loop/Input.updateでメッセージを処理するから、それを呼ばないとRuby側で終了条件を識別できなくて終わることができなくなる。 RGSS2ではGraphics.updateを呼ばなくてもウィンドウを閉じると終了してくれる。 loop do en…

RGSS2を知る(8)

Viewportの実装をメモリ消費から調べてみる。 DirectXでテクスチャやサーフェイスを作る場合、ビデオメモリかシステムメモリかどっちに取るかを選べる。 ビデオメモリが足りない場合にどのデータをどうする、とか、そういうのを自分で管理するプログラムをが…

RGSS2を知る(9)

ボケていた。 ちょっと前にためしたflashメソッドの実験で、Viewportのflashは範囲全体のflashだった。 Sprite描画のflashを上書きするように、範囲が単色で塗りつぶされる。 ということは、処理的にはSpriteを描画したあとで、Viewportのサイズの矩形をアル…

RGSS2を知る(5)

まだわからないことだらけ。 今日はViewportとflashメソッド。 bitmap1 = Bitmap.new(100,100) bitmap1.fill_rect(bitmap1.rect, Color.new(0,0,0,255)) viewport = Viewport.new(0,0,640,480) s1 = Sprite.new(viewport) s1.bitmap = bitmap1 s2 = Sprite.n…

RGSS2を知る(6)

いじっていたらColorクラスで==がオーバーライドされていることに気がついた。 マニュアルには書いていない。 まあ、マニュアルが完璧であることは期待してはいけないが、なんだかミスで抜けてる感じもしないので、細かく書くと難しくなるから書かずに済ませ…

RGSS2を知る(7)

Spriteのcolorプロパティの動作について。 マニュアルにはアルファ値が適用されつつブレンドされるという説明。具体的にさっぱりわからない。 b1 = Bitmap.new(100,100) b2 = Bitmap.new(100,100) b2.fill_rect(b2.rect, Color.new(255,0,0,128)) b3 = Bitma…

RGSS2を知る(1)

RGSS2の実装に関して、マニュアルに書いていないことを挙動から分析する。 ネットで検索してもイマイチ出てこないから自分でやることにした。 まあ、そのためにツクールVXを買ったわけだが。 どこかにいい記事があるのを知ってる人がいたら教えてほしい。 新…

RGSS2を知る(2)

前回のんはあまりにしょんぼりだったので、もうひとつ行ってみよう。 RGSS2にはViewportクラスというものがある。 描画範囲を指定するためのクラスだが、Spriteを作るときに指定しないと全画面が描画範囲になる。 全画面範囲のデフォルトViewportとかあるの…

RGSS2を知る(3)

互換ライブラリを作っていて気になってたことを片っ端から試す。 すぐにネタ切れになるので続くことは期待してはいけない。 作っていればまた疑問も沸くだろうが。 Viewportとは何か、という話。 画面の描画範囲を指定するオブジェクトだが、Spriteオブジェ…

RGSS2を知る(4)

次はdispose。 bitmap1 = Bitmap.new(100,100) bitmap1.fill_rect(bitmap1.rect, Color.new(0,0,255,255)) bitmap2 = Bitmap.new(100,100) bitmap2.fill_rect(bitmap2.rect, Color.new(0,255,0,255)) bitmap3 = Bitmap.new(100,100) bitmap3.fill_rect(bitma…

RGSS互換の実現性

とりあえず、現時点で難しいものを挙げてみよう。 ・Bitmap#stretch_blt、hue_change、blur、radial_blur ようするに画像編集系。それっぽく作ることはできるかもしれないが、かなり遅くなることは保証できる。 ・Plane#zoom_x、zoom_y Window.drawTileに機…

DXRuby拡張

DXRubyそのものをコンパイルしようとするとDirectXSDKが必要になるが、テクスチャをいじる処理をCで書くだけならDXRubyの外部I/Fを使えば不要になる。 DXRubyではテクスチャイメージへのポインタを返す関数を公開しているから、DXRubyのlibをリンクさえすれ…

置いてみた

DXRubyRGSS http://dxruby.sourceforge.jp/files/DXRubyRGSS.zip マニュアルがまだ無いからツクールVXユーザー以外には厳しいかも。 Webで検索したらサンプルとか出てくる? とりあえず、作者はまだツクールVXを認証していないので、動作がこれで正しいかど…

Windowクラス

RGSS互換ライブラリをちょっとずつ作っているのだが、これはなかなか難しい。 画像の扱い方に対する考え方が違うから、DXRubyの機能では実現できないものが多い。 たとえばSpriteのflashやcolor、toneなど。 これらは実行時に動的に画像を修正して描画するか…

RPGツクールVXとか

RGSSが気になったので衝動買いしてしまった。 まだマニュアル読んでるだけで動かしてない。 メインPCが壊れたから、新しいのが届いたらそっちで認証していじってみる予定。 ツクール系のサイトを眺めていると、ツクールでRPGを作るだけじゃなく、自分でコー…

3Dの計算

そもそも行列とはなんぞや、というところから理解できていないので、とりあえず一通り自分で実装してみた。 Direct3Dがやろうとしていることは、だいたいこういうことだろうと思う。 ソースちょっと長いけど。 カメラの設定が面倒だったからビュー変換は手抜…

Immutableなクラス

Rubyのリテラルについて考える。 ソースに直で文字列や数字を書いたときに何が起こるのか。 コンパイルしたときにオブジェクトが生成される?実行時に生成される? 固定値なのに実行時に生成されたら無駄な負荷がありそうな気はするが、自己破壊メソッドで変…

Floatクラスをいじってみる

とりあえず手元のruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]。 Rubyの浮動小数点の実数はFloatクラスとして実装されていて、その中身はCで言うところのdouble型である。 VALUE型は32bitで表されているから64bitのdouble型は格納できず、よく使…

Winアプリさらにその後と、ライブラリの方針

こんな感じで標準コントロールは置けるようになった。 コンボボックスだけは置けるだけで機能はからっぽ。 ソースは長くなってきてしまったので割愛。 グループボックス内のラジオボタンも、グループボックスをサブクラス化して親ウィンドウにクリックメッセ…