「フレーム処理」の編集履歴(バックアップ)一覧に戻る

フレーム処理 - (2015/06/02 (火) 19:53:54) のソース

----
*■フレーム処理
:フレーム(F)とは:60f/秒|
''処理の単位''であり全体の処理を''1周することが1フレーム''。
フレームが連なり処理表示を繰り返すことでコンピューターは「動いている・操作している」ように見える。
基本''1秒につき60フレーム(=処理60周分)''である。(設定で調整はできるが基本は60F/秒。)
-例えながら砕いて言うと
--映画フィルムの1コマ、あれが1フレームに相当します。
--表示を毎秒60コマ変えていくことで動かしているわけです。
---ちなみに映画フィルムは24コマ/秒が一般的な規格。
:ただし|
手間の関係上キャラの画像も1枚/F、60枚/秒というのは困難。
一応、表示の最小単位が1Fごとと覚えておけばいい。、
映画フィルムレベルでも2~3Fに1枚表示で同レベルになる。
(アニメに関して言えば、最低限あるなら枚数よりも全体の流れの方が重要。)

----
**■MUGENのフレーム処理
:|
MUGENでも決まった順番で処理をしていく。
作っていてあまり気にしない部分だが、細かい処理にはとても重要。

※かなり大雑把な表
※''内部を解析したわけではないため、一部順序は実際と異なる可能性あり''
※''検証の足りない部分は多いです''※
:基本|
-フレーム開始処理
--Ctrl=1系統の処理・ガードフラグ
-キャラ・ステート処理
--順番は[[スロットID]]参照
--中身は後述する表を参照
---''※Damage処理や生死判定自体はキャラ側で行われている''
-フレーム終了処理
--[[SC-/BindToTarget]]などのBind系の移動を行う?
--攻撃の命中処理を行う。
--[[SC-/Projectile]]の処理をする。※''キャラ側ではないので注意''
--[[SC-/Explod]]の処理をする。※''キャラ側ではないので注意''
--その後描画処理する
-フレーム終了
--フレームレートに合わせて待機するかすぐ次のフレームを処理する。

|~ 状態 |~ 内容 |~ 備考 |
|>|>|~↓&br()■フレーム開始時点■&br()↓|
|~フレーム開始処理|Ctrl=1による移動処理|ステート変更。[[Commonステート]]参照|
|~|↑自動振り向き処理|AutoTurnが可能である場合に、振り向く判定を行う。|
|~|手動ガード判定|ステート変更。[[ガード]]参照|
|~|自動起き上がり処理|ステート変更。[[Commonステート]]参照|
||||
|>|>|~↓&br()■キャラ処理■&br()キャラ同士の順番は[[スロットID]]参照&br()↓|
|~[[常時監視ステート]]|-3番(ステート処理補助)|※[[ステートを奪われている状態>ステート奪取]]では読み込まない|
|~|-2番(常駐処理)|ステートを奪われていても読み込む。&br()その関係上[[T-/StateNo]]条件などは基本使わないこと|
|~|-1番(基本コマンド認識)|※[[ステートを奪われている状態>ステート奪取]]では読み込まない。&br()-2ステートでSelfStateで戻した場合は読み込むとのこと|
|~番号ステート|現在のステート([[StateNo>T-/StateNo]])|番号ステート。細かくは[[File-/Stateファイル]]から参照|
|~|[[ステート移動>SC-/ChangeState]]実行後|実行したステートの読み込みを中断し次のステートを読み込む。|
||||
|~番号ステート後|ステ移動数リセット|2500Loopエラー用のカウントがリセット|
|~|ガード戻し処理|特定条件で140番からステート移動し''再度番号ステート処理''。&br()詳しくは[[Commonステート]]の該当項目参照|
|~|速度処理・Vel反映|[[Vel]]のページを参照|
|~|速度処理・Physics反映|~|
|~|速度処理・自動着地処理|一定条件で52番ステートへ移動。''再度番号ステート処理''。&br()詳しくは[[Vel]]参照。|
|~|[[ダメージ]]反映|[[T-/MoveType]]=HでGetHitVar(Damage)がある場合、&br()その数値分体力を減らす。|
|~|生死判定|[[T-/Life]]=0かつ[[SC-/AssertSpecial]]のNoKOなどが無ければ&br()死亡判定となり[[T-/Alive]]を0に、他試合終了判定を行う。|
|~|[[SC-/DestroySelf]]|Helperキャラの消去を行う(''少なくとも自動着地の後'')|
|>|>|~↓|
|~キャラ処理後|次ヘ|次のキャラの処理を行う。無ければステート終了処理へ|
|~キャラ処理|>|順番は基本[[スロットID]]に応じて決定される。[[T-/ID]]ではない。&br()詳しくは[[スロットID]]を参照。|
|~|>|1.既存キャラの内、Movetype=AでスロットIDが若い順|
|~|>|2.既存キャラの内、MoveType!=AでスロットIDが若い順|
|~|>|3.新規Helperの射出された順番|
|~|>|[[SC-/Pause]]などが実行されている間は該当MoveTimeが無ければ処理スキップ。&br()ただし新規Helperは例外的にPause中でもスキップされない。|
||||
|>|>|~↓&br()■ステート終了処理■&br()↓|
|~終了時点|>|※''キャラごとの順番処理など詳しくは不明''|
|~Bind系処理?|Bind判定|[[SC-/BindToTarget]]などのBind系の処理をする。&br()''※検証不足。押し出し判定よりも優先、のはず''|
|~[[押し出し>座標]]|衝突判定|重なっているキャラの押し出し判定を行う。&br()キャラごとの処理順については''※調査不足※''|
|>|>|~↓|
|~[[SC-/Projectile]]処理|MoveTime判定|[[SC-/Pause]]や[[SC-/SuperPause]]に対するMoveTimeの残量確認&br()残量無し・もしくは本体停止状態の場合は処理をスキップする&br()''※射出したフレームではスキップを行わない?''|
|~|Time消失判定|ProjRemoveTime - ''経過時間'' = 0がなら消失する。|
|~|速度処理|Velの分移動させる。|
|~|加速度処理|Accelの分Velに加算。※''射出時点では加算しない?''|
|~|画面外消失判定|消失する条件を満たしている場合消失する。&br()※画面外による消滅には移動が必要?|
|~|時間経過|Time系パラメータの残りを-1する?&br()RemoveTimeは不変。代わりに''経過時間''に1加算。&br()※''他は調査不足''|
|~|表示について|本体停止中に''ProjRemoveTime=1+MoveTime有り''で射出すると、&br()''停止中表示されず停止解除後に1F表示される''&bR()表示は無くても命中はする。&br()RemoveTimeが2以上やMoveTime無しなら射出時点から表示される。|
|>|>|~↓|
|~攻撃判定|>|&b(){攻撃の処理は[[T-/GameTime]]偶数,奇数で確認処理が逆順に}みたいな状態?&br()他、属性について細かくは[[攻撃属性]]なども参照|
|~|[[SC-/ReversalDef]]判定|''最も早い''。ヒットしたら相手の[[SC-/HitDef]]や&br()[[SC-/NotHitBy]][[SC-/HitBy]]の無敵などを無効化する。|
|~|||
|~|命中判定1&br()攻撃判定処理|[[SC-/HitDef]]、[[SC-/Projectile]]について&br()''相手くらい判定へ攻撃判定が重なり''&br()''HitFlagが適合しているか''。StateType属性が変化。|
|~|命中判定2&br()無敵|[[SC-/NotHitBy]]、[[SC-/HitBy]]の無敵に適合していないかどうか。|
|~|命中判定3&br()HitOverride無敵|攻撃のP1StateNo指定かP2StateNo指定の有無と&br()[[SC-/HitOverride]]を確認&。重なっている場合命中しない。|
|~|命中判定4&br()Target限度|既に[[Target]]が8体あり、かつそのTargetの相手かどうか。|
|~|命中判定5&br()Priority|全員の攻撃のPriorityを確認し優先ヒット・回避を判定|
|~攻撃処理|>|判定の結果、攻撃が命中していれば。&br()&b(){※細かい処理の順番は不明※}|
|~|命中処理1&br()基本|判定に従い攻撃を受けた側をMovetype=HのCtrl=0にして、&br()汎用のくらいステートへ飛ばす。詳しくは[[Commonステート]]を参照。&br()[[SC-/ReversalDef]]のヒットでは変更せず?Ctrlは不明|
|~|命中処理2&br()ガードフラグ|攻撃のGuardFlagに適合する[[ガード]]をしており、&br()[[SC-/HitOverRide]]が不適合なら、対応ガードくらいステートへ。|
|~|命中処理3&br()[[ステート奪取]]|攻撃のP2getP1Stateのフラグを確認しステートを奪う。&br()省略時、通常0、P2StateNo指定有り1。0指定でステートを奪わない。|
|~|命中処理4&br()相手ステート奪取|攻撃にP2StateNo指定がある場合&br()ヒットした相手をP2StateNoへステート変更。|
|~|命中処理5&br()相手ステート変更|攻撃にP2StateNo指定が無くガードでなければ&br()対応くらいステートへ飛ばす。[[Commonステート]]参照&br()[[SC-/ReversalDef]]のヒットでは行わない。|
|~|命中処理6&br()自分ステート変更|攻撃にP1StateNo指定がある場合&br()ヒットしたら自分のステート変更。|
|~|命中処理7&br()攻撃情報付与|攻撃の情報を相手に与える。|
|~|命中処理8&br()[[Damage>ダメージ]]加算|相手のDaamge量に攻撃のDamage数値を加算する。|
|~|[[SC-/HitOverride]]処理|属性が適合している場合発揮され、StateNoが変更される。&br()StateNo指定が-1の場合変更しない。&br()&b(){少なくとも通常対応くらいステート移行処理の後}|
|~|[[Target]]|[[SC-/HitOverride]]が発揮していないなら&br()対象の相手を[[Target]]として認識する。|
|~|命中フラグ|[[T-/MoveContact]]系のフラグを立てる。&br()[[T-/MoveHit]],[[T-/MoveGuarded]]はもちろん区別。|
|~|[[}Proj>SC-/Projectile]]時消滅処理|Projによる攻撃を消滅させる|
|~|>|恐らく攻撃キャラ(対象キャラ順番)→次の攻撃キャラの処理順?&br()[[SC-/HitDef]][[SC-/Projectile]]の順序・優先度は不明。|
|>|>|~↓|
|~[[SC-/Explod]]処理|MoveTime判定|[[SC-/Pause]]や[[SC-/SuperPause]]に対するMoveTimeの残量確認&br()残っていない場合は処理をスキップする&br()''※射出したフレームではスキップを行わない?''|
|~|Time消失判定|RemoveTime - ''経過時間'' = 0がなら消失する。|
|~|OnGetHit消失判定|RemoveOnGetHitが1で親キャラが攻撃を受けたなら消滅。|
|~|速度処理|Velの分移動させる。※Bindの影響をこの後に受ける|
|~|加速度処理|Accelの分Velに加算※''射出時点では加算しない?''|
|~|Bind判定|BindTime中、基準位置へ移動する|
|~|時間経過|BindTimeなどTime系パラメータの残りを-1する?&br()RemoveTimeは不変。代わりに''経過時間''に1加算。&br()※''他は調査不足''|
||||
|~その他|>|雑多な処理判定?|
|~表示処理|アニメ表示|命令に従ってキャラの描画をする|
|~|[[デバッグ]]表示|基本[[デバッグ]]表示を決定する。[[SC-/DisplayToClipboard]]系でない。&br()※デバッグPauseでのFRAMESは停止後+1増えて停止する模様|
|~処理完了|フレーム経過|フレームレートが合うよう待機時間を整える。&bR()※フレームレートが高い場合、その分待機せず次フレーム処理へ。|
||||
|>|>|~↓&br()フレーム処理完全終了後、次のフレームへ移る&br()↓|

※''あくまで大雑把な推測を含む表なので鵜呑みにしないこと''

----