AnAL (日本語)

O.png AnAL は LOVE 0.5.0 のアニメーションを LOVE 0.6.0 にて再現するための互換ライブラリですが、積極的に開発されていないため、新規プロジェクトには別のライブラリを選択することが推奨されます。  


AnAL (ANimations And Love) ― アン・アルは Lover のための最小のコード変更にて LÖVE 0.5.0 のアニメーション (LÖVE 0.6.0 にて廃止) を置き換えるためのライブラリです。

コードの変更

  • love.graphics.newAnimation(...) は newAnimation(...) になります。
  • love.graphics.draw(anim, ...) は anim:draw(...) になります。
  • anim:setMode() は文字列定数を使用します。

互換方式

さらに同等の機能として互換方式があり、それは love.graphics.newAnimation を追加して love.graphics.draw を変更します。

Animations_legacy_support = true

欠点として love.graphics.draw の挙動が変更されてしまうため、渡された全てのテーブルにある特注の描画フィールドを呼び出してしまいます。

チュートリアル

お恥ずかしながら古い 0.5.0 チュートリアル (旧 Wiki にあったもの) から借用したものです。これを 0.6.x にてこれから動作させたいと思います。

単純な爆発。

この画像の情報は:

  • 寸法: 480 × 288 ピクセル
  • フレームの大きさ: 96 × 96 ピクセル
  • フレーム: 5x3 = 15

さて、このアニメーションを読み込む手順に目を通しましょう。まず始めに、こちらから AnAL.lua を必ずダウンロードしてください。このファイルを main.lua ファイルがある ZIP 書庫へ格納してください。そして、このコードを必ず全て記述してください:

require("AnAL")

その後にアニメーションの転送元から読み込んでアニメーションを作成する必要があります:

function love.load()

   -- アニメーションの転送元から読み込みます。
   local img  = love.graphics.newImage("explosion.png")
   
   -- アニメーションの作成。
   anim = newAnimation(img, 96, 96, 0.1, 0)
   
end


最初に、アニメーションで使用される転送元の画像を読み込む必要があります。そして、 newAnimation() によりアニメーションを作成します。第一引数は以前に読み込まれた転送元の画像です。第二引数はフレームの幅、第三引数はフレームの高さ、さらに第四引数は各フレーム後の遅延値(秒単位)です。画像の大きさ、またはフレーム数に関して配慮する必要はありません。フレーム数へ 0 が指定された場合でも、処理が行われます。

これで完了しましたが、あと二つ残りがあります: アニメーションの更新および表示です。アニメーションではフレームの変更を行うために経過時間の値を検出する必要があるため、更新は必要です。下記のリストはアニメーションを動作させるための完全なコードです。

function love.load()
   local img  = love.graphics.newImage("explosion.png")
   anim = newAnimation(img, 96, 96, 0.1, 0)
end

function love.update(dt)
   -- アニメーションの更新 (フレームの変更を有効化)。
   anim:update(dt)   
end

function love.draw()
   -- アニメーションを (100, 100) へ描画します。
   anim:draw(100, 100) 
end

これでアニメーションは (100,100) へ描画されます。


アニメーション方式の移動について。三種類の定義済みのアニメーション方式があります: loop, once および bounce です。標準の動作は loop です。この方式が有効化された場合は、最後のフレームへ到達したときに巻き戻されて最初のフレームからアニメーションを再生します。 once 方式が有効化された場合は、一度だけ再生され、その後は停止します。最後に、 bounce 方式が有効化された場合は、最初および最後のフレーム間で "ping-pong" (卓球)が発生するため、最後のフレームへ到達したとき最初のフレーム方向へ逆再生されます。下記のコード・ブロックのように方式の設定を指示することができます。

function love.load()
   local img  = love.graphics.newImage("explosion.png")
   anim = newAnimation(img, 96, 96, 0.1, 0)
   
   -- 方式定数:
   -- loop
   -- bounce
   -- once
   
   -- 方式を "bounce" に設定します。
   anim:setMode("bounce")
   
end

説明書

関数一覧

以下は関数の一覧です。

  • addFrame(x, y, w, h, delay)
  • setMode(mode)
  • play()
  • stop()
  • reset()
  • seek(frame)
  • getCurrentFrame()
  • getSize()
  • setDelay(frame, delay)
  • setSpeed(speed)
  • getSpeed()
  • getWidth()
  • getHeight()
  • update(dt)

説明

ここでは関数の引数に関する若干の説明をします (その他は説明不要です)。

addFrame

  • x: 画像にあるフレームの x 位置
  • y: 画像にあるフレームの y 位置。
  • w: フレームの幅
  • h: フレームの高さ
  • delay: 次のフレームへ移行する前の待ち時間の値

setMode

  • mode: 方式は "once", "loop" (標準) または "bounce" のいずれかであり、詳細情報はチュートリアルにあります。

seek

  • frame: アニメーションにおいてのフレームの移動先

setDelay

  • frame: フレームを変更するまでの遅延値
  • delay: 次のフレームへ移行する前の待ち時間の値

setSpeed

  • speed: アニメーションの再生速度であり、 1 は実時間、 2 は二倍速で高速再生します

update

  • dt: 次のフレームへ移行可能にするためにアニメーションの更新します

関連

Bartbes は AnAL, SECL, LUBE の制作者です。

ダウンロードのリンクおよび議論

フォーラムのスレッドにて



そのほかの言語