2013-03-01から1ヶ月間の記事一覧

擬似3D再び

手元のDXRuby1.5.0devにMatrix/VectorとSpriteの追加機能を実装してみたので、昔やってた擬似3Dの計算をするSpriteを作ってみた。 require 'dxruby' class Sprite3D < Sprite attr_accessor :v def self.set_transform(sw, sh, zn, zf) @@view = Matrix.new(…

ベクトルと行列の案

昔っから何度も出ては消えてを繰り返しているネタである。作ってみていまいちなので却下してという話で、動かすだけならすぐにでもできるが、それが扱いやすいかというと微妙になってしまう。 これがなぜ扱いにくいかというと、もともとが数学の道具であって…

画面外判定を作ってみた

こんな感じかなあ・・・。 class Sprite def on_screen?(range = nil) if range == nil if self.target == nil screen = [0, 0, Window.width, Window.height] else screen = [0, 0, self.target.width, self.target.height] end else screen = range end xa…

画面外判定を考える

キャラのオブジェクトを配列で管理しているとして、キャラが画面外に出たときに配列から削除したい場合、以下のようなコードをよく使う。 @objects = @@screen.check(@objects) ここでいう@objectsはオブジェクトの配列で、@@screenは衝突判定範囲を画面サイ…

エミッタ機能追加

なんもないエミッタではちょっと寂しいので、機能を追加してみた。追加してみた、というだけで、名前とか使い勝手とか実装とかはいい加減なのだが、こんなようなことができるといいのかなあ、という雰囲気の提示である。 以下に貼り付けてあるがちょっと長く…

テキトーなそれっぽい例

ものすごいテキトーだけどこんなことができるわけです。

エミッタを考える

パーティクルシステムにおいて、エミッタというのがパーティクルを生成するオブジェクトになるから、これがないと始まらない。が、Rubyで書く場合はユーザが作るクラスで適当にパーティクルを生成してもらえば済むわけで、わざわざエミッタというクラスを用…

Rubyの実行速度を考える

昔はよくこういうことをやっていた記憶がある。 ruby 1.9.3p125 (2012-02-16) [i386-mingw32]にて。そういえばしばらく更新してないから古いね。 require 'benchmark' Benchmark.bm {|x| x.report { 100000.times do Array.new(100) {1} end } x.report { 10…

パーティクルシステムその後

このあいだのコードでは新しい種類のParticleクラスを追加すると、それにあわせてParticleFactoryクラスも追加しなければいけなかったが、これが面倒なのでParticleFactoryは共通にしたくなった。拡張の容易さ重視である。しかしそのかわりにParticle側を作…

ソフトウェアデザインのトリレンマ

国際金融のトリレンマというものがある。 これは(1)為替レートの安定、(2)独立した金融政策、(3)自由な資本移動の3つのすべてを同時に達成することはできず、2つを達成した時点で残りの1つは捨てなければならない、という話だ。 金融政策を独立させて自由な…

パーティクルというもの

しばらくダラダラとツイッターに書いていたのでブログには初登場のパーティクルなのだが。DXRubyに組み込んで簡単に使えるといいなあ、と思っていたのだ。 どういうものかというと、動きのパラメータを定義して、その通りに勝手に動くオブジェクト、という感…

ドラクエ的メニュー

Window.loopとInput.updateをどのようにしようかと考えていたのだが、結局のところこれはこのままでいいのではないかという結論に達した。Window.loopを複数置けるようにするとウィンドウを閉じたときの動作で困ることになるし、1フレーム内にInput.updateを…