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

Flash用のなにか

最近、Flashの勉強をしている。 と言ってもActionScriptは全然で、Flashのswfファイル解析、swf内のABC(ActiondcriptByteCode)解析みたいなこと。 FlexだってActionScriptをコンパイルしてswfを吐き出しているわけだから、これらの構造さえ理解できて出力す…

SWFファイルのヘッダ

とーとつにFlashに興味が沸いたので手始めにヘッダを解析してみた。 問題なのは興味の対象がFlashであってASではないところだ。 #! ruby -Ks require 'zlib' class SWF attr_reader :version, :length, :x_min, :x_max, :y_min, :y_max, :frame_rate, :frame…

少しできた。

先日のサンプルの続きを作っていた。 とりあえず本家サンプルのStage1〜7プラスExtraという構成のうち、Stage1だけできた。 http://dxruby.sourceforge.jp/files/AAM_DXRuby_Sample.zip ただ、絵については本家のものを使うから、本に付属しているCDからText…

LeverDashMan

「アクションゲームアルゴリズムマニアックス」っつー本がある。 話のタネにと思ってずっと前に買ったのだが例によってそのまま積んであった。 タイトルの通り、アクションゲームにありそーなアルゴリズムについて片っ端から説明とサンプルコードが書いてあ…

classとStruct

RubyにはStructというクラスがある。 データを出し入れする専用のクラスを簡単に定義するためのものだ。 Hoge = Struct.new(:x, :y) foo = Hoge.new(5, 10) p foo.x # => 5 p foo.y # => 10 foo.x = 20 p foo.x # => 20 Struct.newすることで、その引数のatt…

Vectorと破壊的メソッド

DXRuby1.1もDXRubyFramework0.0.3も、VectorクラスはImmutableとして作っている。 もともとMatrixは3Dのビューやらの設定用、VectorはShaderのパラメータ用、みたいな感じで作ってあったから、特にShaderの設定値はVALUEでそのまま保持する都合上Immutableじ…

分離面判定法による回転した矩形の衝突判定

Cで実装しようと思ったが難しいのでとりあえずRubyで作ってみた。 これを作るためにDXRubyFrameworkにMatrixとVectorを追加した。 こういうことをするなら無いとやってられない。 あとはこれをCで書いて組み込むだけだが、正直なところ大変だ。 時間かかりそ…

DXRubyFramework0.0.3リリース

さきほどのコードを実行できるだけの機能を持った、DXRubyFramework0.0.3をWikiに置いた。 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC DXRuby1.1系には3D用にMatrixとVectorを入れてあったが、1.0系には無…

PCが変わってるから比較できない。

なかなか困った状態ではあるのだが。 Athlon II X2 240e(800MHzにダウンクロック中)、GeForce8400GSにて。 WindowsXP、Ruby1.9.1、DXRuby1.0.9、DXRubyFramework0.0.3(未公開)。 require "dxruby" require "dxrubyfw" class Ruby < Sprite MAX_X = 639 - 32 …

意味不明なデモ

うむ、スランプだ。 何か作ってみようと思ってできたものは、機能の有効な使い方ではなく、気の利いたサンプルにもならず、面白いものでもない。 いったいこれはなんなん?! DXRubyFramework0.0.2用。 require 'dxruby' require 'dxrubyfw' class Panel < S…

DXRubyFramework0.0.2チュートリアル

いろいろと不具合はありそうだが、とりあえずリリース直前。 なんとなくチュートリアルその1を書いてみたからそれを公開してみる。 超基本の使い方がわかる。かもしれない。 マニュアルはまだ真っ白なのでそれが書けたらWikiに置く予定。 対応するバージョン…

DXRubyFramework0.0.2公開

DXRuby Wiki ファイル置き場 http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC いまのところDXRuby1.0.9/Ruby1.9.1のみ対応。 なんしかややこしいことしてるから不具合とか色々ありそうな予感。変な動きをしたら…

ものすごくしょんぼりなSpriteクラス

テキトーに書いたらなんとなくできたので置いておく。 require 'dxruby' class Sprite attr_accessor :x, :y, :image attr_reader :param [:z, :angle, :scalex, :scaley, :centerx, :centery, :blend, :alpha].each do |key| eval(<<-EOS) def #{key} @para…

コードがものすごくアレなSpriteGroupクラス

行列とベクトルを使っているのでDXRuby1.1系専用となるが、SpriteGroupクラスを作ったので公開しとく。 機能としてはSpriteオブジェクトを配列にして複数保持し、任意の描画位置と回転原点を指定して保持Spriteすべての座標と画像を回転描画できる。そんだけ…

画面に線を引くテスト。

Window.drawScaleを使って1ピクセルのImageを引き伸ばすのは、塗りつぶした四角形をシンプルに描画する方法として、メモリ的にも速度的にもたぶん最も効率的だ。 hikaruさんのブログ http://www.hikaruna.net/blog/?p=296 PCの世界ではどこでそう決まってる…

モジュール式ゲームライブラリ

SFontのプログラムを書き直してくれた人が、俺のTwitterのつぶやきに反応してモジュール式のゲームライブラリにチャレンジしてくれた。 http://twitter.com/mirichi/status/16602971260 http://d.hatena.ne.jp/whiteleaf/20100621/1276961364 Ruby1.9.1以上…

SFontぽいもの

そんな話題を見かけたので作ってみた。 画像のデータはこちらからお借りした。 http://user.cs.tu-berlin.de/~karlb/sfont/fonts.html SFontそのものを使ったことが無いからこういう感じでいいのかどうかよくわからない。 なんかそれっぽく描画できてるから…

Rubyとゲーム

このところ、Rubyにはメジャーなゲームが無い、とか、ライブラリは多いけど、とかいう意見をぼちぼち目にする。 原因はこれかな。 Rubyゲーム会議2010 http://ruby-game-dev.org/wiki/index.php?Ruby%E3%82%B2%E3%83%BC%E3%83%A0%E4%BC%9A%E8%AD%B02010 ああ…

オブジェクト指向ってなにかしら

もう随分前になるが、Smalltalk Odysseiaが消えてしまった。面白い文章だったのに残念だ。 Webは情報を公開する側が資金を負担する必要があるし、アクセスが集中すると簡単にコケるし、下手すりゃ単一障害点に一撃で情報が消えてなくなる。 有用な情報は金か…

言うだけなら簡単。

DXRubyにプリセット画像を用意するというネタを思いついた。 ゲームは作ってみたいけど絵は描けないという人は多いだろう。少しは自分で描く努力をしなさい、というのは簡単だが、俺みたいに何度となく努力しては挫折して、を繰り返す人もいるわけで、もし切…

2000だうんろー

全部あわせてダウンロード数が2000になった! http://sourceforge.jp/projects/dxruby/devel/ ダウンロードは全バージョン・サンプルの合計だから、当たり前だがユーザーが2000人いるというわけではない。 ASRに入ってることを考えると、とりあえずインスト…

「もうロリコンでいいや」タグと思ったこと

なんとも自然なモーション。 ソフトの進化もすごいがそれを操る職人の技術もすごい。 人間の体はたくさんの関節があるが、それぞれ機械的に向きを変えたり回転したりしているわけではない。基本的には等速ではないし、直線でもない。加速・減速しながら複雑…

公開から1年とか

DXRuby0.0.2の公開が2009/04/06。 気が付いたら1年過ぎてた。 公開からどれだけと言っても、こんなもんはぼけーっとしてても過ぎていくものであるから、実際にはたいした意味は無い。 1年間毎日更新しました、とかならそりゃスゴイと思うが、間を置きながら…

DXRuby製のゲーム

DXRuby公式の掲示板にシューティングゲームを作ったという報告があったので紹介。 Scilixというタイトルの本格的な弾幕STGで、RubyとDXRubyで作られている。 作者のleto氏のサイトはこちら。 http://zsp.6.ql.bz/ ゲームのシステム自体はシンプルだから純粋…

モジュールについて2点

RubyにはMix-inという制限付き多重継承を行う機能がある。 モジュールがそれを担っているわけだが、Mix-inは他のメジャーな言語では採用されていないので、ライトなRubyユーザはこの考え方には馴染みが無いのではなかろうか。 とかいう俺も、どうにもモジュ…

四角形の自由変形を考える

前にやろうとして挫折したものだが。 http://d.hatena.ne.jp/mirichi/20090927/p1 まずはおさらいから。 なぜ三角形のポリゴンで四角形の自由変形ができないのかというと、自由変形された四角形の全てのピクセルが、4点の位置関係によって補正されるから、だ…

メモリプリフェッチ最適化

CPUの動作速度と比較して、メインメモリは遅い。 PCで使われているスカラ型CPUは内部にキャッシュを持ち、メインメモリとの動作速度の差を吸収しようとしている。 キャッシュにヒットすれば即座に読み出せるが、ヒットしなければメインメモリからの読み込み…

CommandとExecuter

DXRubyFramework0.0.2ではSpriteクラスはコマンド列を処理する機能を持っているが、コマンド列は配列であるので、それをもうちょっと簡単に簡易DSLで記述するためのCommandクラスを用意した。 用意したというほどのものでもない。 class Command attr_reader…

DXRubyFramework0.0.2と弾幕ゲー

高速コマンド処理機能を追加して、アニメーションを強化、メソッドを整理したバージョンとなっている。 性能は上々。 CPUを800MHzにクロックダウンして動かしている画像。 見にくいが35%、2640 Objectsだ。 一応、全ての弾に対して自機との矩形衝突判定をし…

RubyのModuleについて

Rubyを勉強し始めてマニュアルを眺めていたとき、どうしても理解できなかったことがある。 それはModuleで、クラスにincludeした場合にいったいどういう理屈で何が起こっているのかがわからなかった。別に内部的な話ではなく、たとえばincludeとextendの違い…