Flash по-прежнему масштабирует элементы, даже если установлено NO_SCALE - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь создать простую форму, в которой вы можете ввести пин-код и отправить его для переключения на другой мувиклип. Я использую Flash CS5 и ActionScript 3. У меня есть некоторые мувиклипы, размер которых изменяется при изменении размера события. Размеры видеоклипов идеально подгоняются к размеру сцены, поэтому они заполняют ее.

У меня проблема с масштабированием.

Чтобы избежать масштабирования всего, я использовал следующие две строки.

stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

Вижу, сцена выровнена по левому верхнему углу. Но все же, если я изменю размер своего браузера или даже предпросмотра флэш-памяти (CTRL + Enter в Adobe Flash), все элементы, такие как текстовое поле, метка и кнопка, изменяются пропорционально.

Я просто хочу сохранить ширину / высоту этих элементов, независимо от размера сцены. Так что, если кто-то изменяет размер своего браузера, делая сцену более крупным игроком, это похоже на то, что элементы теперь имеют больше места для использования, но вместо этого пространство у них такое же, потому что все растянуто. Таким образом, даже если SWF-файл отображается в моем представлении Full-HD, все же элементы имеют всего около 550x400 пикселей, поскольку это размер по умолчанию для моего флэш-документа, основанный на настройках свойств.

Кто-нибудь может помочь решить это? Потому что я хочу загрузить изображения на следующем экране. Так что, если ширина браузера составляет 1000 пикселей, я получу примерно 10 изображений подряд. Но если размер браузера изменяется до 2000 пикселей, потому что пользователь просто нажал кнопку «Развернуть» для окна браузера, то, очевидно, мой флэш-документ должен печатать 20 изображений подряд, поскольку теперь осталось еще 1000 пикселей. Вы знаете, что я имею в виду?

Заранее спасибо.

EDIT: Просто чтобы быть понятнее. Я запустил новый флеш-проект, пытаясь воспроизвести эту проблему, только чтобы быть уверенным, что это не из-за плохого кода.

Я создал новый проект FLA. Добавил простой прямоугольник, преобразовал его в MovieClip и назвал его экземпляр «mc». Затем я создал второй слой для ActionScript. Я добавил следующий код:

import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.text.*;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

stage.addEventListener(Event.RESIZE, resizeListener);

function resizeListener (e:Event):void {
  mc.width = stage.stageWidth;
  mc.height = stage.stageHeight;
  mc.x = 0;
  mc.y = 0;
}

var myText:TextField = new TextField();
myText.text = "This is my new text...";
mc.addChild( myText);

Вот и все. Изменение размера работает отлично, это то, что я хочу, так как мувиклип "mc" будет действовать как страница, поэтому у меня будет больше мувиклипов, измененных до размера сцены, чтобы переключаться между ними с помощью свойства visible. Но все же текст, появляющийся в самом верхнем левом углу в мувиклипе (то есть на сцене), масштабируется каждый раз, когда я изменяю размер окна. Почему?

1 Ответ

0 голосов
/ 27 марта 2012

Нашел одно решение.Но я НЕ доволен этим.

Мне нужно добавить прослушиватель событий в родительский мувиклип.Каждый раз, когда вызывается функция, мне нужно вызывать эти 2 строки ДЛЯ КАЖДОГО дочернего элемента в MovieClip.

myText.scaleX = 1 / mc.scaleX;
myText.scaleY = 1 / mc.scaleY;

Поскольку Flash всегда масштабирует ВСЕ (по любой причине), мне нужно соответствующим образом изменить масштаб дочерних элементов.Таким образом, если родительский MovieClip изменяет размер до двойного размера (масштабирование умножается на 2), тогда все дочерние элементы должны иметь свойство scale равным 0,5 (таким образом, половина размера).При этом размер дочерних элементов остается одинаковым.

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

Пожалуйста, не говорите мне, что это единственное решение ....: - (

...