#apache-flex #actionscript
#apache-flex #actionscript
Вопрос:
Я пытаюсь установить ширину / высоту объекта FlexSprite в ActionScript, но, похоже, это вообще не работает. Я все еще новичок, когда дело доходит до ActionScript, и я не понимаю, почему я не могу установить размеры этого объекта. Я знаю, что мог бы использовать UIComponent, но мне нужно что-то более легкое, поскольку я собираюсь добавить сотни из них.
public class MyComp extends UIComponent
{
public function MyComp()
{
super();
}
private var _sprite:FlexSprite;
private var _button:Button;
override protected function createChildren():void {
if (!_sprite) {
_sprite = new FlexSprite();
_sprite.width = 200;
_sprite.height = 200;
addChild(_sprite);
}
if (!_button) {
_button = new Button();
_button.label = "Click me";
_button.width = 150;
_button.height = 40;
addChild(_button);
}
super.createChildren();
}
override protected function measure():void {
measuredHeight = measuredMinHeight = 200;
measuredWidth = measuredMinWidth = 200;
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth,unscaledHeight);
trace('dimz of _sprite', _sprite.width, _sprite.height);
_sprite.width = 100; // doesn't work either
trace('dimz of _sprite again', _sprite.width, _sprite.height);
trace('dimz of _button', _button.width, _button.height);
}
}
Результат, который я получаю, это:
dimz of _sprite 0 0
dimz of _sprite again 0 0
dimz of _button 150 40
Я планирую добавить другие объекты внутри FlexSprite, и мне также нужно явно задать их размеры, поэтому мне действительно нужно выяснить, как это сделать.
Ответ №1:
Несколько вещей, которые могут вызвать проблемы:
- Насколько я понимаю, спрайт — это что-то вроде контейнера. Сам по себе он не имеет визуальных элементов; поэтому ничего не будет отображаться на экране просто при использовании экземпляра FlexSprite.
- Вы не размещаете свои элементы в компоненте; и UIComponent не имеет никакого кода для автоматического позиционирования своих дочерних элементов; поэтому кнопка в любом случае будет отображаться поверх спрайта. Вы можете изменить это, добавив некоторый код позиционирования в updateDisplayList(). Что-то вроде этого:
‘
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth,unscaledHeight);
_sprite.x = 10;
_sprite.y = 10;
_button.x = 400;
_button.y = 400;
}
Я предполагаю — но не знаю, что исходный код b / c недоступен — что спрайт (который расширяет FlexSprite) изменяет свои размеры для своих дочерних элементов; который в настоящее время не существует.
Комментарии:
1. Ваш первый пункт изменил ситуацию, я добавил UITextField внутри FlexSprite, и тогда это сработало, спасибо.