#actionscript-3 #actionscript #scale
#actionscript-3 #actionscript #масштаб
Вопрос:
У меня есть функция управления объектом, которая (прямо сейчас) управляет масштабом объектов внутри массива, чтобы изменять размер в реальном времени по отношению друг к другу.
Что я хотел бы знать, так это то, есть ли способ изменить ширину / высоту объекта (чтобы соответствовать размеру экрана, поскольку это мобильное приложение), а затем сбросить масштаб, чтобы новая ширина / высота имела значение scaleX / scaleY равное 1.
Комментарии:
1. Одна из возможных идей состоит в том, чтобы поместить объекты в некоторый объект контейнера и масштабировать контейнер. Тогда объекты сохранят значение scaleX / Y равным 1.
2. Я бы предпочел избежать создания ненужных объектов контейнера, но если нет способа сбросить масштаб объекта до новой ширины / высоты, это лучшее решение. Спасибо.
3. Перерисуйте объект, особенно если это просто примитив (прямоугольник и т.д.).
Ответ №1:
Ширина / высота — это свойства, которые напрямую влияют на масштаб DisplayObject. Вы не можете изменить его размер, не влияя на масштаб.
Однако вы можете:
- Нарисуйте изображение в виде растрового изображения
- Перерисуйте его, если это примитив
- Поместите его в держатель
Немного о каждом решении:
Рисование DisplayObject (или любого IBitmapDrawable) выполняется путем создания BitmapData и с помощью вызова draw(). Преимущество заключается в том, что это будет растровое изображение и, таким образом, сэкономит некоторое время рендеринга. Недостатком является то, что если это большое изображение, оно займет память (может быть критичным для мобильных устройств), и у него не будет интерактивности / анимации, если вы не создадите скрипт, который будет считывать анимацию.
Если вы рисуете элемент через API графического класса, вы можете просто создать что-то вроде метода resize(), который вы бы вызывали при изменении размера окна / перевернутой ориентации. Просто используйте метод clear() графического объекта и перерисуйте все это.
Наконец, вероятно, ваш лучший выбор. Измените размер вашего объекта. Создайте новый спрайт (я выбираю спрайт, потому что он интерактивный, и вы, вероятно, этого хотите) и добавьте объект с измененным размером к этому недавно созданному спрайту, в то время как спрайт просто добавляется в список отображения, как вы добавили объект с измененным размером ранее. Если это трудно понять, вот некоторый код:
myResizeableObject.width = newWidth;
myResizeableObject.scaleY = newScaleY;
var holderSprite:Sprite = new Sprite();
myResizeableObject.parent.addChild(holderSprite); // if you don't have a specific place to add the myResizeableObject, don't use myResizeableObject.parent - it's ugly
holderSprite.addChild(myResizeableObject);
Надеюсь, это поможет вам!