Jewel-mmo開発日記

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

[MyGame]MyGame で実装する「THE APPLE CATCHER」(3)

画像の説明

本家のサンプルでは横歩きのアニメパタンが使われていないようだったけど、画像の中には4方向のアニメパタンが描かれていたので使ってみた。

MyGame でのアニメーションの扱いについて解説。 次のサンプルは Player クラスを作成し、方向キーでキャラクターを歩かせるサンプル。キャラクターが移動するとともにアニメーションもその方向に変わる。

#!ruby -Ks
require 'mygame/boot'

# プレイヤークラス
class Player
  def initialize
    @image = TransparentImage.new("images/player.png", :x => 0, :y => 40)
    # 描画サイズを設定
    @image.w = 64
    @image.h = 64
    # アニメーションパタンをセット
    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]],  # ← 向き
    }
    @image.add_animation animations
    # アニメーション開始
    @image.start_animation :down
    # 画面中央に配置
    @image.x = (screen.w - @image.w) / 2
    @image.y = (screen.h - @image.h) / 2
  end

  def move
    if key_pressed?(Key::RIGHT)
      @image.x += 4
      @image.start_animation :right
    end
    if key_pressed?(Key::LEFT)
      @image.x -= 4
      @image.start_animation :left
    end
    if key_pressed?(Key::DOWN)
      @image.y += 4
      @image.start_animation :down
    end
    if key_pressed?(Key::UP)
      @image.y -= 4
      @image.start_animation :up
    end
  end

  def update
    move
    @image.update
  end

  def render
    @image.render
  end
end

player = Player.new
main_loop do
  player.update
  player.render
end

アニメーションパタンはあらかじめひとつの画像の中にならべて描いておく。 アニメーション名を示すシンボルとオフセット値を列挙してアニメーションを定義する。

animations = { # パターンを列挙した Hash オブジェクト
  :label  => [time, [*patten]] following,
  ・
  ・
  ・
}
image.add_animation animations

following には次のアニメーション名のシンボルを指定することができる。 デフォルトでは繰り返しループ。

追記(2007年3月31日):最新の MyGame に合わせてサンプルと解説を修正。