AboutFrameProcessing - cwtickle/danoniplus GitHub Wiki
English | Japanese
| < オブジェクト構成・ボタン | 疑似フレーム処理仕様 | カスタムjs(スキンjs)による処理割込み > |
擬似フレーム処理仕様
- Dancing☆Onigiri (CW Edition)では旧Flashでのフレーム処理を再現するため、
setTimeout を使って制御しています。そのイメージを下記に示します。
フレーム処理の考え方
- fps=60のとき、1秒間に60フレーム処理できるように1フレームに1/60秒が割り当てられ、その時間で描画や計算処理を行います。余った時間は待ち時間になります。
描画や計算処理が追い付かないときは、後続のフレームで遅れのリカバリーを試みます。
setTimeoutの仕様で、処理が遅れていても4msはウェイトが入ります。
- playbackRate=1以外(例えば低速)の場合、フレーム数を再計算した結果、情報誤差が発生しやすくなることがあります。これを防ぐため、playbackRate=1以外に限り、計算元のフレーム数の小数を許容することで、情報誤差を最小化します。(計算後のフレーム数は整数部に丸められます)
矢印の移動距離と処理フレーム数の関係
- ロード処理で、各矢印の移動距離を決定します。
表示位置と表示タイミングは、ステップゾーン上の位置から逆算してフレーム毎の移動量を加算して算出します。
移動量が描画エリアを超えるまで逆算され、その距離だけ戻った状態で矢印の描画が開始されます。
音楽再生位置の調整によるAdjustmentの(疑似)小数フレーム
- 音楽の再生位置を調整することで、Adjustmentの幅のみ擬似的に0.1フレーム単位で小数フレームを実現しています。音楽再生位置はフレーム数ではなく、ミリ秒で表現できるためです。
プレイ中のフレーム数の種類
- 上記の音楽再生位置、Adjustmentなどの値によって、現在処理しているフレーム位置は変化します。
実際の制作やプレイに支障が出ないように、複数のフレーム(位置)を保持しています。
変数名 | 概要 |
---|---|
g_scoreObj.frameNum | 譜面ヘッダー及び設定画面のAdjustment、補正フレームを反映した実際のフレーム数(位置) |
g_scoreObj.baseFrame | すべての補正フレームを除いた、譜面作成側から見たフレーム数(位置)演出等で利用することを考慮し、小数フレームは切り捨てる(譜面データで指定したフレーム数と一致) |
フレームの制約を受ける項目、受けない項目
フレームの制約を受ける項目
- 矢印・フリーズアロー生成/移動(再描画)、速度変化、色変化、背景・マスクモーション、矢印・フリーズアローモーション
- その他、mainEnterFrame上にある情報種
フレームの制約を受けない項目
- 音楽再生位置、キー操作イベント(判定位置からの誤差フレーム数はフレーム数に依存)
関連項目
- adjustment :pencil: 譜面位置の初期調整
- playbackRate :pencil: 楽曲再生速度(主にテストプレイ用)
更新履歴
Version | 変更内容 |
---|---|
v23.0.1 | ・譜面データが極端に小さいフレーム数のときにAdjustmentが一部利かない問題を修正(計算式を修正) |
v23.0.0 | ・音楽再生位置の調整により、疑似的に0.1フレーム単位のAdjustmentが使えるよう拡張 |
v1.0.0 | ・初期実装 |
| < オブジェクト構成・ボタン | 疑似フレーム処理仕様 | カスタムjs(スキンjs)による処理割込み > |