DXRuby

DXRuby Advent Calendar 2013

ATNDというイベント支援サイトでDXRuby Advent Calendar 2013という企画が催されているのでご紹介。ちなみに主催は俺ではない。 http://atnd.org/events/45135アドベントカレンダーって何?って言うと、キリスト教圏でやってる何かで、ぐぐってWikipediaとか…

Chipmunkのエッセンス(4)

ChipmunkにはDemoプログラムが用意されていて、公式のダウンロードサイトで実行ファイルをダウンロードすることができる。http://chipmunk-physics.net/downloads.php このデモはアルファベットのA〜Sのキーで色々なものを動かすことができるのだが、Pを押す…

Chipmunkのエッセンス(3)

衝突判定が厄介な理由は前回述べたように、単位時間を経過した後では当たっていないが単位時間内には一時的に当たっていた、という状態の検出が非常に難しいところである。すり抜けを容認せず厳密に計算するのは生半可な計算では無理っぽい。直線運動する円…

Chipmunkのエッセンス(2)

Chipmunkは古典力学のうちニュートン力学の一部を計算するものである。それだけでもゲーム用にリアルタイム演算するのは骨が折れる。厄介なのは衝突判定、衝突タイミングの算出、衝突後の状態の計算の3つで、最後のは力学に忠実に計算すればいいが、前の2つ…

Chipmunkのエッセンス

最近いじってわかってきたことを個人的メモ。■Chipmunkとは オープンソースで開発されている2D物理演算ライブラリである。物体に重さや形状などの情報を設定すると、衝突した反応などをリアル(2Dだけど)に計算してくれる。この分野で最もメジャーなのはBox2D…

ChipmunkとDXRuby

2D物理演算ライブラリであるChipmunk2DをDXRubyと連携させる方法を考えている。 Chipmunkは普通にRubyバインダで使えるし、自分でそれらをやりとりするコードを書けばゲームだって作れる。たとえばPoxBulletNightとかはそうやって作られてる。 ただ、Vector…

DXRuby1.5.7dev

今回はバグ修正と仕様変更と、RenderTarget#ox/oyの導入である。バグ修正は結構大きい問題の対処で、Image.load_tilesの計算ミスと、デバイスロスト時にコケる問題。デバイスロストはフルスクリーンにしてALT+TABで発生するが、俺自身フルスクリーンで動かさ…

ご紹介コーナー

なんだか急にやることがゴソっと増えたような気がする今日この頃。なんとなく他の人が作ったものや、今やってることなどを紹介してみることにした。 - 他の人が作ったもの■Anime PV Easy Maker ZERO http://www.geocities.jp/mieki256jp/software/animepveas…

DXRuby1.5.6dev

前回ブログに書いたのが1.5.2devだったから少し(ていうか随分)間があいたけども、1.5.6devをプロジェクトWikiに置いた。 あれから変わったところは主にInput::IMEモジュールの追加と、文字描画時にAA制御のON/OFFが指定できるようになったところ、他不具合修…

DXRubyWSを使ったマップエディタ

シンプルなもので使い勝手はよくないが。 開発中のDXRubyWSのサンプルとして作ってみたところ。 https://github.com/mirichi/DXRubyWSサンプルSTGがひとつのウィンドウの中に描画されていて、そのマップ情報を別のウィンドウで書き換えることができる。これ…

簡易マップエディタ

ずーーーっと前、タイムスタンプを見ると4年と4ヶ月ほど前に作られたとみられる簡易マップエディタに手を入れて、マップデータの読み込み/保存機能追加と2レイヤ対応をした。 まあこれで作ったマップ上を歩くサンプルでスクロールのパターンを作ってみよう、…

マップのスクロール

そういえばDXRubyの掲示板でスクロールのサンプルを作るという話を2度ほどしたうえに放置してたなーと思ってちょっと手をつける。 ついでにマップデータを外部データファイル化して読むようにしておいた。サンプルというにはアレなぐらい簡単なものではある…

DXRubyWSサンプル

このあいだから作っているDXRubyWSにサンプルを追加しているのだが。 https://github.com/mirichi/DXRubyWS まあ、ゲームに組み込むユーザーインターフェイスを作ることは確かにできた。でもコードを見るとわかるがベタに書いたほうが短くなるんじゃないかと…

DXRuby1.5.2devリリース

DXRuby1.5.2devをWikiに置いた。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC今回はちょこっとメソッド追加とバグの修正。主にメッセージループの別スレッド化が原因で発生していたものを直した。やっぱり基…

ウィンドウシステムを考える

ちょこっと作ってみたのでGitHubにて公開中。 https://github.com/mirichi/DXRubyWS GUIぽいものを作ってみようという試み。やりたいことは以下の2点で、どっちを重視するかと言うと悩むところではある。 ・ゲーム向けGUIのベース ・Rubyオブジェクトを目で…

Fiberを使いやすくする仕掛け2

実際にFiberSpriteを使って何か作ろうと考えたとき、ゲームに登場するキャラはFiberを使うものと使わないものに分かれることに気づく。たとえば敵キャラ全体のスーパークラスを作ったときに、その派生クラスがFiberを使うものと使わないものに分かれてしまう…

Fiberを使いやすくする仕掛け

RubyのFiberはコルーチンというかマイクロスレッドというか、ユーザが中断ポイントを指定して任意に切り替えられるスレッドなので、これを使うとパターンで行動するキャラの制御ロジックが書きやすくなる。 Fiberは生成時にコードが必要で、たとえばSpriteな…

DXRuby1.5.1devリリース

主にウィンドウメッセージループの別スレッド化とRenderTargetの自動updateまわりの修正である。他はそんなに大きくは変わっていないが、開発版を出し惜しみする意味もないのでここでリリースしておく。http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D…

扇形を描く

深い意味は無いのだけどシェーダを使って描画してみた。360度系なので0度(360度)をはさんだ場合がちょっと厄介。あとシェーダに渡す長さがピクセル単位にならないのも困りもの。このへんはメソッド作って内部で処理してやると簡単になるだろう。 require 'dx…

gemを作ってみた。

よくわかっていないのだがほとんど手探りでgemを作ってみた。 gem install dxruby とすればインストールできるんじゃないかな。1.8/1.9/2.0用を含めてあるからどのバージョンでインストールしても動くのではないかと思う。1.8でgemからインストールするとreq…

Ruby2.0のprependでHitRangeを使う

DXRuby1.5devにはHitRangeモジュールをサンプルとして添付してあるが、これはSpriteを継承したクラスに対してincludeして使う。 RubyのModule#includeは実行されたときのself(つまりなんかのクラス)に対して、継承階層の上位にモジュールを挿し込む。といっ…

メッセージループの別スレッド化

Ruby1.9以降、スレッドはネイティブスレッドとなった。 DirectX9ではウィンドウを作ったスレッドとDirect3Dを初期化・Reset・Releaseするスレッドは同じでないといけないという制限がある。DXRubyではrequire'dxruby'した時点で内部的にウィンドウを生成し、…

Ruby2.0.0-mswin32版のDXRuby1.4.0

作ってみたのでWikiに置いといた。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%ECRubyのmswin32版というのはVCでビルドしたRubyのうちmsvcrt.dllをリンクするバージョンであり、これを作るにはVC6.0が必要であ…

DXRuby1.5.0devリリース

GWを引きこもって大量の修正を入れていた。とりあえず一区切りという意味を込めて、DXRuby1.5.0開発版のリリースである。http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%ECWikiにはついでにAyame/Ruby0.0.2も置い…

衝突判定範囲の描画

DXRubyEx用には作ってあったのだが、DXRubyにSpriteを追加してから衝突判定範囲を描画する機能が無かったので作ってみた。 これはDXRuby添付の衝突判定サンプルにコードを追加した画面だが、範囲が見えやすいようにSprite#collision_syncをfalseにしてある。…

レンダリング済みフォントを扱う

フリーのフォントはたくさんあるが、気に入ったものが再配布不可になっていたりすると困る。その場合、画像化したデータなら使ってもいい、というパターンは多いが、そうすると固定文字でしか扱えなくなってしまう。 例えば文字単位に画像を作って並べてやる…

レンダリング済みフォントサポートクラスサンプル

できた。 プロポーショナルフォントを扱う場合にはフォントのメトリクス構造体から情報を取ってきて描画位置を調整する必要があるのだが、アルファベットの小文字に特殊なやつ(fとかj)がいて、通常の領域をはみ出して描画することがある。 こういった文字を…

射影変換を考える

自分的メモ。 3D計算における射影変換は、単純に言えば奥のものを真ん中に寄せる計算である。奥のものを真ん中に寄せるためには座標をzで割ることになるが、それで真ん中に寄るということは、画面のど真ん中が座標系の原点(0,0)になっていないといけない。こ…

マリオカートを目指す試練

前回より見た目がしょぼくなったのはご愛嬌。 サンプルのミニレーシングのコースにランダムにSpriteを配置してみた。3D空間の計算式はDirectXに合わせて右に+x、上に+y、奥に+z(修正:奥だった)の左手座標系としてSpriteと地面を統一した。3Dのイメージはそ…

Sprite3Dと頂点シェーダの連携

マリオカート的な画面を作ろうとすると、少なくとも地面の絵は透視座標変換してパースをつけた描画をする必要がある。これをどのように実現するかというのは大きな問題で、いまどきのPCは速いといってもソフトウェアで計算&描画するのは負荷が大きすぎる。…