1

Flash に 1 fps のアニメーションがあり、各フレームに 100 ミリ秒実行するスクリプトがあるとします。私の知る限り、Flash のアニメーションは次のように機能します。

0ms: Begin executing Frame 1's frame script
100ms: Finish executing Frame 1's frame script
1000ms: Begin rendering Frame 1's content and frame-script output
1050ms: Finish rendering Frame 1's content and frame-script output

1051ms: Begin executing Frame 2's frame script
1151ms: Finish executing Frame 2's frame script
2000ms: Begin rendering Frame 2's content and frame-script output
2050ms: Finish rendering Frame 2's content and frame-script output

2051ms: Begin executing Frame 3's frame script
2151ms: Finish executing Frame 3's frame script
3000ms: Begin rendering Frame 3's content and frame-script output
3050ms: Finish rendering Frame 3's content and frame-script output
...

次の画面更新を待っている間にフレーム スクリプトが実行されるため、このワークフローは論理的です。スクリプトの実行に 1000 ミリ秒かかる場合でも、レンダリングは遅延せず、1 fps のままです。

でも!AS3 内からアニメーションをプログラミングする場合、次の画面更新の直前に発生する ENTER_FRAME イベントをよく使用します。次に、実行に 1000 ミリ秒かかる命令がある場合、ワークフローは次のようになります。

0ms: do nothing (waste time!)
1000ms: begin executing instructions in ENTER_FRAME
2000ms: finish executing instructions in ENTER_FRAME
2001ms: Begin rendering Frame 1's content and ENTER_FRAME output
2051ms: Finish rendering Frame 1's content and ENTER_FRAME output

2051ms: do nothing (waste time!), as we have to wait 1000ms from last rendering to current
3000ms: begin executing instructions in ENTER_FRAME (1000ms after last rendering)
4000ms: finish executing instructions in ENTER_FRAME
4001ms: Begin rendering Frame 2's content and ENTER_FRAME output
4051ms: Finish rendering Frame 2's content and ENTER_FRAME output

4051ms: do nothing (waste time!), as we have to wait 1000ms from last rendering to current
5000ms: begin executing instructions in ENTER_FRAME (1000ms after last rendering)
6000ms: finish executing instructions in ENTER_FRAME
6001ms: Begin rendering Frame 2's content and ENTER_FRAME output
6051ms: Finish rendering Frame 2's content and ENTER_FRAME output
...

その結果、1 fps ではなく 0.5 fps になりました。シーンをレンダリングする直前にENTER_FRAME が発生するため、遅延が発生します。私にとっては、シーンをレンダリングした直後にENTER_FRAME が発生し、次のフレームでのレンダリングに備えることは非常に論理的です。

これはおもちゃの例であり、現実の世界ではレンダリングは完璧なスケジュールで行われることはありませんが、ロジックは同じです。各フレームの実行に 15 ミリ秒のコードがある場合 (完全に正常な状況)、60 fps は 30 fps に変わります...

... か否か?私の言っていることに間違いはありますか?

4

1 に答える 1