AS3 Apache Flex:随机点击不更新阶段,直到鼠标移动

时间:2016-02-23 20:33:30

标签: actionscript-3 flash flex

我有一个SWF,显示一个星形区域作为添加到舞台的单个BITMAP。图像是通过Bitmap的BitmapData动态生成的,以允许轨迹球与星场相互作用。行星和其他按钮也在舞台上,下面有提示标签。

一切按预期工作。但是,有时单击按钮会执行操作,直到鼠标移动才会显示。例如,单击按钮切换行星标签,将立即更新标签打开和关闭的阶段。但有时候,点击什么都不做,直到移动鼠标,或者进行另一次点击,然后两次点击都会串行激活。

同样适用于重置星形字段以显示太阳到地球或地球到太阳视图的按钮。单击图像(按钮),背景星形字段立即更新。但是,有时它会在鼠标移动之前无效。这似乎是我无法控制的界面计时问题。

有人遇到过这种情况吗?使用Firefox处理MAC,所有最新更新。

1 个答案:

答案 0 :(得分:0)

这是事件代码。

private function moveRespond(e:MouseEvent):void {
    var X:int=mouseX,Y:int=mouseY,R:int=Assets.Assets.radius/10; if(R<15){R=15}
    if( moveActive ) {
        Assets.Assets.STUFF.view.rotateMatrix(PT.x,PT.y,X,Y);
        FIELD.update(w,h);
        }
    else {
        Assets.Assets.STUFF.line.hover(X,Y,R);
        var btn:Vector.<Button>=Assets.Assets.BTN_list;
        var i:int,I:int=btn.length;
        for( i=0; i<I; i++ ) {
            btn[i].label.visible=btn[i].hover(X,Y);
        }   }
    DP.x=PT.x-X; PT.x=X;
    DP.y=PT.y-Y; PT.y=Y;
    }
private function upRespond(e:MouseEvent):void { moveActive=false }
private function downRespond(e:MouseEvent):void { moveActive=true;
    var X:int=mouseX,Y:int=mouseY;
    PT.x=X; PT.y=Y;
    }
private function clickRespond(e:MouseEvent):void {
...
//lots of button management, similar to above
//FIELD.update(w,h); and new zodiac sign fetch...
//but if there was a soft error in here,
//then the click at the end would get skipped,
//and it doesnt.
...
    if( click ) { Assets.Assets.soundClick(X); }
    }

由于错误的随机性,我假设我的代码中的某个内存正在中断下一个事件,但有点希望它是一个通信问题,因为错过的点击是事件排队。它只是不会被发送到我的应用程序,直到移动或另一次点击。 App.swf可以在没有包装器的情况下运行(基本上是预加载器),并且它具有相同的随机性。即使它非常罕见,但它仍然非常烦人。

还有一个ConstantUpdate计时器:

public function constantUpdate(evt:TimerEvent):void {
    Mouse.hide(); Mouse.show();
    dateMessage();
    if( !Assets.Assets.BTN_help.glowing && Math.random()<0.05 ) { Assets.Assets.BTN_help.glow(); }
    if( !Assets.Assets.BTN_logo.glowing && Math.random()<0.01 ) { Assets.Assets.BTN_logo.glow(); }
    if( !Assets.Assets.BTN_next.glowing && Math.random()<0.05 ) { Assets.Assets.BTN_next.glow(); }
    Assets.Assets.BTN_help.update();
    Assets.Assets.BTN_logo.update();
    Assets.Assets.BTN_next.update();
    Assets.Assets.BTN_star.update();
    Assets.Assets.BTN_note.update();
    Assets.Assets.BTN_moon.update();
    }

更多按钮管理。在contextMenu取消激活后鼠标隐藏/显示ping鼠标。否则,鼠标在contextMenu上变成一个箭头并保持这种状态,直到鼠标离开窗口并返回。虽然在启动时仍然有一些鼠标hick-up - 在App.swf加载后没有设置我的光标。不知道这是否与点击问题有关,但这是代码:

var cursor:MouseCursorData=new MouseCursorData();
    cursor.hotSpot=new Point(
        Assets.Assets.BTN_sun.icon.width/2,
        Assets.Assets.BTN_sun.icon.height/2);
    var pointer:Vector.<BitmapData>=new <BitmapData>[Assets.Assets.BTN_sun.icon.bitmapData];
    cursor.data=pointer;
    Mouse.registerCursor("myCursor",cursor);
    Mouse.cursor="myCursor";

我没有保留游标对象的本地句柄。