2009-11-23 2 views
0

Я пытаюсь изменить свой основной класс на размер окна браузера. Я слушаю сцену 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); 
     } 
    } 
} 

Что правильный способ сделать это? Что я делаю не так? Благодаря!

ответ

3

проблема в том, что реализация по умолчанию для наладчиков ширины и высоты всего лишь псевдоним Scalex и ScaleY ... когда ты иметь Sprite шириной 100, и вы установите его ширину на 200, а просто горизонтально растянуты на коэффициент 2 ... в то же время, по умолчанию получатели просто возвращают эффективную ширину и высоту на экране, поэтому, если вы рисуете на спрайт, это ширина и высота соответственно обновляется ...

это должно быть совершенно рабочий:

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

Это имеет смысл. Прошло много времени с тех пор, как я работал во flash (здесь гибкий парень). Ширина и высота действительно бесполезны без дополнительной помощи. Благодаря! –

+0

В итоге я добавил переменную для хранения explicitWidth и explicitHeight. Затем я обновляю эту переменную, когда изменяются ширина и высота, а графики рисуются на основе переменной, а не «фактической» ширины/высоты. –

1

Похоже, что ваш спрайт поступает правильно, но 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); 
    } 
} 
} 
+0

Awesome ... но это не имеет никакого смысла. Установка ширины и высоты текстового поля сохраняет его SMALL (чего я хотел, но почему он работает?). Кроме того, это явно делает что-то странное. Если я сделаю окно маленьким быстрее, текстовое поле, похоже, скроется на мгновение, а затем снова станет большим. –

+0

Ну, размер TextField и размер шрифта - две разные вещи. Используя мой код, TextField меняет размер, но размер шрифта остается неизменным. Вы можете видеть, что я имею в виду, если вы придаете TextField цвет фона: text.background = true; text.backgroundColor = 0xff6666; И я думаю, что вы видите, когда вы быстро изменяете размер окна, это просто задержка между изменением размера и обновлением текстового поля. Решение back2dos - лучшая идея. – 99miles

Смежные вопросы