プログラミング
SDL2は日本語の情報があんまりなくて、SDL2そのままの使い勝手でRubyから使えますというライブラリを作っても、使える人は限られるのではないかと言うことで、基本的なことを書いておくことにした。とりあえずはおおまかな概念だけ。 関数の一覧および使い方…
ずいぶん前からメジャーなオブジェクト指向言語にラムダ式が導入されている。 俺がいる職場では未だに.net2.0なので使えないのだが、最近ちょこちょことヘルパーライブラリを作っていてSystem.Funcが使えたらなあーなどと思うことがよくある。職場の何人かに…
mrubyのkhash.hでハッシュテーブルを生成するときのmallocを削ったパッチが取り込まれたので今日はmalloc記念日。 https://github.com/mruby/mruby/commit/cdb23edf312e868bad3a7f8e8fc1a8aa556bcf4a■mallocとfree Cで動的にメモリを確保するには、標準関数…
DXRubyの公式掲示板で拡大フィルタの話が出たので思い出した話をメモ。■拡大縮小のアルゴリズム 画像の描画はCPUでやってもGPUでやっても、元の画像をVRAMに転送することで行う。等倍の転送ならそのままになるが、3D描画ではドットバイドットの描画がされる…
昨日のコードには2つほど問題がある。一つはシーン切り替えのトリガが1フレーム処理の最後にあるところで、まあこれは単純なミスだ。 もう一つは、シーン切り替えの瞬間のみInput.updateが1フレーム中に2回呼ばれるところ。2回呼ぶのはDXRuby的には反則なの…
いや、理屈はわかる。使い方もわかる。んでも、なんだかいまいちピンとこないと言うか、なじまないと言うか。DXRubyではWindow.loopを基本に作ることになっているが、これはちょっとしたものを極限まで簡単に作れるようにという意図でそうしている。逆に言え…
例外というものがよくわからない。というCプログラマは多いのではなかろうか(当社調べ)。 言語の機能といえばそうなのだが、少なくとも単純なネイティブコードに落とされるわけではなさそうだ。えらく抽象的な概念なのでいまいちピンとこない。 ということで…
mrubyのContextThreading化で大変なバグを2つ見つけた。それを直したらブロックの呼び出しができるようになって、mrblibを含めたmrubyが作れた。 一つはOP_JMPIF/OP_JMPNOTのVM命令側で、ここに書くのも恥ずかしいのだが、昨日の記事に書いたコードがすでに…
ちょっと前にmrubyはダイレクトスレッデッドコードじゃなくてトークンスレッデッドコードだ、と書いた。じゃあ、ダイレクトスレッデッドコードを実装したらどうなるのか、ということで試していた。そもそもダイレクトスレッデッドコードとは何かと言うと、短…
前にやろうとして挫折したものだが。 http://d.hatena.ne.jp/mirichi/20090927/p1 まずはおさらいから。 なぜ三角形のポリゴンで四角形の自由変形ができないのかというと、自由変形された四角形の全てのピクセルが、4点の位置関係によって補正されるから、だ…
CPUの動作速度と比較して、メインメモリは遅い。 PCで使われているスカラ型CPUは内部にキャッシュを持ち、メインメモリとの動作速度の差を吸収しようとしている。 キャッシュにヒットすれば即座に読み出せるが、ヒットしなければメインメモリからの読み込み…
コマンド列を作ってキャラを動かそうとしているわけだが、これを配列として定義することの欠点の一つは「後方参照ができない」である。 Rubyではすべてが実行されるコードであるため、変数は格納する前に参照することができない。変数はオブジェクトの参照で…
RubyはDSL(DomainSpecificLanguege)に向いた言語だと言われる。 DSLってのは特定用途に特化した仕様のミニ言語で、何かを定義する専用にちょっとした宣言・定義文を作ってそれで書けば確かにやりやすい。 そういうミニ言語をRubyのプログラム内に埋め込もう…
必要な機能に絞って、BulletGeneratorとSpriteに分離させた。 とりあえずライブラリ側のコードをのっけると長すぎだから、ここではそれを利用するコードだけとしておく。だからそのままでは動かない。 調子に乗って弾を多くしすぎたのでちょっと重くなった。…
このあいだのやつに:call_commandを追加してみた。 回数指定で別のコマンド列を呼び出すことができる。 コマンド列が終わったら元の場所に戻る必要があるし、無制限にネストができるようにもしたかったから、@stackを追加した。 class Sprite attr_accessor …
久しぶりに更新。 何かやっていたかというと、Ruby1.9.1のVMを調べたり、そんな感じ。 別にそれで何かすごいことを発表しようというわけではなく、前から考えていたキャラ移動をコマンド列でラクに作ろうという試みのプロトタイプができたかなー、という話。…
2Dのシンプルなアクションゲームを作る場合、衝突判定は円と円、もしくは矩形と矩形で判定することになる。 そのような簡単な判定でも、すべてのオブジェクト同士が衝突する可能性があるものを総当りで検出していると、たかだか50個ぐらいのオブジェクトを動…
DirectX9には2D描画機能が無い。描画はすべて3Dだ。 一応D3DXSpriteが用意されていて、これは内部で3D処理をやっているが、インターフェイスは2D描画として扱える。でもちょっと遅い。もっと高速な2D描画が必要なら、3D機能を使って2D描画することになる。 3…
WM_PAINTの処理とDCを扱う機能、それからIMMのインターフェイスをちょっとだけ作ってみた。 こんなことができるようになった。かなり中途半端だけど気合いが尽きたのでここで公開。 Ruby1.8用。カーソルを動かしたり文字を入力したりできる。変だけど日本語…
あけましておめでとうございます。 このブログは始まってまだ1年も経ってないけど、今年もよろしくお願いします。 俺にとって去年はDXRubyの年だったが、今年もそうなるだろう。他にやることないし。 今年の目標はDXRuby1.1系を仕上げて、安定版1.2として公…
まあ、DXRuby1.1を出してから書け、という話ではあるのだが。 必要な機能の洗い出しや動作確認を兼ねているということで。 行列は数学的にはただの計算・表現方法の1つで、それそのものに意味があるものではない。 数学の本などを見ると、小難しい理屈がずら…
ネタとして。 後からユーザーが追加拡張可能なシューティング基盤。 ようするにシューティングゲームエディタのベースになる部分の仕組み。 ・ゲーム基盤、シーン、ゲーム内オブジェクトのクラスで構成される。 ・シーンとオブジェクトはクラスごとにファイ…
真面目に考える。 たとえば敵と敵の弾。 敵は出現してからクラスで定義されたとおりに動く。 そーすると、移動しつつ、あるタイミングで弾を撃つことに、普通はなる。 敵が決めるのはタイミングと、撃つ弾に渡す角度と、数だ。弾の種類はパラメータで渡すこ…
エディタはゲームに使うクラスをそのまま取り込んで使う。 ステージが何フレーム進んだか、を表現するスクロールバーでも作っておいて、その位置まで進んだときの状態を表示できるようにしておく。 何フレーム目でどこに敵が出現するかと、そのパラメータを…
前にメモリマップドファイルの話を書いたときに作ったものを、参考になる人もいるかもしれないからアップしとく。 Ruby/DLを使ってメモリマップドファイルを作成し、WindowsのEventで同期を取るプロセス分散処理。Ruby1.8専用。 http://dxruby.sourceforge.j…
DXRubyで培った技術を駆使して、RGSS2のオープンソース実装「FreeRGSS」を作ってみている。 ようするにRGSSをCで再実装しているわけだ。 あちこち非互換や未実装があるが(音でないとか)、そこそこ動くようになったのと、難しいとこばっかり残ってしまってこ…
文字コードとか勉強していたらいつのまにかWindowsのUnicode対応などに首を突っ込んでしまったのでまとめ。 Windowsは内部的にはUnicodeを使っている、とどっかで見たきがする。 VisualC++でソースの文字コードにUnicodeを使っても正常にコンパイルできるし…
今日はJavaScriptを勉強していた。 Webで何かをしたいというわけではなく、言語として、どういうものなのかに興味があったからだ。 んでも、JavaScriptの本ってWeb上で使うときのHowToみたいなのしか無くて、そういう本には本質的なことが書いてない。 困っ…
いろいろなことをバラバラに少しずつ考える。 まとめて一気に作らないのは、根本的に経験が不足しているからだ。 ゲームを作る経験が豊富であれば、そこから導き出される最適な設計もわかるだろうが、俺にはそういうのがないから、ちょっとずつ考えては寝か…
プロの人も使っているらしいRUDL。 しろりん氏のゲーム講座もRUDLだし、いったいどういうものだろうか、と。 いつものように、ゲーム開発のハブサイトさまの比較サンプルで。 http://ruby-game-dev.org/wiki/index.php ようするにSDLのラッパーなので、サー…