2009-01-01から1年間の記事一覧
終了方法がナゾだ。 DXRubyはWindow.loop/Input.updateでメッセージを処理するから、それを呼ばないとRuby側で終了条件を識別できなくて終わることができなくなる。 RGSS2ではGraphics.updateを呼ばなくてもウィンドウを閉じると終了してくれる。 loop do en…
Viewportの実装をメモリ消費から調べてみる。 DirectXでテクスチャやサーフェイスを作る場合、ビデオメモリかシステムメモリかどっちに取るかを選べる。 ビデオメモリが足りない場合にどのデータをどうする、とか、そういうのを自分で管理するプログラムをが…
ボケていた。 ちょっと前にためしたflashメソッドの実験で、Viewportのflashは範囲全体のflashだった。 Sprite描画のflashを上書きするように、範囲が単色で塗りつぶされる。 ということは、処理的にはSpriteを描画したあとで、Viewportのサイズの矩形をアル…
まだわからないことだらけ。 今日は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…
いじっていたらColorクラスで==がオーバーライドされていることに気がついた。 マニュアルには書いていない。 まあ、マニュアルが完璧であることは期待してはいけないが、なんだかミスで抜けてる感じもしないので、細かく書くと難しくなるから書かずに済ませ…
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の実装に関して、マニュアルに書いていないことを挙動から分析する。 ネットで検索してもイマイチ出てこないから自分でやることにした。 まあ、そのためにツクールVXを買ったわけだが。 どこかにいい記事があるのを知ってる人がいたら教えてほしい。 新…
前回のんはあまりにしょんぼりだったので、もうひとつ行ってみよう。 RGSS2にはViewportクラスというものがある。 描画範囲を指定するためのクラスだが、Spriteを作るときに指定しないと全画面が描画範囲になる。 全画面範囲のデフォルトViewportとかあるの…
互換ライブラリを作っていて気になってたことを片っ端から試す。 すぐにネタ切れになるので続くことは期待してはいけない。 作っていればまた疑問も沸くだろうが。 Viewportとは何か、という話。 画面の描画範囲を指定するオブジェクトだが、Spriteオブジェ…
次は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…
とりあえず、現時点で難しいものを挙げてみよう。 ・Bitmap#stretch_blt、hue_change、blur、radial_blur ようするに画像編集系。それっぽく作ることはできるかもしれないが、かなり遅くなることは保証できる。 ・Plane#zoom_x、zoom_y Window.drawTileに機…
DXRubyそのものをコンパイルしようとするとDirectXSDKが必要になるが、テクスチャをいじる処理をCで書くだけならDXRubyの外部I/Fを使えば不要になる。 DXRubyではテクスチャイメージへのポインタを返す関数を公開しているから、DXRubyのlibをリンクさえすれ…
DXRubyRGSS http://dxruby.sourceforge.jp/files/DXRubyRGSS.zip マニュアルがまだ無いからツクールVXユーザー以外には厳しいかも。 Webで検索したらサンプルとか出てくる? とりあえず、作者はまだツクールVXを認証していないので、動作がこれで正しいかど…
RGSS互換ライブラリをちょっとずつ作っているのだが、これはなかなか難しい。 画像の扱い方に対する考え方が違うから、DXRubyの機能では実現できないものが多い。 たとえばSpriteのflashやcolor、toneなど。 これらは実行時に動的に画像を修正して描画するか…
RGSSが気になったので衝動買いしてしまった。 まだマニュアル読んでるだけで動かしてない。 メインPCが壊れたから、新しいのが届いたらそっちで認証していじってみる予定。 ツクール系のサイトを眺めていると、ツクールでRPGを作るだけじゃなく、自分でコー…
そもそも行列とはなんぞや、というところから理解できていないので、とりあえず一通り自分で実装してみた。 Direct3Dがやろうとしていることは、だいたいこういうことだろうと思う。 ソースちょっと長いけど。 カメラの設定が面倒だったからビュー変換は手抜…
Rubyのリテラルについて考える。 ソースに直で文字列や数字を書いたときに何が起こるのか。 コンパイルしたときにオブジェクトが生成される?実行時に生成される? 固定値なのに実行時に生成されたら無駄な負荷がありそうな気はするが、自己破壊メソッドで変…
とりあえず手元のruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]。 Rubyの浮動小数点の実数はFloatクラスとして実装されていて、その中身はCで言うところのdouble型である。 VALUE型は32bitで表されているから64bitのdouble型は格納できず、よく使…
こんな感じで標準コントロールは置けるようになった。 コンボボックスだけは置けるだけで機能はからっぽ。 ソースは長くなってきてしまったので割愛。 グループボックス内のラジオボタンも、グループボックスをサブクラス化して親ウィンドウにクリックメッセ…
Rubyのスレッドはユーザーレベルスレッドなので、CPUがデュアルコアだったとしても、片方しか使わない。 ユーザーレベルスレッドには、たとえば環境に寄らず一定の動作をするとか、スレッドが割り振られるCPUによって動作速度が変わったりしないとか、利点は…
なんだかいじっていたら進化してしまったのでアップ。 Ruby1.8用。 DLのPtrDataオブジェクトのptrメソッドを呼ぶとなぜかコケるので、ウィンドウハンドルはポインタじゃなくint型にして強引に扱っている。 そんなもんか。 require "dl/import" require "dl/s…
今日はJavaScriptを勉強していた。 Webで何かをしたいというわけではなく、言語として、どういうものなのかに興味があったからだ。 んでも、JavaScriptの本ってWeb上で使うときのHowToみたいなのしか無くて、そういう本には本質的なことが書いてない。 困っ…
あんまりまとまってないんだけど。 3Dのゲームは作ったことないんだけど。 とりあえず考えたことを残しておこう。 3Dの描画をあれこれ試していたらなんとなく、3D描画っつーのは、3Dのワールド座標系にオブジェクトを配置して、それをカメラを通して見た風景…
DLを使ってコールバックできれば、ウィンドウプロシージャも作れてWindowsアプリが書けるのではなかろうか。 という話だったので、試してみた。 require "dl/import" require "dl/struct" module LIBC extend DL::Importable dlload "user32.dll" dlload "ke…
Windowsアプリを作ろうと思うと、ウィンドウプロシージャへのポインタをウィンドウクラスに登録する必要がある。 ウィンドウプロシージャは関数であり、ウィンドウクラスに登録するのは関数のアドレスだ。 そうすることにより、ウィンドウへのメッセージがあ…
なんとなくRubyのオブジェクトとGCと変数の話。 初心者に説明するには難しい気がして敬遠しがちで、いつ出せばいいのかわからないような。 Rubyは全てがオブジェクトである、というのがウリの一つ。 全てがオブジェクトというのは、通常のクラスから生成する…
ためしに4点の座標を指定するメソッド、Window.drawMorphを実装してみた。 require 'dxruby' image = Image.load("enemy2.png", 0, 0, 128, 64) Window.loop do Window.drawMorph(0, 50, 220, 5, 200, 120, 10, 80, image) end あれ、画像とコードがちょっと…
なんか書こう。 個人的な日記を・・・というのはすでにちょっと違うものになってしまっているので、DXRubyネタでも。 例えば複数ウィンドウに対応する、となると、どのような仕様になるのだろう。 いまはWindowモジュールで動いているから、基本的にこの作り…
久々に更新。 何かしてるかと言われると何もしていないのだが、止まってしまった頭を動かすのは大変なことなのだ。 例えるなら昔の船のエンジンのような。 DXRubyのWikiに、MyGameのシーン管理クラスを汎用化したscene.rbを置いてある。 MyGameは大変便利だ…
我がブログの検索キーワードで「Segmentation fault」が急上昇中である。 これが「DXRuby Segmentation fault」だったら困ってしまうところだが、ただの「Segmentation fault」なのでそもそもそれがRubyの話なのかどうかもわからない。 メモリ管理機能のある…