2010-03-01から1ヶ月間の記事一覧

四角形の自由変形を考える

前にやろうとして挫折したものだが。 http://d.hatena.ne.jp/mirichi/20090927/p1 まずはおさらいから。 なぜ三角形のポリゴンで四角形の自由変形ができないのかというと、自由変形された四角形の全てのピクセルが、4点の位置関係によって補正されるから、だ…

メモリプリフェッチ最適化

CPUの動作速度と比較して、メインメモリは遅い。 PCで使われているスカラ型CPUは内部にキャッシュを持ち、メインメモリとの動作速度の差を吸収しようとしている。 キャッシュにヒットすれば即座に読み出せるが、ヒットしなければメインメモリからの読み込み…

CommandとExecuter

DXRubyFramework0.0.2ではSpriteクラスはコマンド列を処理する機能を持っているが、コマンド列は配列であるので、それをもうちょっと簡単に簡易DSLで記述するためのCommandクラスを用意した。 用意したというほどのものでもない。 class Command attr_reader…

DXRubyFramework0.0.2と弾幕ゲー

高速コマンド処理機能を追加して、アニメーションを強化、メソッドを整理したバージョンとなっている。 性能は上々。 CPUを800MHzにクロックダウンして動かしている画像。 見にくいが35%、2640 Objectsだ。 一応、全ての弾に対して自機との矩形衝突判定をし…

RubyのModuleについて

Rubyを勉強し始めてマニュアルを眺めていたとき、どうしても理解できなかったことがある。 それはModuleで、クラスにincludeした場合にいったいどういう理屈で何が起こっているのかがわからなかった。別に内部的な話ではなく、たとえばincludeとextendの違い…

ソースを隠蔽する手段

コンパイルして実行形式にしてしまう言語であれば、公開する人の意思でソースを出すかどうかを決めることができる。 その場合、ソースを出すのは一手間かかるため、どっちかというと公開したいという思いが無ければされない。 Rubyのようなスクリプト言語の…

evalとシンボル

Ruby用ゲームライブラリのMiyakoの2.1.9がリリースされて、なんだか2.1系も熟成されてきたなあーという感じ。 ところでMyakoの公式サポート掲示板がしばらく前にできている。 http://cyross.bbs.fc2.com/ テトリス作ってる人がいて、なんだか楽しそう。 我が…

メタプログラミングの基本とか

Rubyはメタプログラミングができる言語だ。 高度なことをしようと思うと特異クラスなどの詳細を知る必要が出てくるが、そういうことをそれなりに知っている人でなければ、特異メソッドぐらいは理解できても特異クラスが出てきた時点でよくわからなくなってし…

ハッシュ引数

Rubyではメソッドの引数の最後がハッシュの場合、{}を省略することができる。 これをキーワード引数のように使うことで、柔軟なメソッドを作れるようになっている。 DXRubyでも、Window.drawExはハッシュを引数にすることで各種効果を自由に取捨選択してつけ…

ライセンスのお話。

Twitterでライセンスの話を呟いていたら、zlib/libpngライセンスをお勧めされた。 http://sourceforge.jp/projects/opensource/wiki/licenses/zlib_libpng_license DXRubyがなぜMITライセンスなのかというと、できるだけ緩いライセンスにしておきたかったか…

ライティング

とりあえずできたけど、理屈通りに動いていない。 何かが間違っているのだとは思うが、それが解決するまでリリースはできないなあ。 ライティングはそれなりに複雑で、これをどのように提供するのかは悩むところ。

HTTP 418 I'm a teapot.

プリセットのメッシュのひとつ、ティーポットを作るメソッドを追加してみた。 require 'dxruby' mesh = Mesh.createTeapot Window.loop do Window.drawMesh([100,100,-1000],[150,0,0],[200,200,200],mesh) end なぜ真っ白なのかと言うと、DXRuby1.1はまだラ…

なんで?

ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32]にて。 class Object TEST1 = 1 p ancestors # => [Object, Kernel, BasicObject] end module Kernel TEST2 = 2 p ancestors # => [Kernel] end p Object.const_get("TEST1") # => 1 p Kernel.con…