プログラミング

FPS制御とGC

きめ細かなFPS制御をしようと思うと、Rubyの処理負荷変動幅の大きさの前に呆然とするしかない。 ガベージコレクタは手ごわい相手だ。 とりあえず、GCの負荷対策への基本姿勢として、以下の3パターンが考えられる。 (a)負荷変動が大きくてもうまいこといく方…

Cの最適化のはなし

ふと思い出した。 そーいえば、Cはポインタが絡むと最適化できないのだった。 ポインタを使うと、参照先のメモリの中身が変わっている可能性があるから、同じメモリを参照しているといってまとめることはできない。 ポインタを2つつかうと、それらが同じメ…

サンプルシューティングをいじる

DXRubyが速くなったので、処理速度に余裕ができた。 そこでオプションのこざるにフォーメーション機能を追加してみた。 従来の追っかけてくるタイプと、自分との相対位置を固定して2発ずつ別方向に弾を撃つやつと、ぐるぐるまわりながら全方位に3発ずつ撃つ…

調子に乗ってボスキャラを作る

このあたりまでは既に絵のデータがあるから作れるが、描いてくれる人がいないので2面とかはできない。 全体的にハロウィンぽいのにどーしておばけだけ和風なのかは気にしてはいけない。 弾が尾を引くようなエフェクトさえつけなければ、相当な動きができるは…

Star Rubyで遊ぶ

早起きしたから朝っぱらからDXRubyのサンプルミニレースの移動アルゴリズムをそのまま利用して、Star Rubyの透視座標変換に突っ込んでみた。 コースはプログラムで作っていたから、ちょっとめんどくさくてまだ。 マウスでぐちゃぐちゃに描いた絵を使ってみて…

マジメにコウソクカを考える

DXRubyは基本的には速いが、たとえばスプライトの数が2000とか3000とかになってくると、描画処理もばかにならない重さになってくる。 あたりまえである。 だいたい、それ以前にRuby側の処理が重いっつーの。 そういうはなしは置いといて、思考実験という感じ…

結果

まず訂正を。 Pentium4のキャッシュラインサイズは128Byteらしい。 どうやら随分古い知識をお持ちのようで。 構造体を32Byteに減らしても描画速度が全然変わらなくておかしいと思ったら、そういうことだったのか。 最適化は正しい知識をもとに行わないと努力…

文字コード嫌い

わけわからんヽ(`Д´)ノ

RGSSのTableクラスのナゾ

ずーっと前に、RGSSにはTableクラスという数字の配列を扱うクラスがある、とどこかで読んだ。 そのときには「へー」って思っただけだったが、いま改めて考えてみると何かが変だ。 どこが変なのか考えてみた。 配列というのを最も単純に実装すると、Cの配列に…

そして高さが加わる

なんだかタクティクスオウガみたいになって(゚∀゚)キータ 絵がみにくいから縁取りを入れてみた。 これもプログラムで生成したデータ。 テキトーに生成した絵でも、こんなふうにすると見栄えがよくなった気がするから不思議だ。 こういうプログラムは作ってて楽し…

高さデータ

高さマップも作って水の部分だけ低くしてみた。 左上に微妙に表示されてる小さい数字はFPS。 「2」とか出ている。やばい遅さだ。 ほんとに2FPSなのかと言うと、計算が怪しいから信用はできないが、とにかく重いのは確かだ。 32*32サイズの絵を表面だけで1000…

ちょっと本格的

何を思ったのか気がついたら妙に気合の入ったマップエディタが出来上がっていた。 左右に90度回転、土地の上げ下げ、右クリックでスポイト機能を作りこんでみた。 ついでに砂地も追加。 ここまで作っていながらスクロール機能は無い。 なんて中途半端な。 CP…

棒人間デザイナー

いままでになくくだらないソフトを作り始めた。 名づけて棒人間デザイナー。くだらないクセに結構難しい。 これはお絵かきツールではなく、関節を軸にパーツをくるくる回したりできて、できあがったデータは座標配列として出力される。 用途はもちろんDXRuby…

まじめに最適化を考える

ある機能に限定して高速化をすると、その機能を使うソフトに限定して高速化される。 ボトルネックを解消するのは正しいアプローチだが、仕様の変更や追加が伴うなら、その機能がどれだけ使われるのかという分析が前提である。 仕様の変更も機能の追加もしな…

MMLでピコピコ

なんとなく音が鳴りはじめた。 かなり変だが、一応、音階とテンポ、ボリューム、オクターブなどの指定は通る。 長さが微妙なところで、MMLの&を使うところが難しい。 テンポ絡みで、ブレゼンハムっぽい方式を採用してみたところ、これがなかなかうまくいかな…

インストールされてないフォントを使う機能

フリーのフォントってあるけど、フォントのファイル自体の再配布は禁止とかあるじゃない。 画像にして使うなら再配布可能みたいな。 たとえば、ゲーム内で使う文字をテキストに吐き出しといて、それを入力して、使うフォントを画像に展開、大きな画像ファイ…

FM音源の理屈

詳しいことはわからないが、概要など。 FM音源っつーのは、ある波形にたいして別の波形を入力して、元の波形の周波数を、入力した波形により修正する、つまり周波数変調の機能を持った音源だ。 えらい人が編み出した理論をYAMAHAが頑張って研究して製品化し…

MMLを解釈して再生するロジック

DXRubyのSoundEffectを利用して、ファミコンの音楽を作れるかしらん。 と思って、いろいろと考えている。 はてなMML記法を使えば既にそんなことできるわけだが、自分で作るというプロセスが目的であって、それで何かを再生することにはそんなに興味は無い。 …

ストリーミング再生を考える

DXRubyではサポートしていないが、DirectSoundにはストリーミング再生というものがある。 サウンドバッファをループバッファとして確保し、再生しながら再生し終わった部分をロック、書き換えという荒業を行う機能だ。 ゲームで使いそうな効果音でDXRubyがサ…

コースデータ作成ツール

ちなみにさっきのやつのコースデータはこんなツールで作成した。 # DXRuby0.0.5 サンプル コースデータ作成 require 'dxruby' image = Image.new(640, 480) image2 = Image.new(640, 480) x = 0 y = 0 ox = 0 oy = 0 flag = 0 data = [] Window.loop do imag…

CでDirectX

そーいえば、DXRubyはDirectXを扱っているが、言語はC++じゃなくてCである。 RubyがCだから、ってのが一番の理由だけど、だからといって拡張ライブラリにC++が使えないわけではない。 俺がC++を使えないわけでも、たぶん無い。 COMインターフェースをCで扱お…

クラスに必要なもの

しょぼいプログラムを色々と書いてて思った。 クラスっつーのは、データをそれをいじる手続きをカプセル化した定義である。 確かにそうかもしれないけど、ほんとにそうなのか? オブジェクト指向言語なら、オブジェクトの手続きとデータはクラスに定義して、…

簡単なものを簡単につくる

Ruby用のゲームライブラリは調べてみると結構な数がある。 他と比べたら少ないほうなんだろうけど。 DXRubyはおそらくその中でも、シンプルさで言えばトップクラスだろう。 低機能さでもたぶんそうだ。 DXRubyはSDLを使わないで、単体のライブラリとして存在…

クリップ

そういえば、DXRubyのLockImageオブジェクトで点描画をするとき、テクスチャの範囲外に書き込もうとするとエラーでコケる。 それはまあ、ロック範囲外だから当たり前なのかもしれないが、点描画なら範囲外のチェックは簡単にできるから、何も考えてなかった…

DXRubyとImageオブジェクト

DXRuby0.0.2で判明している問題点は以下の2つ。 (A)Window.draw系を実行したあとで、Window.loopの処理に戻る(実際の描画をする)まえにImageオブジェクトがGCに回収されてしまうとコケる。そんなことする人は滅多にいないだろうけど。 (B)Imageオブジェクト…

Font

DXRuby0.0.3でとりあえずフォント描画機能を実装しようと試行錯誤。 なんとか表示はできるようになった。 DirectX9のD3DXを使って手軽に実装しているが、たとえば、スプライト機能を使う場合にはID3DXSpriteインターフェースを取得して、テクスチャを与えな…

人の気をひきつけるサンプルプログラムとは

このあいだ公開したDXRubyはまだまだ機能が足りない。 イメージオブジェクトの直接編集、イメージオブジェクト間転送、フォント関連、音関連。 そのあたりができないと、ちょっとしたゲームも作れない。 逆に言えばそんだけできればほぼ完成ということだ。 …

更に調整

妙なサンプルに更に手を加えた。 四角の加速計算に距離を追加して、キビキビしつつ細かい動きができるように。 んでもって、障害物はある程度かわせるように減らして、ついでに左クリックで周りの時間を遅くする機能を追加した。 # DXRuby Ver 0.0.2 サンプ…

8パズル

DXRuby用の8パズルがだいたいコードが整理できてきたから、サンプルのひとつとしてここに書いておこう。 ファイルはDirectXがサポートしてるもの(bmp、png、jpgなど)で、サイズはなんでもOK。 そこそこ大きくて、できれば正方形が遊びやすい。 右クリックで…

さんぷるとか

DXRuby用のサンプルとして、15パズルを更に簡単にした8パズルを作った。 完全ランダムでシャッフルすると解けない問題になってしまうのを、30分ぐらいいじってようやく気がついた。 サンプルならスマートなロジックにするのが望ましいが、どうにもごちゃごち…