Unityと吉里吉里でSLGとかRPGを作るブログ

KAGでアニメーションを行うにはセル方式とクリッピング方式がある。
これらの解説はこのサイトなどを見て理解して頂きたい。

問題はこれらをTJSで使用する場合である。
その為には、この2つの方式の本質を理解しないといけない。


///セル方式とクリッピング方式
■セル方式&クリッピング方式の概要
無題

上は同じ画像を使って、2種類のアニメ方式を再現した場合。
セル方式は、画像を切って貼り付ける様なイメージ。クリッピング方式は、ノートに穴を空け、下に連続した絵を入れて動かす事で、穴から覗く絵が動く方式になる。

2D画像を処理する場合、一般的にはセル方式で行う物と思われる。
現在、大抵のゲームではダイレクトXを使用しており、最近のPCの性能と合わせると2Dで速度を気にする必要は全くない。
しかし、吉里吉里ではダイレクトXは使用出来ない。恐らくその点を考慮して画像をコピーしない分軽いクリッピング方式を作成した物と思われる。
※現在では、公式はもとより、ダイレクトX用のプラグインも公開されていない様子。一部ゲーム会社では独自に作成したプラグインを使ったとの情報あり


///TJSでのアニメーション
KAGで2つのアニメ方式を解説している所では、セル方式が簡易でクリッピング方式がやや面倒だが動作が軽いとしている。
しかし、TJSで使用する場合、KAGスクリプトをTJSから呼ぶ出す様な使い方をしない限り、基本的には同じで、コンティニュアスハンドラで一定間隔で画像を変更する事になる。
※戦闘画面などの状況に応じてアニメーションを行う場合は、これ以外だと凄く大変

そうなると、基本的なアニメーションは全てクリッピング方式を採用し、セル方式はレイヤの移動や回転などの場合のみにすれば、一番軽くなるはず。

まず、コンティニュアスハンドラだけど、これは「TJSに挑戦!」のレイヤの自動移動に詳しく載っているのでそちらを参照して欲しい。
次にクリッピング方式だが、これはAnimationLayer.tjsを参考にsetImagePosメソッドで表示領域を変更すればOK。
※AnimationLayerをそのまま使うのはしんどそう


///アニメーションの速度
コンティニュアスハンドラの回数などは、上で紹介した「TJSに挑戦!」に詳しく載っている。
このサイトでは、毎秒2000回ほど呼び出されている事に驚いていたが、小さな画像を回転させるだけで、この程度の回数なのは非常に不安。
実際、テストしてみた所、一切の画像なしの場合、1万から1万5千程度呼び出しがあった。
実際、上のサイトでも2個で1000ちょっとまで落ちている。

そこで私は、秒間60回動く様に作成したコンティニアスハンドラで、クリッピング方式とセル方式でアニメーションさせて見た。

■PCの性能
CPU:Celeron(R) 3.20GHz
RAM 500
平均よりは2つほど堕ちるPCになると思うが、2Dでは特に問題はない性能。

■使用画像
アニメ画像

■テスト内容
秒間:60回で随時アニメーション
秒間:50回で随時アニメーション
その上で、最大どの位遅れたかでテストを実施。
例えば、秒間50回なら、前回稼動から20ミリ秒以上たったら稼動させる、これで1秒間(1000ミリ)でどの位遅れがでるかを調査する。
トライ回数は60回(1分)

■テスト結果
 ①セル方式
  毎秒50回:最大15ミリ秒
  毎秒60回:最大30ミリ秒

 ②クリッピング方式
  毎秒50回:最大13ミリ秒
  毎秒60回:最大18ミリ秒

あくまでも限定された調査だが、数回調査した段階でもはっきりとした差が出た。
1つはやはりクリッピング方式の方が軽い事。
もう1つはセル方式の場合、秒間の稼動数が増えると安定度が一気に下がる事。
また、平均的な安定度でもセル方式は不安定だった。クリッピング方式が平均では非常に安定しており、ズレ0ミリ秒が基本だったのに比べ。セル方式では常に何ミリかのズレが生じた(60回の場合)。



今回はここまで、実際どの程度のアニメーションが出来るかは作りながら調査する事にした。
そんな訳で、アニメーション用の機能を作成予定。



スポンサーサイト
2009.02.11 / Top↑
Secret

TrackBackURL
→http://nekodamasi.blog79.fc2.com/tb.php/25-e208c44c