在IE中刷新时,不会在根对象上绘制矩形

时间:2009-02-13 19:48:41

标签: flash actionscript-3

我有一个swf文件,在IE上行为奇怪。事情是在第一次加载后查看页面时不会绘制某个矩形。它只出现在IE中,快速解决方法是在每个请求中使swf的路径唯一,这样它就不会被缓存。每次我的对象都会被绘制出来。

代码很简单

public function drawStage() 
{ 
    var bgRect:Shape = new Shape();

    bgRect.graphics.beginFill(0x5F5F5F);
    bgRect.graphics.drawRect(0,84, stage.stageWidth, 115);
    bgRect.graphics.endFill();
    bgRect.alpha = 0;

    addChild(bgRect);

    Tweener.addTween(bgRect, { alpha: 1, time: 1 }); 
}

在我的构造函数中调用。全班可以在这里看到:http://katuaq.wwwdev.punktum.gl/flash/bioteaser.txt,swf住在这里:http://katuaq.wwwdev.punktum.gl/

正如你现在可能已经想到的那样,这是图像背后的灰色背景,不会在IE中刷新。

4 个答案:

答案 0 :(得分:1)

不要从构造函数中调用drawStage。在构造函数中为ADDED_TO_STAGE事件设置侦听器,并从此事件的处理程序中调用drawStage。此外,当用户使用浏览器缩放功能时,您可能会发现舞台尺寸发生变化,因此请听取RESIZE事件并采取相应的行动。

答案 1 :(得分:0)

IE使用缓存的swf做了一些奇怪的事情,这使得前几帧的stageWidth错误。解决方案是要么在读取该值之前稍等一会儿,要么只使用一组数字。

答案 2 :(得分:0)

这绝对是一个众所周知的问题。在刷新时,阶段。{SIZES}在IE中设置为0。您可以添加一个监听器(输入框架或调整大小),检查大小是否为“非零”:

stage.addEventListener(Event.RESIZE, onResize);
stage.dispatchEvent(new Event(Event.RESIZE));

function onResize(event:Event):void 
{
    if (stage.stageHeight > 0 && stage.stageWidth > 0) 
    {
        stage.removeEventListener(Event.RESIZE, resizeHandler); 
    }
}

此外,您应该知道在某些浏览器中无法正确处理大量事件:

http://www.actionscript.org/forums/showthread.php3?t=136345&highlight=timeline+preloader

答案 3 :(得分:0)

这是缓存和Internet Explorer的一个已知问题。

最简单的解决方案是你现在拥有的解决方案。使swf路径独一无二。否则,您不必对动作脚本代码进行模糊处理。

请注意,将图像加载到闪存中时也会出现此问题。如果一旦加载,您可能会遇到IE问题。在那里你必须使图像的路径独一无二。