As3 измените ширину / высоту объекта, затем установите новый масштаб размера как 1

#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);
  

Надеюсь, это поможет вам!