2009-01-01から1年間の記事一覧

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アプリさらにその後と、ライブラリの方針

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

メモリマップドファイルのはなし

Rubyのスレッドはユーザーレベルスレッドなので、CPUがデュアルコアだったとしても、片方しか使わない。 ユーザーレベルスレッドには、たとえば環境に寄らず一定の動作をするとか、スレッドが割り振られるCPUによって動作速度が変わったりしないとか、利点は…

Windowsアプリその後

なんだかいじっていたら進化してしまったのでアップ。 Ruby1.8用。 DLのPtrDataオブジェクトのptrメソッドを呼ぶとなぜかコケるので、ウィンドウハンドルはポインタじゃなくint型にして強引に扱っている。 そんなもんか。 require "dl/import" require "dl/s…

JavaScriptとLua

今日はJavaScriptを勉強していた。 Webで何かをしたいというわけではなく、言語として、どういうものなのかに興味があったからだ。 んでも、JavaScriptの本ってWeb上で使うときのHowToみたいなのしか無くて、そういう本には本質的なことが書いてない。 困っ…

2Dと3Dと疑似3Dの考え方

あんまりまとまってないんだけど。 3Dのゲームは作ったことないんだけど。 とりあえず考えたことを残しておこう。 3Dの描画をあれこれ試していたらなんとなく、3D描画っつーのは、3Dのワールド座標系にオブジェクトを配置して、それをカメラを通して見た風景…

Pure RubyでWindowsアプリ

DLを使ってコールバックできれば、ウィンドウプロシージャも作れてWindowsアプリが書けるのではなかろうか。 という話だったので、試してみた。 require "dl/import" require "dl/struct" module LIBC extend DL::Importable dlload "user32.dll" dlload "ke…

Ruby/DLとコールバック

Windowsアプリを作ろうと思うと、ウィンドウプロシージャへのポインタをウィンドウクラスに登録する必要がある。 ウィンドウプロシージャは関数であり、ウィンドウクラスに登録するのは関数のアドレスだ。 そうすることにより、ウィンドウへのメッセージがあ…

知らなくていいのか、知らないといけないのか

なんとなくRubyのオブジェクトとGCと変数の話。 初心者に説明するには難しい気がして敬遠しがちで、いつ出せばいいのかわからないような。 Rubyは全てがオブジェクトである、というのがウリの一つ。 全てがオブジェクトというのは、通常のクラスから生成する…

変形スプライトと疑似3Dと3D

ためしに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とは

我がブログの検索キーワードで「Segmentation fault」が急上昇中である。 これが「DXRuby Segmentation fault」だったら困ってしまうところだが、ただの「Segmentation fault」なのでそもそもそれがRubyの話なのかどうかもわからない。 メモリ管理機能のある…