2006-02-28
[Easy Rocket]子タスクの生成
require 'er' class SampleImage < ER::ImageTask end ER::init 640, 480, 30.0 image = SampleImage.new(:image => 'sample.bmp') image.create_sample_image(:image => 'sample.bmp', :pos => [100, 100, 0]) ER::loop do image.x += 1 image.sample_image.x += 1 image._draw end
SampleImage を image の子タスクとして生成する場合は、
image.create_sample_image
とします。これで SampleImage のインスタンスが image の子タスクとして作られます。 image に対して sample_image というアクセサも同時に定義されます。
ローカル座標とワールド座標
子タスクは親タスクのローカル座標に配置されます(上記サンプルでは (100, 100) )。つまり親タスクを移動させると子タスクも同じ量だけ同時に移動します。上のサンプルでは親タスク (image) と子タスク (image.sample_image) の両方の x を加算しているので子タスクは親タスクの2倍の速度で右へ移動することになります。
子タスクのワールド座標は wpos で取り出すことができます。
image.create_sample_image.wpos
draw と _draw
draw を毎回呼ぶことで画面への描画を行います。
またループ内で image.draw ではなく image._draw を呼び出しています。 _draw は内部で自分および子タスクの draw を実行します。
デフォルトオプション
ちなみに SampleImage のデフォルトの画像をこのように設定しておけば、
class SampleImage < ER::ImageTask image 'sample.bmp' end
次のように書くだけで同じ画像タスクを生成出来ます。
image = SampleImage.new image.create_sample_image :pos => [100, 100, 0]