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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.04.2013, 17:29
ndiezel вне форума Посмотреть профиль Отправить личное сообщение для ndiezel Посетить домашнюю страницу ndiezel Найти все сообщения от ndiezel
  № 1  
Ответить с цитированием
ndiezel
 
Аватар для ndiezel

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
По умолчанию Как удалить мувик из массива?

Всем привет.

Есть функция:
Код AS3:
			var enArray:Array = new Array();
			enArray[en_num] = new Enemy_01("right-left",1);
			addEventListener(Event.ENTER_FRAME,enArray[en_num].EnterFrame);
			addChild(enArray[en_num]);
 
			if (en_num>30)
			{
				en_num = 0;
				removeEventListener(Event.ENTER_FRAME,enArray[en_num].EnterFrame);
				removeChild(enArray[en_num]);
			}
			en_num++;
Почему не работает удаление мувика при en_num>30?
Может кто подскажет какое друге решение для создания и удаления массива мувиков?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
var enArray:Array = [];
for (var i:int = 0; i < 30; i++) {
       enArray.push(new Enemy_01("right-left",1));
}
п.с. removeChild не удаляет элемент массива. Он удаляет дисплей объект из родительского контейнера

Чтобы удалить какой-то объект из массива, нужно сделать по-другому:
Код AS3:
var index:int = someArray.indexOf(someObject); // если объект в массиве, то его индекс будет больше -1, если его там нет, то -1
if (index > -1) {
       someArray.splice(index, 1); // вырезаем 
}

Старый 27.04.2013, 01:11
ndiezel вне форума Посмотреть профиль Отправить личное сообщение для ndiezel Посетить домашнюю страницу ndiezel Найти все сообщения от ndiezel
  № 3  
Ответить с цитированием
ndiezel
 
Аватар для ndiezel

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
caseyryan, честно говоря я не очень понял ваш пример.
Первый код ещё более-менее понятен. А вот второй, для меня по большей своей части - загадка.
Особенно не понятно что такое someObject?
Если я делаю вот так:
Код AS3:
var index:int = enArray.indexOf(Enemy_01);
То всюду -1
Если я этот шаг пропускаю и просто тупо удаляю в массиве объект - то на экране от этого ничего не меняется. Мувик всё так же находится на сцене.
В общем, не очень помогает.

А есть ещё варианты, кроме массива?

Вот у меня игрушка.
На экран - вылетают астероиды. Нужно чтоб при вылете ими за экран - они удалялись. Я пока что не очень понимаю как это сделать с помощью ассива, а других вариантов - я в сети не нашёл.

Кто как подобное вообще делал?

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Если у тебя астероиды хранятся в каком-то отдельном мувике то ты можешь просто перебирать всех детей этого мувика и удалять тех детей которые вышли за экран. Допустим все астероиды находятся в мувике или спрайте(что бы меньше памяти занимал) под названием asteroidContainer тогда код для удаления астероидов ушедших за экран следующий(размер игровой области 550x400):

Код AS3:
var i:int = asteroidContainer.numChildren;
while(i--)
{
   var j:Asteroid = asteroidContainer.getChildAt(i);
 
   if(j.x > 550 || j.x < 0 || j.y > 400 || j.y < 0) asteroidContainer.removeChild(j);
}

Старый 27.04.2013, 01:36
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
caseyryan пытался до вас донести, что удаление клипов из контейнера и удаление элемента из массива не одно и тоже. Удаление из массива не приводит к удалению клипа. Это надо делать в цикле.
Присвоение en_num = 0; у вас не удалит 30 клипов

Добавлено через 5 минут
И зачем их удалять, чтобы заново создать?)

Старый 27.04.2013, 01:52
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 6  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Судя по коду из первого поста, создается n мувиков и только последний записывается в только что созданный массив. Более того, каждые 31 помещаются в Display List, каждый 32-й сначала помещается в DL потом тут же удаляется...
С каждым циклом массив создается заново перезаписывая предыдущий.
Или я что-то не понимаю?

Старый 27.04.2013, 01:57
chamele0n вне форума Посмотреть профиль Отправить личное сообщение для chamele0n Посетить домашнюю страницу chamele0n Найти все сообщения от chamele0n
  № 7  
Ответить с цитированием
chamele0n
[+4 24.04.13]
[+4 20.04.13]

Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
если у тебя отдельный контейнер для астеройдов, то зачем вообще массив нужен ? (тотже Sprite\Movieclip служит массивом)
зачем удалять астеройд который вылетел за экран ? просто назначь ему стартовые значения и он заного полетит
__________________
Personal Page
$demo = $away3d + $bullet + $pathfinding;

Старый 27.04.2013, 04:46
ndiezel вне форума Посмотреть профиль Отправить личное сообщение для ndiezel Посетить домашнюю страницу ndiezel Найти все сообщения от ndiezel
  № 8  
Ответить с цитированием
ndiezel
 
Аватар для ndiezel

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
Bletraut, попробовал ваш код - что-то не заработало.
Да и я уже решил другим способом. Пусть и с удалением ребёнка самим собой, но всё же.

Цитата:
И зачем их удалять, чтобы заново создать?)
Цитата:
если у тебя отдельный контейнер для астеройдов, то зачем вообще массив нужен ? (тотже Sprite\Movieclip служит массивом)
зачем удалять астеройд который вылетел за экран ? просто назначь ему стартовые значения и он заного полетит
Нужен новый.
Такая задача.


Сделал так:
Код AS3:
			var en01_Mov:MovieClip;
			en01_Mov = new Enemy_01("right-left",enemy_speed);
			war_zone.addChildAt(en01_Mov,2);
А в самом Enemy_01:
Код AS3:
			if (x<-50)
				{
					fly_timer.removeEventListener(TimerEvent.TIMER,fly);
					fly_timer.stop();
					parent.removeChild(this);
				}

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

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

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


 


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


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