Sprite_Base に多重アニメーションを表示できるようにします。
基本情報
前提スクリプト
拡張タイプ
★ 既成 (導入するだけでゲームの挙動が変化する)
◆ 要注意 (内部の挙動を変えるため競合の可能性あり)
説明
概要
Sprite_Base にアニメーションを表示する際、細かい指定ができるようになります。
- Sprite_Base のアニメーションに関するメソッドを再定義しているため、他のスクリプト素材と競合する可能性があります。
- alias によって機能を拡張するスクリプトはこれより後ろに入れてください。
基本仕様
- アニメーションが表示中に次の再生が始まった場合も、再生中だったアニメーションはそのまま継続再生されるようになります。
- 従来の「新たにアニメーションを開始すると前のアニメーションは消える」という仕様を再現する場合は、アニメ開始前に一旦アニメーションの停止 (end_animation)を挟んでください。
- start_loop_animation を呼ぶとループアニメーションを開始します。
- 「既に再生中のアニメーションを再度指定するとそのアニメを停止する」というトグル仕様となっており、別IDであれば複数同時再生が可能です。
◆ 更新停止
- 画面の枠から Off_Distance 以上離れた位置にあるスプライトは「画面外」として扱われ、アニメーションのスプライト更新を行わずインデックスのみを進めます。
- Off_Distance を 0 にするとスプライトが画面から出た瞬間にアニメーションの更新が停止されます。
◆ アニメーション加速
- Accelerate_Key に取得可能なキーシンボルが定義されていた場合、そのキーを押している間はアニメーションの更新速度が Accelerate_Rate 倍速になります。
- ループアニメーションの速度は変わりません。
◆ アニメーションオプション
- アニメーションの名前に特定の文字列を入れておくことで特殊な処理を行います。
- 特殊命令は % に続けて最初の1文字でその種類を指定し、残りで詳細なパラメータを設定します。
- %cN (N: 1 から 16 までの整数)
- アニメーションに使うセルの数を制限します。
- 例えば "%c4" とした場合、セルのスプライトを 4 枚だけ作ります。
- アニメーションに 5 番以降のセルがあったとしても表示されません。
- 省略した場合は、そのアニメーションに含まれる最大のセル番号に応じて、生成されるスプライトの数が自動で決定されます。
- %zN (N: 符号なし / +付き / -付き の 任意の整数)
- 符号なしの場合、アニメーションセルの Z 座標が指定値になります。
- 符号付きの場合、アニメーションが表示されるスプライト(キャラクターなど)の Z 座標を基準とした相対位置になります。
- キャラクターの下に表示したい場合は例えば "%z-10" などと記述します。
- 実際に表示されるスプライトの Z 座標は、この設定値に更に「セル番号」を足した値になります。
- 例えば "%z-2" の場合、2 番までのセルはキャラより下に、4 番以降のセルはキャラより上に、3 番のセルは Y 座標に応じてキャラの上や下に表示されます。
- 省略時は %z+300 相当になります。
- (参考) タイルマップを構成するスプライトの Z 座標
- キャラクターの下に表示されるべきタイルは 0
- キャラクターの上に表示されるべきタイルは 200
- %rN (N: 任意の自然数)
- アニメーションの更新頻度を指定します。
- 数値が小さいほど高速に、大きいほど低速になります。
- 例えば "%r2" の場合、「Graphics.update 2 回につき一度更新」になります。
- 省略時は Default_Rate で定義された値になります。
- %lN (N: 1 から 最大フレーム数 までの整数)
- ループアニメーションに対して有効です。
- 最後のフレームまで再生し終わったあと、ここで指定されたフレームまで戻って続きが再生されます。
- 省略時は最初から再生されます。(%l1 相当)
- %xN (N: s, o, c, co, m, mo のいずれか)
- アニメーションの表示位置を指定します。
- s
- アニメーションが最初に表示された位置に完全に固定されます。(screen)
- 画面全体に表示するアニメーションに適しています。
- アニメーションの基準位置が「画面」の場合、省略時はこれになります。
- o
- スプライトの転送元の原点(ox, oy)が変化した場合、それに合わせてアニメーションの位置も変化します。
- c
- スプライトの移動に合わせてアニメーションの表示位置も追従します。(char)
- キャラクターに表示するアニメーションなどに適しています。
- アニメーションの基準位置が「画面」以外の場合、省略時はこれになります。
- co
- cに加えて、転送元の原点が変化した場合も位置が変化します。
- m
- Scene_Map でのみ有効です。
- アニメーションがマップの相対位置に固定されます。(map)
- 表示中にマップがスクロールした場合、アニメーションの表示位置はスクロールに合わせて移動します。
- 「マップに対するアニメーション」を表現するときに使います。
- mo
- m に加えて、キャラクターの転送元の原点が変化した場合も位置が変化します。
◆ 自動ズーム
- アニメーションを表示する対象(キャラクターやバトラーなど)のズーム(zoom)倍率が変化している場合、それに合わせて自動的にアニメーションも拡大縮小されます。
- アニメーションの表示位置が「画面」の場合、現在のスクリーンサイズ(Graphics.resize_screen で変更したもの)に応じて自動的に拡大縮小されます。
◆ 細かい仕様
- Sprite_Character などのスプライトにおいて update が呼ばれたとき、対応するオブジェクト(Game_Character など)の animation_id が 0 以外であれば、アニメーションを開始した上で animation_id を 0 にします。
- オブジェクト側の start_animation メソッドを使うことで、直接アニメーションを再生することができるようになります。
- 全てのアニメーションを停止する場合はオブジェクトに対して end_animation を呼びます。
(例)
$game_player.start_animation(1) #=> ID 1 番のアニメーションを表示
$game_player.end_animation #=> アニメーションを終了
- イベントコマンド「アニメーションの表示」の「表示終了までウェイト」オプションは、そのアニメーションだけでなく、表示中の全てのアニメーションが終了するまで待つオプションに変更されます。
- Game_Character クラスは loop_animation_id に値を代入することでループアニメーションも表示できます。
- 全てのループアニメーションを停止したい場合は -1 を代入してください。
- 実際に使うときは「移動ルートの指定」の中にスクリプトで「@loop_animation_id = (アニメーション ID)」と書くと楽です。
- 複数のループアニメーションを同時に表示させたい場合は、各行の間に 1 フレーム以上のウェイトを挟んでください。
◆ 特殊エフェクト
- Sprite_Battler に対して呼び出し可能な start_effect を、Sprite_Character にも移植します。
- イベントコマンドの [スクリプト] で、「$game_player.start_effect(:collapse)」などと書くことでエフェクトを実行できます。
- (参考) イベントを取得するには get_character(id) を使います。
備考
再定義されるメソッド
Sprite_Base#update
Sprite_Base#animation?
Sprite_Base#start_animation
Sprite_Base#dispose_animation
Sprite_Base#update_animation
Sprite_Character#end_animation
- アニメーション関連のメソッドは全て再定義されます。
Sprite_Character#setup_new_effect
Game_Interpreter#command_212 (アニメーションの表示)
- 「表示終了までウェイト」有効時の処理を変更します。
設定項目
- Off_Distance <既定値 160 >
- アニメーションの更新を停止する距離
- Accelerate_Key <既定値 :A >
- アニメーション表示を加速するボタン
- Accelerate_Rate <既定値 2 >
- アニメーション加速倍率
- Default_Rate <既定値 4 >
- デフォルトのアニメーション更新頻度
更新履歴
- こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
- 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
- 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
最終更新:2020年12月29日 02:49