这是一个问题,我一直试图弄清楚,但仍然无法找到正确的解决方法。
我在MAC上使用Firefox 3.5时遇到显示问题,我可以看到我的菜单和显示是否正确。菜单位于它应该定位的位置之上。它适用于MACOSX上的Safari。 我的闪光灯尺寸是:1440x750
看起来Firefox无法识别stage.StageWidth和stage.StageHeight。它返回0。
有人建议实现是通过FlashVars传递电影的实际宽度和高度。电影使用这些而不是stage.stageWidth和stage.stageHeight
有没有人有如何修复该问题的代码示例? 赞赏地指出了正确的方法
我是否以正确的方式使用EnterFrame方法?
public function Main()
{
addEventListener(Event.ADDED_TO_STAGE, handleOnStage, false, 0, true);
}
private function handleOnStage(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, handleOnStage);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, handleResizeObjectsOnStage, false, 0, true);
addEventListener(Event.ENTER_FRAME, handleObjectsOnStage, false, 0, true);
bottomBarMC.x = 0;
bottomBarMC.y = 0;
}
private function handleObjectsOnStage(event:Event):void
{
if (stage.stageWidth != 0 && stage.stageHeight != 0) {
removeEventListener(Event.ENTER_FRAME, handleObjectsOnStage);
initIntro();
initObjectsOnStage();
}
}
private function handleResizeObjectsOnStage(event:Event=null):void
{
if (stage.stageWidth != 0 && stage.stageHeight != 0) {
initObjectsOnStage();
}
}
private function initObjectsOnStage():void
{
// Resize dynamically bottomBarMC
bottomBarMC.width = stage.stageWidth;
bottomBarMC.height = stage.stageHeight;
addChild(bottomBarMC);
// Resize dynamically logo
logoMC.x = 40;
logoMC.y = stage.stageHeight - 100;
addChild(logoMC);
var loadIntro:Sprite = getCurrentMC();
//loadIntro.x = stage.stageWidth;
//loadIntro.y = 0;
addChild(loadIntro);
}
答案 0 :(得分:1)
问题是,当SWF加载时,阶段大小变量通常需要几毫秒才能设置,因此如果定位菜单的代码在初始化之前运行,它将看到宽度和高度为0。
解决此问题的方法是设置一个EnterFrame侦听器,该侦听器将检查每个帧以查看是否已设置舞台尺寸,并且当它们具有时,它将调用您的定位代码。
以下是如何完成的:
public function MainDocumentClass()
{
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(e:Event):void
{
if (stage.stageWidth != 0 && stage.stageHeight != 0)
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
onStageInitialized();
}
}
public function onStageInitialized():void
{
//put your menu positioning here
}