![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+4 06.05.14]
|
Ситуация следующая. Есть скажем 20 спрайт контейнеров расположенных друг под другом ( как стандартный список ), очередность установки зависит от значения ( числа ) текстового поля. Каждый контейнер имеет сеттер и геттер этого числа, а так же определенный ID контейнера.
Список получается такой ( изначально ) : sprA | id = 333 | num = 1 sprB | id = 3343 | num = 2 sprC | id = 13333 | num = 3 sprD | id = 3 | num = 4 sprE | id = 367 | num = 5 sprF | id = 345 | num = 6 sprN | id = 332 | num = N И так задача такая : диспатчится событие об изменении num контейнера ( нужный ищем по ID ) Нужно через твинМакс в данный момент, поменять блоки местами ТАК, чтобы они встали в нужную последовательность в зависимости от возрастания num. Перед реорганизацией будет например sprA | id = 333 | num = 1 sprB | id = 3343 | num = 222 sprC | id = 13333 | num = 3 sprD | id = 3 | num = 4 sprE | id = 367 | num = 5 sprF | id = 345 | num = 6 sprG | id = 332 | num = 7 Подскажите , как это лучше сделать? Добавлено через 40 минут P.s. нахожусь в недосягаемости программы, на вскиду сделал так
__________________
Марк Tween |
|
|||||
|
Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
|
Предлагаю добавить их все в массив, и массив сортировать по нужному параметру.
package { import com.greensock.easing.Quad; import com.greensock.TweenMax; import flash.display.Sprite; import flash.events.MouseEvent; import flash.utils.Dictionary; /** * ... * @author cv */ public class Sprites extends Sprite { private var sprites:Array; private var dic:Dictionary; public function Sprites() { dic = new Dictionary(); sprites = []; var container:Sprite = new Sprite(); container.x = container.y = 50; addChild(container); for (var i:int = 0; i < 10; i++) { var sprite:Sprite = new Sprite(); sprite.graphics.beginFill(Math.random() * 0xFFFFFF); sprite.graphics.drawRect(0, 0, 50, 50); sprite.y = 60 * i; var info:Object = { }; info.sprite = sprite; info.id = i; info.num = i; sprite.addEventListener(MouseEvent.CLICK, clickHandler); dic[sprite] = info; sprites[i] = info; container.addChild(sprite); } } private function clickHandler(event:MouseEvent):void { var info:Object = dic[event.currentTarget]; info.num = Math.random() * 10; sprites.sortOn('num', Array.NUMERIC); for (var i:int = 0; i < sprites.length; i++) { info = sprites[i]; var sprite:Sprite = info.sprite; TweenMax.to(sprite, 0.5, { ease:Quad.easeOut, y:60 * i}); } } } } |
|
|||||
|
[+4 06.05.14]
|
cv' спасибо, в принципе по аналогии я и сделал. Отработало нормально.
Чтобы не открывать новую тему, задам еще вопросик по ТвинМаксу Ситуация следующая, контейнеры движутся справа-налево , их скажем 100 штук, показываются они в определенной области по 4 штуки ( в маске ). Изначальное движение понятно, движемся до момента пока Далее надо зациклить движение, как только контейнер блоков достигнет 0 отметки маски, пустить его справа-налево снова. Пока что мысли такие - ( наверняка ( не уверен ) у твинмакса можно продиспатчить событие обновления движения ) соотв, как только достигнет 0 : сдлать killTween , поставить на нужную коориднату и запустить заново с нее. Может есть более удобный способ?
__________________
Марк Tween |
|
|||||
|
Регистрация: Apr 2010
Адрес: Москва Кузминки
Сообщений: 109
|
Не совсем понятна задача... Если все координаты известны заранее, то можно просто сделать TimelineMax, или yoyo. Если координаты не известны, тогда нет смысла в твине, можно двигать по EnterFrame.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 14:24. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|