代码之家  ›  专栏  ›  技术社区  ›  Sean Clark Hess

流体闪光布局

  •  0
  • Sean Clark Hess  · 技术社区  · 15 年前

    当我调整大小时,每隔一次事件触发时,它就会在大小之间闪烁。宽度和高度在两种情况下都是正确的,但在“小”情况下,所有东西都在一个小盒子中。

    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 回复  |  直到 15 年前
        1
  •  3
  •   back2dos    15 年前

    问题是,宽度和高度设置器的默认实现只是scaleX和scaleY的别名。。。当您有一个宽度为100的精灵,并将其宽度设置为200时,它只是水平拉伸因子2。。。同时,默认的getter只返回屏幕上的有效宽度和高度,所以如果您绘制精灵,它的宽度和高度会相应地更新。。。

    这应该非常有效:

                private function onResize(event:Event):void
                {
                        this.graphics.clear();
                        this.graphics.beginFill(0x000000, 0.5);
                        this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                }
    
        2
  •  1
  •   99miles    15 年前

    看起来你的精灵做了正确的事情,但是文本字段是导致问题的原因。因此,如果同时更新其宽度和高度:

    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);
      }
     }
    }