Изменение размера и получение правильной переменной - PullRequest
3 голосов
/ 21 января 2011

В моем Flash-приложении (AS3) я хочу получить размер сцены и использовать его, чтобы мои объекты (которые контролирует пользователь) не могли выходить за пределы экрана. Тем не менее, когда я использую:

stage.stageWidth;
stage.stageHeight;

Значения, которые я получаю, на самом деле не то, что я хочу. Они дают мне размер сцены, но если я изменю размер окна, цифры тоже меняются. Теперь, на HTML-странице, я не думаю, что это будет иметь значение, потому что пользователь не может изменить его размер ... однако, я бы хотел, чтобы он был более надежным, чем полагаться на размер окна. Я также пытался использовать:

stage.width;
stage.height;

Тем не менее, те дали мне «801» и «601», один больше, чем мой фактический размер сцены. Эти значения не изменились, когда я изменил размер окна, но они были на одно большее.

Итак, мой вопрос: как я могу получить размер сцены, независимо от изменения размера окна, чтобы оно всегда было 800 на 600? (И, возможно, в этом вопросе скрыты «Почему я получаю 801 и 601?» И «Могу ли я помешать людям изменить размер окна?») Фу! Спасибо!

1 Ответ

9 голосов
/ 21 января 2011

Во-первых, важно знать разницу между stage.stageHeight - stage.stageWidth and stage.height - stage.width

stage.stageHeight // The real height of the stage
stage.height // The height of the content on the stage

Итак, причина, по которой вы получаете 801 и 601, в том, что высота и ширина всего содержимого на сцене - 801 x 601.

Теперь по вопросу изменения размера. Если вы отображаете это в веб-браузере, вы можете установить высоту и ширину фильма. Установите это на 800 и 600, а не на 100% и 100%. Теперь ваш фильм всегда будет иметь одинаковый размер, независимо от того, изменяет ли пользователь окно браузера.

Если вы хотите разрешить в разметке html высоту = "100%" и ширину = "100%", то у вас есть пара вариантов.

  1. Создайте мувиклип, который будет действовать как псевдо-сцена. Это будет 800 x 600. Вместо того, чтобы добавлять вещи на сцену, добавьте их в этот MovieClip (скажем, он называется myStage.) Теперь вся логика для хранения объектов внутри сцены вместо этого применяется к myStage MovieClip.

  2. Вы можете добавить константы в свой код AS3. Например:


 public const STAGE_WIDTH:int = 800;
 public const STAGE_HEIGHT:int = 600;

Теперь вы просто используете эти значения, а не значения stage.stageHeight и stage.stageWidth. Конечно, вы должны обязательно включить

stage.align = StageAlign.TOP_LEFT;  // or StageAlign.TOP
stage.scaleMode = StageScaleMode.NO_SCALE;
...