AS3 AIR:在stage.addEventListener之后(MouseEvent.CLICK,...舞台宽度和高度改变?

时间:2014-07-03 15:00:34

标签: actionscript-3 air

我是菜鸟并尝试了一些ActionScript3代码,现在我遇到了这个问题。

addEventListener 之后,我无法弄清楚为什么舞台高度会发生变化。

有人可以帮忙吗?

我不知道这段代码是否足以找到它的错误。但是这里的代码是:

...
[SWF(frameRate="60",width="768",height="1280",backgroundColor="#1c1c1c")]
...

    private function loop():void {
        trace("waiting for mouse");
        trace("stage height before mouse click: ",stage.stageHeight); 
        //here stage height is 1024

        stage.addEventListener(MouseEvent.CLICK, mouse);
    }

    private function mouse(event:MouseEvent):void {
        trace("stage height after mouse click: ",stage.stageHeight);
        //here, after addEventListener stage height is 800

        var mouseX:Number = event.stageX;
        var mouseY:Number = event.stageY;
        stage.removeEventListener(MouseEvent.CLICK, loop);

        trace("click: ", mouseX, ",", mouseY);
        draw(mouseX, mouseY);
    }

    private function draw(mouseX:int,mouseY:int):void {
    ...
    addChild(textField);
    loop();
    }
  }
}

1 个答案:

答案 0 :(得分:3)

这可能是air app的问题。如果你正在使用空气,那么在开始时有几个框架,空气可以设置正确的屏幕尺寸。

要处理第一次设置此事。

        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

一旦舞台高度发生变化,这将调度一个resize事件。

因此,在您在应用程序中执行任何操作之前,请按此顺序添加侦听器。

        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
    }

    private function onAddedToStage(event:Event):void {
        removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        stage.addEventListener(Event.Resize, onResize);
    }

    private function onResize(event:Event):void {
        _resizeCounter ++;
        trace("stage.stageWidth is "+ stage.stageWidth);
        trace("stage.stageHeight is "+ stage.stageHeight);

        if (resizeCounter == ${dependsOnThePlatform}) {
             initializeTheApp();
        }
    }

根据平台的不同,您可能需要监听一次或两次调整大小。在调整大小事件后尝试使用stage.stageWidthstage.StageHeight

P.S。这一切都进入主应用程序,当你完成所有设置后,你初始化Starling