Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2007-01-12

[MyGame]add_animation

アニメーションの設定は下記のようなインターフェースを考えていた。

@image.set_animation :down,  12, [ 0, 1, 2, 3]  # ↓ 向き
@image.set_animation :right, 12, [ 4, 5, 6, 7]  # → 向き
@image.set_animation :up,    12, [ 8, 9,10,11]  # ↑ 向き
@image.set_animation :left,  12, [12,13,14,15]  # ← 向き

しかし、実際のゲームではより多くのアニメパタンを定義するので、以下のように書きたくなった。

[
  [:down,  12, [ 0, 1, 2, 3]],  # ↓ 向き
  [:right, 12, [ 4, 5, 6, 7]],  # → 向き
  [:up,    12, [ 8, 9,10,11]],  # ↑ 向き
  [:left,  12, [12,13,14,15]],  # ← 向き
].each {|args| @image.set_animation *args }

でも、だったら最初から複数まとめて定義できるメソッドがあればいいような気がしてきた。

@image.set_animations = [
  [:down,  12, [ 0, 1, 2, 3]],  # ↓ 向き
  [:right, 12, [ 4, 5, 6, 7]],  # → 向き
  [:up,    12, [ 8, 9,10,11]],  # ↑ 向き
  [:left,  12, [12,13,14,15]],  # ← 向き
]

ふと、まとめて定義したり、ひとつだけ追加したりできるんだったら set じゃなくて add かなあと思った。

@image.add_animation :down,  12, [ 0, 1, 2, 3]  # ↓ 向き

それだったら、まとめて定義するのも add かな。

@image.add_animations = animations

--

<< もあり?。

@image.animations << [:down,  12, [ 0, 1, 2, 3]]  # ↓ 向き

いや、 Hash の方がいいか?

@image.add_animation :down => [12, [ 0, 1, 2, 3]]  # ↓ 向き

あれ、Hash の方がいい気がするぞ。

hash = {
  :down  => [12, [ 0, 1, 2, 3]],  # ↓ 向き
  :right => [12, [ 4, 5, 6, 7]],  # → 向き
  :up    => [12, [ 8, 9,10,11]],  # ↑ 向き
  :left  => [12, [12,13,14,15]],  # ← 向き
}
@image.add_animation hash

Hash にすると add_animations はいらないのか。