标签: enterframeevent

Flex分析 - [enterFrameEvent]在做什么?

我的任务是找到(并可能修复)一些传递给我们的Flex应用程序的严重性能问题.当应用程序处于空闲状态且不应执行任何操作时,应用程序将始终占用CPU的50%到100%.

我的第一步是运行FlexBuilder附带的分析器.我期望找到一些占用大部分时间的方法,向我展示瓶颈所在.但是,我有意外的事情.

前4种方法是:

  • [enterFrameEvent] - 84%累积,32%自我时间
  • [收获] - 20%累积和自我时间
  • [tincan] - 8%累积和自我时间
  • global.isNaN - 4%累积和自我时间

所有其他方法的累积和自身时间均小于1%.

根据我在网上找到的内容,[括号内的方法]是分析器在没有实际的Flex方法显示时列出的内容.我看到有人声称[tincan]是RTMP请求的处理,我认为[reap]是垃圾收集器.

有谁知道[enterFrameEvent]实际上在做什么?我认为它基本上是事件循环的"主要"功能,因此预计会有很高的累积时间.但为什么自我时间如此之高?究竟发生了什么?我没想到玩家内部会花费这么多时间,特别是因为应用程序中实际上没有发生任何事情(并且没有UI更新).

有没有什么好方法可以找到正在发生的事情?我知道不应该发生的事情(看起来必须有某种忙碌的等待或其他失控的循环),但是探查器并没有给我任何我期待的结果.我的下一步是开始在各个地方添加调试跟踪语句,以尝试跟踪实际发生的情况,但我觉得必须有更好的方法.

apache-flex profiling enterframeevent

14
推荐指数
2
解决办法
3537
查看次数

在 AS3 中,removeEventListener(Event.ENTER_FRAME) 不起作用

我已经处理这个问题好几天了。我没办法!我似乎无法在任何论坛、文档等的任何地方找到明确的答案。

第一次运行时,或者当我加载下一个级别供用户玩时,一切看起来都很好。但是,如果用户按下 ESC 键加载不同的关卡,则 ENTER FRAME 侦听器不会被删除,而是复制其中的所有触发器,显示玩家运行非常快,而且很时髦,因为它构建在先前的基础之上实例化 ENTER FRAME 侦听器。

我不知道我是否有匿名函数的问题,或者在我的 removeEvent... 命令中引用了一个未知实例...最重要的是,我放弃了,我需要这个有效的帮助!!!

这是代码:

function initPlay():void
{ 
    //code here determining what display object to add to the list and assign it to the currentLevel variable (a movieclip)

    if(userIsLoadingOtherLevel){
        removeEnterFrameListener();
        addChild(currentLevel);
        }
    if(userIsGointToNextLevel)
        addChild(currentLevel);

    currentLevel.addEventListener(Event.ENTER_FRAME, onEnterFrame);
    function onEnterFrame(event:Event):void
    {
        //collision detection, parallax scrolling, etc, etc is done here.
        if(allCoinsCollected)
            loadNextLevel();
        if(ESCKeyPressed)
            ESCKeyPressHandler();
    }
    function loadNextLevel():void
    {
        removeChild(currentLevel);
        newLevelToLoad++
        removeEnterFrameListener();
        initPlay();
    }

    function ESCKeyPressHandler():void
    {
        removeChild(currentLevel);
        initPlay();
    }
    function removeEnterFrameListener();
    {
        currentLevel.removeEventListener(Event.ENTER_FRAME,onEnterFrame) …
Run Code Online (Sandbox Code Playgroud)

event-listener event-handling actionscript-3 enterframeevent game-loop

5
推荐指数
1
解决办法
2万
查看次数

在AS3中不使用KeyboardEvent检查键盘状态

是否可以在不使用KeyboardEvent的情况下检查按下的键?

我有一个名为enterFrameHandler的ENTER_FRAME事件设置,如果按下任何键,我想在函数enterFrameHandler中检查.

使用的KeyboardEvent正常时,我可以检查很容易使用,检查事件的邀请码开关按键,但在一个ENTER_FRAME事件,这是不可能的我.

还有其他方法可以在ENTER_FRAME事件中检查键盘的状态吗?

更新:我发现了这个AS2脚本:

onClipEvent (enterFrame) {
    if (Key.isDown(Key.LEFT)) {
        _x -= power;
    }
    if (Key.isDown(Key.RIGHT)) {
        _x += power;
    }
    if (Key.isDown(Key.UP)) {
        _y -=power;
    }
    if (Key.isDown(Key.DOWN)) {
        _y +=power;
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎正在做我想要的,但它在AS2中,有没有人知道如何将其"翻译"为AS3?

flash actionscript-3 keyboard-events enterframeevent

3
推荐指数
1
解决办法
4906
查看次数

为什么在刷新Flash中的屏幕之前会出现EnterFrame

假设我们在Flash中有1 fps的动画,其中每个帧都有一个运行100 ms的脚本.据我所知,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 …
Run Code Online (Sandbox Code Playgroud)

flash actionscript-3 enterframeevent

1
推荐指数
1
解决办法
799
查看次数