我是菜鸟并尝试了一些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();
}
}
}
答案 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.stageWidth
和stage.StageHeight
P.S。这一切都进入主应用程序,当你完成所有设置后,你初始化Starling