![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Сразу извинюсь за столь непонятное название темы.
Для того чтобы долго не описывать что мне надо просто приведу пример. Игра Zuma, надо сделать чтобы шарики откатывались назад, когда пользователь выпустил шар и цвета шаров совпали. Дело в том, что когда я выстреливаю шаром, я добавляю его в конец массива, а визуально он может стать на любое место в цепочке. Поэтому я не могу просто пробежаться по всему массиву и сказать той части шариков, которые до разрыва - стоять на месте, а той что после - двигаться назад! Как думаете, лучше всё таки менять индекс шара в массиве на тот который по счету визуально или что-то другое можно предпринять? |
|
|||||
|
strange mood
|
Можно хранить в каждом шарике указатели на его соседей. Это даст возможность перебирать шарики в том порядке, в котором они идут в цепочке.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
получается вы предлагаете в шарике создать
и при создании шара пушить в этот массив созданный шар? Но что делать потом, как разделить эти шары на те которые должны двигаться назад и те которые должны стоять на месте? |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
Я бы предложил сделать разные массивы для разных цветов пузырьков. И перебором проверять на hitTestObject() только внутри одного массива, не трогая другие цвета.
|
|
|||||
|
Цитата:
|
|
|||||
|
А если так:
- проверяете на столкновение с шарами, - анализируете положение в массиве шаров с которыми произошло столкновение, цвет там и т.д. - принимаете решение о том, что дальше происходит (убираются шарики, теснятся чтобы впустить этот...), - потом splice-ете новый шар в нужную позицию. Хотя порядок следования в массиве ведь не имеет значения, да? Имеют значение текущие координаты каждого из шаров? |
|
|||||
|
strange mood
|
Я предлагаю примерно следующее
//выпущенный шарик var newBall:Ball = getLaunchedBall(); //прилетел между двумя другими шариками var previousBall:Ball = getPreviousBall(); var nextBall:Ball = getNextBall(); //Привязываем наш шарик к новым соседям newBall.prev = previousBall; newBall.next = nextBall; //Привязываем соседей к нашему шарику (до этого они указывают друг на друга) previousBall.next = newBall; nextBall.prev = newBall; //Проходим по цепочке от нашего шарика до конца, по пути собирая шарики в массив var ballsToMove:Array = []; var currentBall:Ball = newBall; while(currentBall = currentBall.next)ballsToMove.push(currentBall); //Двигаем собранные шарики moveBalls(ballsToMove);
__________________
тонкий тролль, осеянный благодатью |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:48. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|