Форсирование размера сложного Flash-объекта - PullRequest
0 голосов
/ 11 января 2011

Как я недавно обнаружил, установка width / height свойств для Sprite только заставляет Sprite соответствовать указанным размерам путем масштабирования фактического размера , который вычисляетсяFlash на основе визуализированного контента.

Это оставляет меня в замешательстве.Если у меня есть пользовательский подкласс Sprite, который рисует с использованием Graphics, как я могу сделать макет перед начальным рендерингом - размер будет нулевым, пока он не будет отрисован впервые?

Для более сложной проблемы давайтескажем, у меня есть двумерный игровой мир с объектами, разбросанными по широкой области с мировыми координатами от (0,0) до (5000,5000), где каждый объект имеет размер, возможно, до 100x100.Я хочу иметь Flash-компонент, который является «окном игры» и имеет фиксированный размер, например 400x300, что делает рендеринг частью игрового мира.Так как же заставить размер игрового окна 400х300 пикселей?Я могу нарисовать прямоугольник 400x300, чтобы получить правильный размер, но затем, если я нарисую какие-либо объекты, которые частично видны, они могут испортить это.

Это правильный подход для предоставления пользовательского setSize(w,h) метода, которыйиспользуется вместо width & height сеттеров?Но, несмотря на это, нет ли способа сделать Sprite force того размера, который я хочу?Вы действительно должны ловить это каждый рендер и изменять его масштаб?

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Если я правильно понимаю, ваш игровой мир является дочерним объектом вашего окна, и его размер всегда 5000x5000, но вам нужно width и height окна, чтобы ссылаться только на само окно? Используйте маску, как предлагает другой комментарий, затем переопределите методы получения и установки width и height:

private var _width: Number = 400;
private var _height : Number = 300;
private var _mask : Sprite;

// some code in between

override public function get width () : Number {
    return _width;
}

override public function get height () : Number {
    return _height;
}

override public function set width ( wid:Number ) : void {
    _width = wid;
    if(_mask != null) _mask.width = wid;
}

override public function set height ( hei : Number ) : void {
    _height = hei;
    if (_mask != null) _mask.height = hei;
}
2 голосов
/ 11 января 2011

На мой взгляд, лучший способ сделать это - использовать маску.У вас есть один игровой контейнер, в который добавляются все игровые объекты DisplayObjects, а поверх этого контейнера у вас будет хороший пользовательский интерфейс вокруг игрового контейнера с маской в ​​центре.Таким образом, игровой контейнер будет нарисован только в пределах маски.

0 голосов
/ 12 января 2011

Другой вариант принудительного увеличения размера - создание новых спрайтов внутри объекта, ширина которого должна быть равна ширине / высоте, и размещать их по четырем углам.Это просто сделать с помощью кода или через среду разработки.

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