2010-02-01から1ヶ月間の記事一覧

ウィンドウメッセージを処理する

Windowsのいろいろな機能を使うために、ウィンドウメッセージを処理しなければならない場合がある。 たとえばIMEでの文字入力。 IMEの起動はAPIでできるが、入力した文字の受け取りはメッセージで届くので、それを受け取らなければならない。 文字列ならバッ…

Ayame

Seleneの作者が前身Luna用に作ったサウンドドライバAyameを、Rubyから呼べるようにしてみよう、ということで作ったAyame/Ruby。 圧縮/無圧縮wav、ogg、mp3を再生することができる。 http://dxruby.sourceforge.jp/files/ayameruby001-mswin32-ruby18.zip htt…

微妙なコマンドDSL

夜勤だったのだが暇すぎてボケーっとしている間に思いついたもの。 class Sprite @@command_hash = {} def self.define_command(name, &block) @@command_hash[name] = @@command_temp = [] mod = Module.new def mod.method_missing(m, *arg) @@command_tem…

DXRuby1.0.8リリース

せっかくなのでブログにも書いておこう。 各種不具合修正と微妙な機能強化をしたDXRuby1.0.8をリリースしてきた。 http://dxruby.sourceforge.jp/ あ、まだWebなおしてなかった。 今回は細かいことをいろいろと修正したマイナーバージョンアップ的感じ。 末…

バイオリズム

なんか気分が乗らないなーと思ってバイオリズムを調べたりしていた。 ついでに計算&表示するプログラムを作った。 点で描画しているから縮小したらかなり暗い。 require 'dxruby' require 'date' birthday = Date.new(2010, 1, 1) # ここに誕生日を入れる s…

Rubyとゲームとその方向性など

とりあえず、DXRubyのダウンロード数は地味に地味に増えている。一日平均すると5つぐらい? http://sourceforge.jp/projects/dxruby/devel/ ActiveScriptRubyに同梱されいて、最新のものならDXRubyも最新の1.0.7となっているから、古いのを使ってる人か、別…

mingw版のRuby1.9.1

いやはや、参りました。 約50%の負荷で約1000オブジェクト、Rubyのコードだけで動くようになってしまった。 何をしたかと言うと、いままでmswin32版のRuby1.9.1を使っていたのを、mingw32版に換えただけ。 正確には ruby 1.9.1p376 (2009-12-07 revision 260…

コマンドDSLの拡張

コマンド列を作ってキャラを動かそうとしているわけだが、これを配列として定義することの欠点の一つは「後方参照ができない」である。 Rubyではすべてが実行されるコードであるため、変数は格納する前に参照することができない。変数はオブジェクトの参照で…

Rubyのクロージャとforとeachと1.8と1.9

Rubyにはクロージャと言うものがある。 ようするに手続きオブジェクトで、Proc.newなどで作ることができる。 こいつのポイントは、それが作られた環境(ローカル変数とか)のスコープと値を保持するところだ。環境を閉じ込めるからクロージャという。らしい…

コマンドDSLの定義

RubyはDSL(DomainSpecificLanguege)に向いた言語だと言われる。 DSLってのは特定用途に特化した仕様のミニ言語で、何かを定義する専用にちょっとした宣言・定義文を作ってそれで書けば確かにやりやすい。 そういうミニ言語をRubyのプログラム内に埋め込もう…

ふりこ

見た目にしょぼいサンプルを乱発しております。 ワイヤーアクションを作ろうと思ったら、なにはともあれ振り子の動きが必要だ。 require 'dxruby' # ワイヤーの情報 wx = 320 wy = 0 length = 220 line_image = Image.new(1, 1, [255,255,255]) # 自キャラ x…

Fiberを利用してみる

そんなことを考える人は当然のように既にいるわけだが。 yhara氏のサイトroute477より。 http://route477.net/d/?date=20080210#p01 FiberはRuby1.9で追加されたクラスで、一般的にはコルーチンと呼ばれる。ゲーム関係ではマイクロスレッド。 これを使うと、…

DXRubyExtensionの簡単な使い方の例

見た目が賑やかで複雑なサンプルよりも、こういうもののほうがよかったかもしれない。 require 'dxruby' require 'dxrubyex' class Toufu attr_reader :collision, :x, :y @@image = Image.new(50,50,[255,255,255]) def initialize @x = rand(590) @y = ran…

弾幕生成機能

必要な機能に絞って、BulletGeneratorとSpriteに分離させた。 とりあえずライブラリ側のコードをのっけると長すぎだから、ここではそれを利用するコードだけとしておく。だからそのままでは動かない。 調子に乗って弾を多くしすぎたのでちょっと重くなった。…

GC負荷を制御する

ちょっと試したら意外に効果が得られたので書いておく。 Rubyにおいて、特に一定時間内に処理を行う必要のあるアクションゲームなどを作る場合には、GCの処理で一瞬止まるのが大きな問題となる。 GCの対策として打てる手は3つ。 (a) 毎フレームGCを動かす (b…

コマンド呼び出しコマンド

このあいだのやつに:call_commandを追加してみた。 回数指定で別のコマンド列を呼び出すことができる。 コマンド列が終わったら元の場所に戻る必要があるし、無制限にネストができるようにもしたかったから、@stackを追加した。 class Sprite attr_accessor …

キャラ移動の仕組み

久しぶりに更新。 何かやっていたかというと、Ruby1.9.1のVMを調べたり、そんな感じ。 別にそれで何かすごいことを発表しようというわけではなく、前から考えていたキャラ移動をコマンド列でラクに作ろうという試みのプロトタイプができたかなー、という話。…