as3: создание анимации - PullRequest
2 голосов
/ 21 ноября 2011

Я играю с анимацией в AS3 и flex4, и у меня возникла проблема.Моим приложением является игровая доска (например, шахматная доска), где каждое поле представляет собой контейнер границы, добавляемый к некоторой позиции.

Также я добавляю дочерний элемент (фигуру) в этот контейнер по щелчку мыши.Чего я хочу добиться, так это уметь плавно перемещать фигуры с одного поля на другое.Но похоже, что форма идет за соседним полем таким образом http://screencast.com/t/iZ3DCdobs.

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

Я был бы рад, если кто-нибудь может предложить решение

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

У вас есть два варианта:

Первый - иметь разные слои для объектов DisplayObject: например, нижний слой будет содержать все доски, а верхний - все части.

Второй вариант - манипулировать индексом объектов с помощью swapChildren () , swapChildrenAt () и setChildIndex () . Таким образом, чтобы вывести MovieClip на самый верхний фронт, вы должны сделать MovieClip(parent).setChildIndex(this, 0);

1 голос
/ 21 ноября 2011

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

Если вы поместите оба спрайта в одно и то же положение, у вас останутся точные координаты x, y между подвижными объектами и полями.

0 голосов
/ 21 ноября 2011

Если ситуация такова, что объект формы всегда скрывается за следующим (правым) контейнером сетки, я предлагаю создать сетку в обратном порядке.

Предположим, вы создаете шахматную сетку. это сетка 8х8. Обычно вы создаете свою сетку, используя 2 для циклов, цикл от 0 до 8, скажем, точки x и y, начинающиеся с 0,0 для первой сетки и продолжающиеся до конца. То, что я предлагаю вам сделать, это создать от 8,8 до 0,0.

Отображаемые объекты во флэш-памяти накладываются друг на друга в соответствии с их дочерним индексом.

Например: если вы создаете два объекта. Прямоугольник и круг следующим образом

var rect:Rectangle = new Rectangle();
this.addChild(rect);
var circ:Circle = new Circle();
this.addChild(circ);

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

...