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

wingui.rbに機能追加した

winguiRuby改め、wingui.rb。 ちょっとした思い付きで、ウィンドウを新規作成するだけではなく、ウィンドウハンドルを渡してサブクラス化する機能を追加してみた。 これが思った以上にうまく動き、予想外に面白い効果を得ることができた。 具体的には以下の…

メモリマップドファイルとWindowsのイベント

前にメモリマップドファイルの話を書いたときに作ったものを、参考になる人もいるかもしれないからアップしとく。 Ruby/DLを使ってメモリマップドファイルを作成し、WindowsのEventで同期を取るプロセス分散処理。Ruby1.8専用。 http://dxruby.sourceforge.j…

RGSS2を知る(28)

Rectクラスの===。 p Rect.new(100,100,100,100) == Rect.new(100,100,100,100) # => true p Rect.new(101,101,100,100) == Rect.new(100,100,100,100) # => false p Rect.new(101,101,98,98) === Rect.new(100,100,100,100) # => false p Rect.new(100,100,…

RGSS2を知る(29)

TableクラスのMarshal。 t = Table.new(2,3,4) c = 1 for i in 0..1 for j in 0..2 for k in 0..3 t[i,j,k] = c c += 1 end end end open("c:\\test.txt","w+b") do |fh| fh.write(Marshal.dump(t)) end 結果はこんなかんじ。 04 08 75 3A 0A 54 61 62 6C 65…

DXRubyの今後とか

いまはとりあえずFreeRGSSをがんばっている。 でもDXRubyに飽きたとかそういうわけではない。 しいて言うなら、FreeRGSSは市販のライブラリに対して自分がどこまでやれるのか直接的に比較できる材料であり、Direct3Dで実装するという技術的なチャレンジであ…

winguirubyとFreeRGSS

WindowsアプリをRubyで作るためのライブラリ、winguiruby(仮名)。 またもや置き場所が無いので間借り状態。こういうの、どうしたらいいのかな。まあ、そのうち消すかもしれない。 http://dxruby.sourceforge.jp/files/winguiRuby.zip Ruby1.8のDLを使って…

RGSS2を知る(25)

ピンポイントに調べた。 class Bitmap def initialize(*) end end b = Bitmap.new(200,100) b.clear このコードはBitmapのinitializeを無効にする。 通常、Cで書く拡張ライブラリでは、newしたときにCのallocate関数でオブジェクトメモリを確保し、Rubyのini…

RGSS2を知る(26)

色の合成にリベンジ。 少し色のパターンを変えてみた。 b1 = Bitmap.new(100,100) b1.fill_rect(b1.rect, Color.new(50,150,255,100)) b2 = Bitmap.new(100,100) b2.fill_rect(b2.rect, Color.new(255,150,50,200)) b = Bitmap.new(640,480) b.blt(0, 0, b1,…

RGSS2を知る(27)

マーシャル関連。とりあえずColorを。 open("c:\\test.txt","w") do |fh| fh.write(Marshal.dump(Color.new(1,2,3,4))) end 04 08 75 3A 0D 0A 43 6F 6C 6F 72 25 00 00 00 00 00 00 F0 3F 00 00 00 00 00 00 00 40 00 00 00 00 00 00 08 40 00 00 00 00 00 …

RGSS2を知る(24)

微妙な話だが、freezeとdup/cloneについて。 b = Bitmap.new(100,100) p b.frozen? # => false b.freeze p b.frozen? # => true b.set_pixel(1,1,Color.new(100,1001,00)) b = b.clone p b.frozen? # => true b = b.dup p b.frozen? # => false s = Sprite.n…

FreeRGSS0.0.1とりあえず公開してみる

DXRubyで培った技術を駆使して、RGSS2のオープンソース実装「FreeRGSS」を作ってみている。 ようするにRGSSをCで再実装しているわけだ。 あちこち非互換や未実装があるが(音でないとか)、そこそこ動くようになったのと、難しいとこばっかり残ってしまってこ…

FreeRGSSについていろいろ

似たよーなライブラリ2つも作ってどーするねん。 という声が聞こえてきそうであり、俺自身もよく思う。 それだからこそFreeRGSSは互換性を確保することを目指し、同じ動作をするところまで行けたら完了となるプロジェクトとしている。 自分で機能を拡張すれ…

Win32APIとUnicode

文字コードとか勉強していたらいつのまにかWindowsのUnicode対応などに首を突っ込んでしまったのでまとめ。 Windowsは内部的にはUnicodeを使っている、とどっかで見たきがする。 VisualC++でソースの文字コードにUnicodeを使っても正常にコンパイルできるし…

Ruby1.9.1と文字列エンコード再び

DXRubyのエンコード関連を改善したいと思い、いろいろ勉強しているのでとりあえずまとめ。 Ruby1.8系では、文字列はバイナリであり、エンコードを持たない。 ファイルなどから読み込んだ文字列がなんのエンコードなのかもわからないから、ライブラリを使って…

RGSS2を知る(23)

Bitmapクラスのbltメソッドについて。 b1 = Bitmap.new(300,300) b1.fill_rect(b1.rect, Color.new(255,0,0)) b2 = Bitmap.new(300,300) b2.fill_rect(b2.rect, Color.new(0,0,255)) b = Bitmap.new(640,480) b.blt(0, 0, b1, b1.rect) b.blt(100, 100, b2, …

RGSS2を知る(22)

Windowクラスの描画系は非常に複雑だ。 いろいろと調べたがあまりにも面倒なので簡単にまとめる。 ・contentsはカーソルより手前に描画される。contentsを不透明な画像にするとカーソルが見えなくなる。 ・back_opacityは背景のみで枠には影響せず、opacity…

3D座標変換

自分用メモ。3Dの座標変換はワールド変換→ビュー変換→射影変換→ビューポート変換の順でおこなう。 ワールド変換:オブジェクトデータの頂点群を、ワールド内の姿勢にあわせて回転し、ワールド内の位置に移動させる。 ビュー変換:カメラから見た風景になるよ…

RGSS2を知る(20)

20回目になった。 おおまかな所はわかってきた気がするが、細かいところに謎が多すぎる。 ソースが無いのでしょうがない。 RGSSはソフトウェアで描画しているような気はしているのだが、ソフト描画で高速に行うのが難しいのは拡大・縮小・回転。 とりあえず…

RGSS2を知る(21)

次はTableクラス。 Cで書いた拡張ライブラリからアクセスするぶんには、Arrayの内部構造でも別に遅くはないが、Rubyから3次元配列にアクセスしようとすると、1アクセスごとにメソッド呼び出しが3回となって、さすがにちょっとしょんぼりだ。 Arrayの[]を再定…