2009-04-01から1ヶ月間の記事一覧

うーむ

rb_set_end_procはRubyのENDブロックの登録らしい。 なるほど、それは最終的なGCより前に動かないと都合が悪い。 んで、最終的なGCよりも後に呼ばれる関数というものは無いようだ。 こういうものがいままで無かったのは、普通は無くてもよいということなのだ…

むむ・・・

COMインターフェースを使うのにInit_dxrubyでCoInitializeをしているのだが、CoUninitializeを呼び出すタイミングがrb_set_end_procだから、これもまずいんじゃないか。 こっちは全オブジェクトが解放されてから1回だけ実行しないといけないから、全部のDire…

ようやくすっきり

ずっと気になってた音関連と全体の解放処理がすっきりした。 よくわからなくてなんだか気持ち悪かったのだ。 次は音のインターフェースを作らないと。 再生と停止しかないから、ループ開始位置、終了位置、回数、ボリューム、フェードイン、フェードアウト・…

DXRuby0.0.6リリース

いましてきた。 大きなバージョンアップだからSourceForge.jpのトップニュースに流してもらった。 リリースニュースのメッセージはこんな感じ。 「作ろうと考えていた機能が一通り揃いました。 簡単なゲームならとても簡単に、複雑なゲームでもRubyのおかげ…

目玉機能が

DXRuby0.0.6のリファレンスマニュアルにSoundEffectクラスの追加機能を書き忘れた。 目玉機能のはずが隠し機能になってしまった。 いろいろと調べ物してたら、はてなMML記法とゆーのが出てきた。 へー、すごい変なもの作る人がいるんだなーって思ってたら、…

オートリピート

キーのオートリピート機能を作ろうと思って四苦八苦。 意外にややこしい。 基本的にはkeyPush?とpadPush?にかかるようにしようと思う。 考え方としては、最初に押されてから次の入力がはいるまでの時間(フレーム数)と、2回目以降の間隔(フレーム数)で設…

テトリスのデータ

昨日アップしたサンプルでは、わかりやすいように4×4の2次元配列でブロックを表現するようにしている。 単純にそれを右回転させることで回しているわけだ。 がんばって自分で計算してるけど、Rubyの配列だからその機能を使って、全体をtransposeして行ごと…

レースもどき

休み取っといてくだらないものを量産している。 # DXRuby0.0.5 サンプル レースもどき require 'dxruby' # コースデータ line1 = [53, 430, 568, 438, 568, 438, 607, 261, 607, 261, 520, 200, 520, 200, 531, 151, 531, 151, 602, 115, 602, 115, 562, 19,…

コースデータ作成ツール

ちなみにさっきのやつのコースデータはこんなツールで作成した。 # DXRuby0.0.5 サンプル コースデータ作成 require 'dxruby' image = Image.new(640, 480) image2 = Image.new(640, 480) x = 0 y = 0 ox = 0 oy = 0 flag = 0 data = [] Window.loop do imag…

DXRubySpriteのはなし

DXRubyのソースなんかマジメに読んでる人はいないとは思うが。 描画まわりの話を少し。 Window.draw系のメソッドは、DXRubySprite構造体を編集してメモリに保存しているだけである。 これは、描画実行部分とそれ以外の処理をほぼ完璧に分離するためにそうし…

DirectMusic

難しい。 ファイル1個再生するのに、パフォーマンスと、オーディオパスと、ローダと、セグメントのオブジェクトを作って、ファイルとバンドをロードして、あれやこれや設定して、ようやく再生。 なんでこんなにややこしいの。 そんだけいろんなことができる…

そーいえばテトリス

いろいろ調べてたときにこんなもんを見つけた。 http://www.hozen.org/bbs/84/48313/ ここでは議論がむちゃくちゃになってしまっているが、強いCPUとは、ということに少し興味があったので考えてみよう。 テトリスが強いCPUというには、強さの基準が必要であ…

忘れてたけどコモンダイアログ機能とその用途

Windowモジュールにファイルオープンダイアログを表示するメソッドopenFilenameを追加。 VisualuRubyが無いとできないのはなんだか不便だったから。 これで、DXRuby単体で8パズルを動かすことができるようになった。 0.0.6リリースしたらサンプルに8パズル…

SoundEffectの拡張

俺の趣味でSoundEffectクラスを拡張して、矩形波以外に三角波とサイン波とノコギリ波を出せるようにした。 ちょっといじってみたが、サイン波に周波数変調をかけると確かにFM音源ぽい音になる。 非常に面白い。 が、あまりに自由に周波数がいじれるから、逆…

自分でソート作ればいいのか。 ソートってアルゴリズムの基本中の基本だからな。 俺みたいないい加減なプログラマには難しくて大変なものだが・・・。 っていうか、クイックソートしようと思ったら今の描画リストが片方向のリストだから交換できん。 双方向…

ソートできた。

これで描画順指定をしつつ、加算合成も間にはさみつつ、使うほーの面倒は減らして、最もよい形になったかもしれない。 がんばったおかげ。 世の中、いろんな言語でいろんな環境で、こういうライブラリを作る人ってのはいるんだろうけど、みんなそれぞれ、欲…

おそろしく今更かつ(´・ω・`)な疑問

はてなスターってなんだろう・・・ なんか付いたりしてるけど・・・それに対して反応とかしないといけないのかどーかもよくわからん(゜▽゜;)

野心的な比較

SDLの負荷、DirectX直叩きの効率ってのはどんなもんなのか、実行速度と占有メモリは・・・というあたりが気になったので、試してみた。 いつぞやDXRuby0.0.3でためした時のサンプルを開発中の0.0.6用になおして、オブジェクトの数を2000に増やしてみた。 同…

ソートなど

クイックソートをとても頑張って実装してみたけど、これってよく考えたらデータを前と後ろから検索して入れ替えるんだから、同じ数字だった場合の順番が保証されないのだな。 なんか描画が変だと思った。 違うアルゴリズムでソート実装しなおさないと・・・…

ブロックおとし

こんなものを作成中 なんだか右にはみ出してるのは気にしないように。 ここにソースを貼れるぐらい小さく仕上がるかどーかは不明だ。 短くないとサンプルとして意味がない。 短くはできるが、わかりにくくなったらサンプルとしてやっぱり意味がない。 難しい…

とりあえずアップしとくサンプル

ゲームオーバー判定が無いが。 # DXRuby0.0.5 サンプル ブロック落とし require 'dxruby' Window.caption = "ブロック落としモドキ" # ブロックデータ blank = [0, 0, 0, 0] $block = [[blank, [0, 1, 1, 0], [0, 1, 1, 0], blank], [blank, [1, 1, 1, 1], […

ライブラリ内蔵音源

いろいろいじってても、なんかFM音源ぽい音が出ないなーって思ったら。 そういえば、1ms単位で変調してるから、波形のゆがみが無いのだな。 周波数が高速に変動しているだけだ。つまり、擬似和音? 波形をゆがませようと思ったら変調単位を1周期以内にしない…

休みとっちゃった

ここにポツポツと貼り付けているサンプルなどを、ウチの会社の人に動かして見せてみた。 シンプルなものばっかしだが、それなりの動きと、ソースの短さがウケたようだ。 こんなものを趣味で作ってて、もう少し作りこみたいんだけど、ぜんぜん時間が足りない…

z座標とか

描画順を指定するz引数は削除しよう。 drawした順番でよい。 なぜかというと、描画順はdrawの順番で指定することでほとんどコト足りるし、どーしてもdraw順以外で重ねたければ、xとyとimageとzを持つクラスを作って、drawの代わりにそれを配列に叩き込んで、…

CでDirectX

そーいえば、DXRubyはDirectXを扱っているが、言語はC++じゃなくてCである。 RubyがCだから、ってのが一番の理由だけど、だからといって拡張ライブラリにC++が使えないわけではない。 俺がC++を使えないわけでも、たぶん無い。 COMインターフェースをCで扱お…

加算合成がどーにも

うまくいかない。 Googleでいろいろ調べていたら http://source.winehq.org/source/dlls/d3dx9_36/sprite.c?v=wine-1.1.10 こんなもんが見つかった。 wineのD3DXSprite実装のようだ。 MicrosoftのD3DXと同じかというと、フラグが実装されていなかったりする…

できた。

D3DXSpriteの実装をどういうふうに想像しても納得いく動作ではなかったのでナゾだったが、結局、DXRuby側のバグが根本の原因だった。 情けない限りだ。 D3DXSpriteのFlush関連についてわかったことを以下にまとめる。 ・ID3DXSprite->Begin()でD3DXSPRITE_SO…

エラー処理など

いまのところ、ダウンロード件数も増えないし、誰かが使っているという話もきかない。 内部実装を理解してる俺が使う分には、ぱっと見てわかる大きな問題はないと思うが、他の人が使ったときに、いろいろと不具合が出るのではなかろうかと思っている。 あり…

自画自賛

意味もなくぼけーっとブロック崩しをプレイしてしまう。 なんだかお手軽ゲーにしては意外によくできている。 俺はこーいうのが好きだったのか。 DXRubyは、サンプルシューティング程度のものが動くレベルには、約4年前には既にできていた。 画像データのタイ…

言っていきなり

エラー処理などを作っていて、色々実験していたのだが、なんだか音がおかしい。 周波数どおりに出ていないようだ。 計算間違ってるんだろうな・・・と思ったら、理論はあっていた。 でもせめて実数を使えるようにしたほうがよさそうだ。