Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 为什么在闪存中刷新屏幕之前出现EnterFrame_Actionscript 3_Flash_Enterframeevent - Fatal编程技术网

Actionscript 3 为什么在闪存中刷新屏幕之前出现EnterFrame

Actionscript 3 为什么在闪存中刷新屏幕之前出现EnterFrame,actionscript-3,flash,enterframeevent,Actionscript 3,Flash,Enterframeevent,假设我们在Flash中有一个1fps的动画,其中每个帧都有一个运行100ms的脚本。据我所知,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

假设我们在Flash中有一个1fps的动画,其中每个帧都有一个运行100ms的脚本。据我所知,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
...
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
...
此工作流符合逻辑,因为在等待下一个屏幕更新时正在执行帧脚本。即使脚本的执行时间长达1000毫秒,渲染也不会延迟,并且仍然是1fps

然而!在AS3中编程动画时,人们通常使用ENTER_FRAME事件,它发生在下一次屏幕更新之前。然后,如果我们有需要1000毫秒才能执行的指令,则工作流如下所示:

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
...
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
...
因此,我们有0.5 fps而不是1 fps!延迟是因为“输入帧”恰好在渲染场景之前发生。对我来说,如果在渲染场景之后立即输入帧,为下一帧的渲染做准备,这将是非常合乎逻辑的

这是一个玩具示例,在现实世界中,渲染不会以完美的时间表进行,但逻辑是相同的。当有15毫秒的代码来执行每一帧(完全正常的情况下),60帧将变成30帧


。。。还是不?我说的话有缺陷吗

输入帧是生命周期的开始

:

  • 事件类型为
    Event的事件。输入\u FRAME
    dispatched
  • 执行子显示对象的构造函数代码
  • 事件类型为
    Event的事件。添加了从子显示对象调度的
  • 事件类型为
    Event的事件。已将\u添加到从子级显示对象调度的\u阶段
  • 事件类型的事件<代码>事件。帧\u已构建<代码>已调度
  • 执行MovieClip帧动作
  • 执行子MovieClips的帧动作
  • 事件类型为
    事件的事件。退出\u帧
    已调度
  • 事件类型为
    Event.RENDER的事件已调度
  • 事件类型为
    Event的事件。已从子显示对象中删除
    调度
  • 事件类型为
    Event的事件。已从子显示对象调度的\u阶段中删除\u
  • 您所描述的通常被称为弹性跑道,在这里,繁重的代码执行可能会延迟帧渲染


    输入帧是生命周期的开始

    :

  • 事件类型为
    Event的事件。输入\u FRAME
    dispatched
  • 执行子显示对象的构造函数代码
  • 事件类型为
    Event的事件。添加了从子显示对象调度的
  • 事件类型为
    Event的事件。已将\u添加到从子级显示对象调度的\u阶段
  • 事件类型的事件<代码>事件。帧\u已构建<代码>已调度
  • 执行MovieClip帧动作
  • 执行子MovieClips的帧动作
  • 事件类型为
    事件的事件。退出\u帧
    已调度
  • 事件类型为
    Event.RENDER的事件已调度
  • 事件类型为
    Event的事件。已从子显示对象中删除
    调度
  • 事件类型为
    Event的事件。已从子显示对象调度的\u阶段中删除\u
  • 您所描述的通常被称为弹性跑道,在这里,繁重的代码执行可能会延迟帧渲染


    我认为事件在每个帧周期的早期处理,而不是在接近结束时(即屏幕更新之前)。请看,我相信事件是在每个帧周期的早期处理的,而不是在接近结束时(即屏幕更新之前)。看见