2013-01-01から1年間の記事一覧

OpenGL対応その2

DXRuby Advent Calendar 2013、26日目です。嘘です。25日目はDXRubyの開発環境に(将来的に)望む物でした。配布形式については初めの頃からの課題ではあって、どうにかできないかとRBatに暗号化を突っ込んでみたりしているのだが、そのやり方はrequireの動…

OpenGLテスト中

そもそもOpenGLがさっぱりわかってないのでどうにもならん感じである。 とりあえず、DXRubyのImageにconnect_glメソッドを追加して、OpenGLの描画先をImageオブジェクトにすることはできた。DXRuby1.5.8dev-test-mswin32-ruby20.zipとして地味に置いておいた…

おもちゃを作ってみようとしたが

SoundEffectに配列から音を生成する機能を追加したから、これを使っておもちゃ的なプログラムを作ろうと考えていた。 例えば正弦波を出力するブロックがあって、それを縦とか横とかに繋げて音を変化させるようなもの。縦に繋ぐと和音になって、横に繋ぐと周…

DXRuby1.5.8devリリース

ちょっと勢いで作っちゃった新機能を公開するために、これまでのバグ修正などを含めた1.5.8devをリリース。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC細かいものから大きなものまでいくつかのバグ修正と、…

音の理屈と実践

この記事はDXRuby Advent Calendar 2013の14日目です。 13日目の記事はあおいたくさんのならせる!SEでした。まさかのSoundEffect記事。ピコピコ音を生成する機能だが、音の原理や波形のイメージが頭の中に無いと地味に理解しづらい機能でもある。記事では言…

Spriteにまつわるあれこれ

この記事はDXRuby Advent Calendar 2013の8日目です。 7日目の記事はしのかろさんのDXRubyのSpriteを継承して拡張する方法についてでした。あおたくさんとハイドさんがMarkdownで綺麗にしてくれました。https://gist.github.com/RPGP1/7833833Spriteの挙動を…

DXRubyのポリシーなど

最近、mrubyのSDLライブラリや、Rubyでも他のゲームライブラリなどが出てきている。前からRuby用ゲームライブラリは比較的たくさんあったわけだが、他のものを眺めていて、ようやくいまごろDXRubyの特徴的な設計方針がわかったような気がした。 もともと作り…

Window.draw_morphを使う

この記事はDXRuby Advent Calendar 2013の2日目です。 1日目の記事はあおいたくさんのIntroduction to DXRubyでした。なんか初っ端から気合の入った紹介記事だったが、2日目は急展開でマイナーな機能の活用ネタとして、Window.draw_morphを使ってみる。 draw…

DXRubyWSでのアプリ開発を考える

DXRubyWSの目標の一つとしてGUIアプリを簡単に作るというのがある。現状では、そのためのGUIまわりの基本的な実装ができている程度であり、ぶっちゃけGUIアプリが作りやすいとお世辞にも言える状態ではない。 具体例を示そう。 require 'dxruby' require_rel…

Chipmunkのエッセンス(8)

Wikiの野良ビルドChipmunkを最新にしておいた。これでブロック渡しのCollisionHandlerの引数が1個〜2個の場合にもきちんと動作するはずだ。 さて、今回は衝突ハンドラのもうちょっと凝った使い方の話である。■衝突ハンドラのオブジェクト渡し 衝突ハンドラは…

Chipmunkのエッセンス(7)

衝突に関する処理の基本としてデフォルト衝突ハンドラを紹介したが、デフォルトとわざわざ言うからにはデフォルトじゃない衝突ハンドラもある。今回は残りの衝突制御を一気に紹介する。■デフォルトじゃない衝突ハンドラ デフォルト衝突ハンドラはSpace#set_d…

Chipmunkのエッセンス(6)

物理演算ライブラリであるChipmunkの用途は、まあ、物理演算することなのだが、画面内に物体を出現させてそれをぶつけて眺めるだけではゲームにはならない。ゲームであれば、例えば衝突したときにダメージを受けて壊れるとか、アイテムを取得するだとか、何…

Chipmunkのエッセンス(5)

物理演算の本質は衝突の処理である。少し前に書いたように衝突タイミングと接触点を算出するのが難しいが、これは擬似的な算出方法でなんとかできる。しかしそれ以外にも厄介な問題が潜んでいる。今回はそのあたりを少し。■接触した状態 たとえば固定された…

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…

TypedDataについて

Ruby2.0でC拡張ライブラリ用のオブジェクト形式としてTypedDataが追加されている。俺はずっとRuby1.8&1.9用に作ってたからつい最近まで知らなかったのだが(新しいREADME.EXT.jaにも書いてないし)、RGenGCに対応する方法を追っかけてたらなんか出てきたという…

RGenGCに対応する方法

Ruby2.1.0-preview1は出たがREADME.EXT.jaを見ても書いてないので調べたことをここに書いておく。正式なマニュアルじゃないし検証してるわけでもないから豪快に間違っているかもしれん。■はじめに RGenGCは今までの拡張ライブラリのコードそのままで動作する…

Ruby2.1.0-preview1

今年の12/25リリース予定であるRuby2.1.0のpreview1が出たのでDXRubyをそのままコンパイルして動くかどうかを試してみた。 Ruby2.1ではGCが世代別GCになって、本来であれば拡張ライブラリは修正が必要になるもんなのだが、そこはうまいこと細工してそのまま…

DXRuby1.5.6dev

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

パンの袋をとめるアレをクロージャといいます。

DXRubyWSではシグナルハンドラやオートレイアウトの定義でクロージャを多用するのだが、クロージャと言われてもピンとこない人は結構いるのではないかと思う。今回はクロージャとは、という話。■スタックとローカル変数 Rubyでメソッドを定義するとその中で…

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

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

簡易マップエディタ

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

マップのスクロール

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

スタックとキューの速度

RubyではスタックもキューもだいたいArrayを使って実装する。Arrayの一番後ろに追加、取り出しをするのはpush/popメソッドで、一番前にするのはunshift/shiftである。これらをどういう組み合わせで使うかでスタックとキューのどっちかになるわけだが、組み合…