Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.03.2011, 20:42
reNiks вне форума Посмотреть профиль Отправить личное сообщение для reNiks Найти все сообщения от reNiks
  № 1  
Ответить с цитированием
reNiks

Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
Question бонусы, как в PacMan

Доброго времени суток! Решил сделать бонусы как в пакмане(в каждом тайле по одному бонусу). Когда герой заходит на бонус он(бонус) по идее должен удалятся со сцены. Функция создания бонуса выглядит таким образом(по совместительству он выполняет еще несколько вещей, на которые можно не обращать внимания)
Код AS3:
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");
 
        }
проблему вызывает именно удаление бонусов со сцены. была идея, когда герой заходит на бонус-менять значение в массиве на ноль и заново все перебирать(для этого была написана отдельная функция), но в таком случае игра безбожно тормозит. Как можно организовать удаление бонусов? Помогите пожалуйста

Старый 22.03.2011, 21:05
nldr вне форума Посмотреть профиль Отправить личное сообщение для nldr Найти все сообщения от nldr
  № 2  
Ответить с цитированием
nldr
 
Аватар для nldr

Регистрация: Jul 2009
Сообщений: 48
Я обычно делаю так.
2 массива (если критична скорость <Vector>). Например:

Код AS3:
//Код приведен фрагментально
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.
Старый 22.03.2011, 21:13
reNiks вне форума Посмотреть профиль Отправить личное сообщение для reNiks Найти все сообщения от reNiks
  № 3  
Ответить с цитированием
reNiks

Регистрация: Dec 2010
Адрес: арх. обл.
Сообщений: 38
Извините а можно подробнее описать. Я не совсем понял как именно работает ваша система. Для чего нужна переменная "н"?

Старый 22.03.2011, 21:50
nldr вне форума Посмотреть профиль Отправить личное сообщение для nldr Найти все сообщения от nldr
  № 4  
Ответить с цитированием
nldr
 
Аватар для nldr

Регистрация: Jul 2009
Сообщений: 48
По поводу системы:
1. Все объекты, в вашем случае бонусы, я после их создания пихаю в массив. Например bonuses. У вас вроде так же.
2. Если объект надо удалить, то я не делаю это сразу же. С этим могут возникнуть проблемы, так как обычно объекты привязаны к разным массивам и прочим делам и если удалить сразу, то можно на всякие ошибки дурацкие нарваться. Поэтому, мы эти объекты "помечаем на удаление". Можно флаги вводить, можно как у меня в массив отдельный пихать.
3. Обычно есть основной цикл программы, который лопатит все наше хозяйство. Так вот в конце этого цикла вызываем actualBonusRemoval(), который безопасно удаляет все объекты.

Внимание! Это все модель и может отличаться в конкретном случае. Плюс скорее всего работать через флаги и <Vector> будет быстрее.

По поводу n:
Это мое предпочтение для обхода массива писать
Код AS3:
var n:int = myArray.length;
for (var i:int = 0; i < n; i++)
вместо
Код AS3:
for (var i:int = 0; myArray.length; i++)
Где-то прочитал, что для операции "точка" тратится много времени и вводить временную переменную выгодно.

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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