![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
|
Доброго времени суток! Решил сделать бонусы как в пакмане(в каждом тайле по одному бонусу). Когда герой заходит на бонус он(бонус) по идее должен удалятся со сцены. Функция создания бонуса выглядит таким образом(по совместительству он выполняет еще несколько вещей, на которые можно не обращать внимания)
public function makeDebugGrid():void { var posX:int = 12; var posY:int = 12; for (var a:int = 0; a < levelLength; a++) { Map[a] = []; Bonuse[a] = []; // добавляем новую строку в массив с бонусами for (var g:int = 0; g< levelVeigth; g++) { if (level1[a][g] == 1) { wall = new Wall_mc(); wall.x = posX; wall.y = posY; wall.gotoAndStop(1); Map[a][g] = 1; Bonuse[a][g] = 0 // если стена-в массив встовляум ноль } else if (level1[a][g] == 0) { Map[a][g] = 0; bonus = new Bonus_mc ; bonus.x = posX; bonus.y = posY; bonus.gotoAndStop(1); Bonuse[a][g] = 1 //если пусто-вставляем бонус и добавляем 1 в массив } grid.addChild(wall); bonuses.addChild(bonus); posX += MAP_CELL_SIZE; } posY += MAP_CELL_SIZE; posX = 12; } addChild(grid); addChild(bonuses); trace("Wall initialized"); } |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 48
|
Я обычно делаю так.
2 массива (если критична скорость <Vector>). Например: //Код приведен фрагментально private var bonuses:Array; private var bonusesToRemove:Array; //Если надо удалить бонус, то пушим его в bonusesToRemove private function removeBonus(bonus:Bonus):void { bonusesToRemove.push(bonus); } //А вот эту функцию, реально удаляющую бонусы вызываем в самом конце цикла обновления private function actualBonusRemoval():void { var n:int = bonusesToRemove.length; var bonusIndex:int; for (var i:int = 0; i < n; i++) { bonusIndex= bonuses.indexOf(bonusesToRemove[i]); if ( bonusIndex> -1) { removeChild(bonusesToRemove[i]); bonuses.splice(bonusIndex, 1); trace("removed" + bonusesToRemove[i]); } } bonusesToRemove= []; } Последний раз редактировалось nldr; 22.03.2011 в 21:11. |
|
|||||
|
Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
|
Извините а можно подробнее описать. Я не совсем понял как именно работает ваша система. Для чего нужна переменная "н"?
|
|
|||||
|
Регистрация: Jul 2009
Сообщений: 48
|
По поводу системы:
1. Все объекты, в вашем случае бонусы, я после их создания пихаю в массив. Например bonuses. У вас вроде так же. 2. Если объект надо удалить, то я не делаю это сразу же. С этим могут возникнуть проблемы, так как обычно объекты привязаны к разным массивам и прочим делам и если удалить сразу, то можно на всякие ошибки дурацкие нарваться. Поэтому, мы эти объекты "помечаем на удаление". Можно флаги вводить, можно как у меня в массив отдельный пихать. 3. Обычно есть основной цикл программы, который лопатит все наше хозяйство. Так вот в конце этого цикла вызываем actualBonusRemoval(), который безопасно удаляет все объекты. Внимание! Это все модель и может отличаться в конкретном случае. Плюс скорее всего работать через флаги и <Vector> будет быстрее. По поводу n: Это мое предпочтение для обхода массива писать вместо Где-то прочитал, что для операции "точка" тратится много времени и вводить временную переменную выгодно. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|