Показать текстовый центр экрана - PullRequest
0 голосов
/ 13 мая 2011

Эй, ребята, мне нужно отобразить сообщение во флеш-проекте, над которым я работаю.Сообщение должно быть центрировано на экране и может быть создано только с использованием кода.

Обычно я могу просто поместить динамическое текстовое поле и скрыть его, но на этот раз я не могу.

Спасибо, Макс

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Я бы создал класс с текстовым полем по центру.Затем создайте новый экземпляр, когда вам нужно отобразить сообщение, и добавьте его на сцену.Вот очень упрощенный пример:

package
{
     import flash.display.Sprite;
     import flash.text.TextField;
     import flash.text.TextFieldAutoSize;

     public class Message extends Sprite {

          private var tf:TextField;
          private var s:Sprite;

          public function Message(msg:String) {
               s = new Sprite();
               s.graphics.beginFill(0,0);
               s.graphics.drawRect(0,0,800,600);
               s.graphics.endFill();
               addChild(s);

               tf = new TextField();
               tf.autoSize = TextFieldAutoSize.CENTER;
               tf.width = 400;
               tf.text = msg;
               tf.x = (s.width-tf.textWidth)*0.5;
               tf.y = (s.height-tf.textHeight)*0.5;
               addChild(tf);
          }
     }
}

Я бы добавил к этому другие функции и, возможно, даже добавил слушателя изменения размера, чтобы сохранить его в центре.Вы также можете добавить несколько кнопок, чтобы закрыть сообщение.Спрайт добавляется только для отключения любых щелчков мыши под сообщением.Это помогает?

1 голос
/ 13 мая 2011

Динамическое центрирование контента во Flash довольно просто;свойства stage.stageWidth и stage.stageHeight можно использовать для определения размера холста Flash Player.Все объекты DisplayObject, прикрепленные к displayList, имеют доступ к свойству stage;Единственное, что нужно, это то, что это свойство будет нулевым в функции конструктора, так как оно еще не было добавлено в displayList;однако, мы можем легко обойти это с помощью прослушивателя событий:

public class AutoStageCenterSprite extends Sprite
{
    public function AutoStageCenterSprite()
    {
        if (stage == null) {
            // Wait to be added to Stage before we activate the Resize Listener.
            addEventListener(Event.ADDED_TO_STAGE, onAddedToStageEvent);
        }
        else {
            centerOnStage();
        }
    }

    private function onAddedToStageEvent(event : Event) : void
    {
        // Now we've been added we can center ourselves...
        centerOnStage();

        // We will also register for Resize  Events so we can update our position
        // is the Stage dimensions change.
        stage.addEventListener(Event.RESIZE, onResizeEvent);
    }

    private function centerOnStage() : void
    {
        x = (stage.stageWidth / 2) - (width / 2);
        y = (stage.stageHeight / 2) - (height / 2);
    }

    private function onResizeEvent(event : Event) : void
    {
        // This event listener will be tripped each the Stage is resized.
        if (stage != null) {
            centerOnStage();
        }
    }
}

Следующая часть вашего вопроса посвящена тому, как добавить TextField в уравнение. Flash TextField API .Вы можете либо расширить класс TextField и добавить центрирующий код;или используйте вместо этого композицию и создайте новый экземпляр TextField внутри себя AutoStageCenterSprite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...