Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сортировка объектов со случайным индексом. (http://www.flasher.ru/forum/showthread.php?t=153235)

Universe 30.03.2011 18:32

Сортировка объектов со случайным индексом.
 
Сразу извинюсь за столь непонятное название темы.
Для того чтобы долго не описывать что мне надо просто приведу пример. Игра Zuma, надо сделать чтобы шарики откатывались назад, когда пользователь выпустил шар и цвета шаров совпали. Дело в том, что когда я выстреливаю шаром, я добавляю его в конец массива, а визуально он может стать на любое место в цепочке. Поэтому я не могу просто пробежаться по всему массиву и сказать той части шариков, которые до разрыва - стоять на месте, а той что после - двигаться назад! Как думаете, лучше всё таки менять индекс шара в массиве на тот который по счету визуально или что-то другое можно предпринять?

Gaen 30.03.2011 21:47

Можно хранить в каждом шарике указатели на его соседей. Это даст возможность перебирать шарики в том порядке, в котором они идут в цепочке.

Universe 30.03.2011 23:51

получается вы предлагаете в шарике создать
Код AS3:

public static var balls_arr:Array = []

и при создании шара пушить в этот массив созданный шар?
Но что делать потом, как разделить эти шары на те которые должны двигаться назад и те которые должны стоять на месте?

TanaTiX 31.03.2011 00:16

А я бы не добавлял в конец массива. Или, сортировал массив шариков по другому параметру (условным координатам к примеру)

MAPUTO 31.03.2011 00:52

Я бы предложил сделать разные массивы для разных цветов пузырьков. И перебором проверять на hitTestObject() только внутри одного массива, не трогая другие цвета.

Universe 31.03.2011 02:43

Цитата:

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

fish_r 31.03.2011 04:51

А если так:
- проверяете на столкновение с шарами,
- анализируете положение в массиве шаров с которыми произошло столкновение, цвет там и т.д.
- принимаете решение о том, что дальше происходит (убираются шарики, теснятся чтобы впустить этот...),
- потом splice-ете новый шар в нужную позицию.

Хотя порядок следования в массиве ведь не имеет значения, да? Имеют значение текущие координаты каждого из шаров?

Gaen 31.03.2011 05:38

Я предлагаю примерно следующее
Код AS3:

//выпущенный шарик
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);


GBee 31.03.2011 11:02

Цитата:

Я предлагаю примерно следующее
Это же двунаправленный список. Люблю я их :о))


Часовой пояс GMT +4, время: 20:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.