流畅的闪光布局

时间:2009-11-23 17:31:16

标签: flash actionscript-3

我正在尝试让我的主类调整大小到浏览器窗口大小。我在舞台上听Event.RESIZE,更新我的宽度/高度以匹配stageWidth / stageHeight,并绘制一个矩形来显示它有多大。

当我调整大小时,每当事件发生时,它会在小尺寸和大尺寸之间闪烁。两种情况下的宽度和高度都是正确的,但在“小”的情况下,一切都在一个小盒子里。

Big Size http://files.seanhess.net/questions/browserresizebig.png

Small Size http://files.seanhess.net/questions/browserresizesmall.png

这是我的代码

package
{
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.text.TextField;

    public class main extends Sprite
    {
        public function main()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            stage.addEventListener(Event.RESIZE, onResize);

            var text:TextField = new TextField();
                text.text = "Some Text";

            addChild(text);
        }

        private function onResize(event:Event):void
        {
            this.width = stage.stageWidth;
            this.height = stage.stageHeight;

            trace("RESIZE " + width + " " + height);

            this.graphics.clear();
            this.graphics.beginFill(0x000000, 0.5);
            this.graphics.drawRect(0, 0, this.width, this.height);
        }
    }
}

这样做的正确方法是什么?我究竟做错了什么?谢谢!

2 个答案:

答案 0 :(得分:3)

问题是,宽度和高度的setter的默认实现只是scaleX和scaleY的别名...当你有一个宽度为100的Sprite,并且你将它的宽度设置为200,而不是它只是水平拉伸因子2 ...同时,默认的getters只返回屏幕上的有效宽度和高度,所以如果你绘制到精灵,它的宽度和高度会相应更新......

这应该是完美的工作:

            private function onResize(event:Event):void
            {
                    this.graphics.clear();
                    this.graphics.beginFill(0x000000, 0.5);
                    this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
            }

答案 1 :(得分:1)

看起来你的Sprite正在做正确的事情,但TextField是导致问题的因素。所以,如果你更新它的宽度和高度也可以:

package
{
 import flash.display.Sprite;
 import flash.display.StageAlign;
 import flash.display.StageScaleMode;
 import flash.events.Event;
 import flash.text.TextField;

 public class asProj extends Sprite
 {
  private var text:TextField;

  public function asProj()
  {
   stage.align  = StageAlign.TOP_LEFT;
   stage.scaleMode = StageScaleMode.NO_SCALE;

   stage.addEventListener(Event.RESIZE, onResize);
   text = new TextField();
   text.text = "Some Text";

   addChild(text);
  }

  private function onResize(event:Event):void
  {
   this.width = stage.stageWidth;
   this.height = stage.stageHeight;

   text.width = this.width;
   text.height = this.height;

   trace("RESIZE " + this.width + " " + this.width);

   this.graphics.clear();
   this.graphics.beginFill(0x000000, 0.5);
   this.graphics.drawRect(0, 0, this.width, this.height);
  }
 }
}