プログラミング

RGSSにRubyゲームプログラミングの可能性はなぜ見えないのか

というタイトルを付けてみた。 俺はDXRubyで、ゲームプログラミング初心者、Ruby初心者に、ゲーム作りを楽しんでもらいたいと思う。 そういう方向性で頑張ろうとすると、やっぱりRubyゲーム界に革命を起こすようなものにはならないんじゃないかという気もす…

ゲームを作っているとアリガチなハマりかた

結論から言うと割り算。 Rubyでは、IntegerとFloatは特に意識しないでもごちゃ混ぜにできるし、勝手に変換してくれる。 座標などは初期値は整数で入れて、移動するときは三角関数を使って実数を足したり引いたりして、そうすると座標情報は実数になる。 加減…

初心者向け開発環境とは

Rubyゲーム界に必要なのはエディタとHPでは? http://dgames.jp/dan/?permalink&date=20090701_00 うんうん。 すごくすごくよくわかる。 専用エディタは、半分ぐらいのところまではスターターキットで行けてるから、例えばDelphiでTEditor使って、スターター…

COBOLによるゲームプログラミング

「この歳になると、新しいことを始めようと思ってもなかなか。ゲーム作るのも面白そうだが、新しい言語を覚えるのが大変で。COBOLでゲームが作れるような環境があったらちょっと試してみようか、とも思うのだが」 と、ちょっと前にうちの社長が言っていた。 …

Javaでゲームプログラミング - LunaJava

作者のhikaruさんに了解を頂いたので、記事にしてみる。 Java用の2DゲームフレームワークLunaJava http://www.kokeodoshi.net/hikaru/lunajava/ LunaJavaはJavaでゲームを作るのに使える、2D専用ゲームフレームワークだ。 名前が似ているがLuna(DirectXライ…

LockRectの挙動

Imageオブジェクトをロックして四角や円を描画するときに、今は全範囲をロックしている。 大きな画像に小さい絵を描画しようとすると、全範囲の転送が発生するから、かなり無駄になっているはずだ。 これを少しいじってみる。 640*480の画像に対してランダム…

LockRectきっつー

ロックする範囲の計算を間違えて範囲外に書くとOSごとフリーズする。 もう何度フリーズさせたか・・・ とはいえ、リリース後にフリーズする現象が出ても困るから、Ruby側から指定できることは何でもやっておかないと。 Imageオブジェクトのx=/y=/width=/heig…

SDLが使うDirectX

なんとなく気になったから、SDLを調べてみた。 1.2のソースを覗いたところ、Windows用の描画はDirectX5のDirectDrawを使うらしい。 なるほど。 現在1.3が開発中で、そっちのほうは2Dでも3Dの機能を使うようなことが書いてあった。 こっちもソースを覗いてみ…

加算半透明の仕組み

どうもネットで調べていると、加算半透明のやり方に2種類あるみたいだ。 2種類ある、ということを説明しているところは無いようだが。 ちなみに2種類っつーのは以下の2つ。 (a)ソースをSRCALPHA、デスティネーションをONEとする。 (b)ソースをONE、デスティ…

なぜデバイスロストが問題になるのか

DirectXを直接使うプログラミングをする場合、デバイスロストの動作を理解してゲームを設計しなければならない。 テクスチャを全てレンダーターゲットにしてハードウェア描画をしながら使う、ということをすると、デバイスロストで全てを失うことになるから…

DirectX9の思想

DirectX11が出ようかというこの時代にいまだにDirectX9なのは、WindowsXPではDirectX9までしか使えないからだ。 Windows7が出ようがこの状況はまだ数年変わらないだろう。 そういうことでDXRubyも当分DirectX9だ。 DirectX9のDirectGraphicsでは、描画系の関…

デバイスロスト問題

DirectXにはデバイスロストというとても厄介な問題がある。 現状のDXRubyではD3DXSpriteをロストさせてリセット、復元の処理を入れてある。 これをしないとデバイスロスト時に描画されなくなってしまうのだ。 テクスチャはD3DPOOL_MANAGEDを指定しているから…

Star RubyでDXRubyExtensionを使う

DXRubyExtensionは用途は色々になる予定だが、とりあえず衝突判定ロジックが詰め込まれている。 これはRuby汎用の拡張ライブラリだから、名前にはDXRubyと付いているしサンプルもDXRuby用だがDXRubyには依存しない。 はずだ。 論より証拠ということで、Star …

Ruby側の最適化

必要メモリ帯域は大幅に減らした。 うちには遅いPCは無いから実際どのレベルまで動くようになっているのかはわからないが、半透明フィルタ100枚かぶせた時の動作は軽くなったから効果はあるはずだ。 どうしてそういう判断になるかというと、半透明フィルタの…

サンプルシューティングでやったことを少し

記録として、サンプルシューティングで修正したところとその意味を書いておく。 基本的な仕組みとして、弾とか敵とかはそれぞれのモジュールが管理する。 モジュールのインスタンス変数としてオブジェクト配列や当たり判定配列があって、モジュールのメソッ…

棒人間エディタその後

ほったらかしになってた棒人間エディタをまたいじっていた。 線の先に線をつなげるようにして、連動して回転するようにしたところ、腕の付け根が表現できないことに気付いて、急遽「首」を追加してみたのだが、何かが変だ。 関節を増やしすぎても使いにくく…

OggVorbis再生ライブラリVoxラッパクラス

HSPのほうでメジャーらしいVox.dllを使ってOggVorbisを再生するラッパクラスを作った。 使わないと思われる関数は無視した。 使い方は・・・コメント見たらわかるだろう。 再生しながらsetVolumeすると音量の変更が少し遅れるのは仕様だろうか。 Voxのダウン…

DirectXで2Dの話

DXRubyは2D専用だからして、DirectX9を使っていながら2D描画しかしない。 2Dとはいえ一応ポリゴンで描画するから、テクスチャを設定したり頂点を計算したりする。 そのあたりはどうもよくわかっていなくて、とりあえずD3DXSpriteを使わないようにはしたが、…

いろんなあたり判定できた

ネットを漁ってとりあえずRubyで実装。 基本アルゴリズムとしてはこれでOKだろう。 require "dxruby" Vector = Struct.new(:x, :y) Point = Struct.new(:x, :y) # 線分と直線 <0 交差する, =0 上, >0 交差しない def intersect(p1, p2, p3, p4) return ((p1.…

当たり判定の仕様を悩む

少しずつ考えはまとまってきた。 が、回転した矩形をサポートするところで、その扱いをどうしたらいいのかで悩む。 DXRubyExtensionでサポートする当たり判定のデータの持ち方は、基本的にはDXRubyで描画する画像に対応させるようになっている。 画像のxとy…

うわ、めんどくせぇw

ソース眺めてたら急に面倒になってきた。 もう既に十分ややこしいのに、これ以上混乱させてどーする。 回転した絵を正確に判定する必要なんかなかろ。 拡大縮小もそんなにやりたきゃ自分で計算してなんとかしやがれ。 楕円なんぞ知ったことか。 原点の無い三…

三角がー

追いかけられる夢を見そうだ。 三角の判定作るだけでこんなに苦労するとは。 他のんやめる決断しといてよかった。 しかし線分を三角の流用でやろうとしてもうまくいかない。 計算式の前提に合ってないのか。 困った。 まあ実際、調子いいときって効率いいか…

マップシステムを考える

こんなことを考えていた。 実装はまだ全く手付かず。 すぐできそうだけど。 コードを書くより仕様を決めるほうが大変だし、大事だ。 require "dxruby" # マップシステムを考える # マップシステムモジュールが持つのは、マップの描画方法の指定、それから絵…

コンパイラによる最適化の落とし穴

いやー悩んだ。 DXRubyExtensionの動作確認をしてたところ、どーにも点オブジェクトが矩形オブジェクトに化ける。 dfree(解放時にGCから呼ばれる解放関数のポインタ)を使ってクラスをチェックしているのだが、定数のはずなのに値がおかしい。 release_Coll…

DXRubyExtension機能拡張できた

なんか効果的なサンプルをつけてSourceForge.jpでリリースしたろか、と思った。 でも、DXRubyプロジェクトの中のパッケージにすると、これが何かを説明する場所がないし、そもそも別のものだ。 とはいえ別プロジェクトにするとそれはそれで管理が面倒だ。 や…

どらくえフォント

有名かもしれない。 すらいむのへやさま。 http://slime4.hp.infoseek.co.jp/index.htmlここにドラクエフォントなるものがあって、非常によいデキなのだ。 こんな感じになる。 これを使ってWiki新ネタ「RPG用メニューの作り方」、とかも面白いかもしれない。…

DXRubyExtension0.0.1完成

とりあえず、別グループの矩形衝突判定だけ作って、サンプルシューティングにテスト組み込み。 処理負荷表示が、ボスの弾ばらまき時でも30%台に収まるようになった。 負荷半減とまではさすがに行かなかったが、3割から4割は減っているような気がする。 劇的…

古ーい最適化の資料

検索してたら懐かしいものが出てきてちょっと昔を思い出した。 PentiumIIまでのCPUのアーキテクチャと最適化の文書だ。HOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR http://hp.vector.co.jp/authors/VA003988/pentopt.htm当時、これを見ながらアセンブラ書い…

CPUアーキテクチャとソートなど

スカラ型CPUはL1キャッシュのヒット率に処理速度が大きく依存する。 それを意識した仕様・アルゴリズムを書けるかどうかが、プログラムの性能を決める。 もちろん大きな設計レベルで無駄がないことは前提だ。 L1キャッシュは、キャッシュの追い出しアルゴリ…

Ruby拡張ライブラリの危なそうな間違いかた

最も多く呼び出されるであろうWindow.draw系のメソッドを、もうちょっとどーにかできないんだろうか、と思っていろいろいじっていた。 省略可能な引数のあるメソッドは引数が配列で渡されるから、はじめにrb_scan_argsをして受け取るわけだが、これはユーテ…