Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 30
1

Удаление объекта из массива при коллизии

26.11.2012, 11:41. Просмотров 1727. Ответов 6
Метки нет (Все метки)

Здравствуйте. Когда персонаж стреляет, каждая пуля (символ pistolBullet) добавляется в массив Bullets. Я хочу, чтобы при первом же соприкосновении какой-либо пули из массива с символом zombie1 что-то происходило, и при этом эта пуля удалялась, пропадала или ещё что, ли ж бы не проходила насквозь. Вот, что есть:

ActionScript 3
1
2
3
4
5
6
7
private function collisions():void {
for (var i = 0; i < Bullets.length; i++) {
 if (Zombie.hitTestObject(Bullets[i])) { //проверка столкновения пули и зомби
    trace("Попал");
    removeChild(Bullets[i]); // эта строчка выдает ошибку
 }
}
Вот та строчка которую я пометил, ошибка:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display:isplayObjectContainer/removeChild()
at main/::collisions()
at main/::ef()
removeChild никогда не пользовался, поэтому может тут что-то элементарное а я не понимаю).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2012, 11:41
Ответы с готовыми решениями:

Коллизии при использовании статического массива многими клиентами одновременно
Есть массив internal static int. К нему обращаются на чтение и запись клиенты. Какие могут...

Как обработать коллизии с объекта №1, если управляющий скрипт на объекте №2 ?
Всем привет! Подскажите как обработать коллизии (void OnCollisionEnter2D(Collision2D collision))...

Метод удаление объекта из массива
Описать класс «план на день» с полем - массив объектов класса «Событие». Предусмотреть возможность...

Удаление объекта из Массива объектов
Приветствую! Подскажите как удалить объект из массива Object mas = cls1.GetObjects(&quot;&quot;);...

6
Модератор
2851 / 1702 / 173
Регистрация: 19.02.2011
Сообщений: 6,296
26.11.2012, 12:30 2
Где располагается на сцене удаляемый объект и откуда вы его удаляете?

Цитата Сообщение от Turbo-Dizel Посмотреть сообщение
removeChild никогда не пользовался
Как же вы раньше флешом занимались?
0
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 30
26.11.2012, 17:17  [ТС] 3
Цитата Сообщение от TanaTiX Посмотреть сообщение
Где располагается на сцене удаляемый объект и откуда вы его удаляете?


Как же вы раньше флешом занимались?
Спасибо, что откликнулись, проблема решилась. Если кто поинтересуется:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
private function collisions():void {
    for (var i = 0; i < Bullets.length; i++) {
        var tdo:DisplayObject = Bullets[i];
        if (Zombie.hitTestObject(Bullets[i])) { //проверка столкновения пули и зомби
            trace("Попал");
            try{
                tdo.parent.removeChild(tdo);
            } catch( err:Error ){}
        }
    }
}
0
Модератор
2851 / 1702 / 173
Регистрация: 19.02.2011
Сообщений: 6,296
26.11.2012, 17:52 4
Цитата Сообщение от Turbo-Dizel Посмотреть сообщение
Если кто поинтересуется
Если кто поинтересуется, так делать не стоит. Дети родителя не должны заниматься суицидом. И try-catch в данной ситуации совершенно излишен. Если объекта в массиве нет, то соответствующее поле должно отсутствовать, а не занято null-ом или чем-то другим.
0
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 30
26.11.2012, 18:16  [ТС] 5
Цитата Сообщение от TanaTiX Посмотреть сообщение
Если кто поинтересуется, так делать не стоит. Дети родителя не должны заниматься суицидом. И try-catch в данной ситуации совершенно излишен. Если объекта в массиве нет, то в соответствующее поле должно отсутствовать, а не занято null-ом или чем-то другим.
Получается стрельбу через массив реализовывать не правильно? Так как если писать delete Bullets[i]; то ошибку выдает функция двигающая все пули (пробовал через slice удалять, вообще ничего не происходит). В любом случае если удалю она будет говорить, что не может найти то, что нужно двигать.
0
Модератор
2851 / 1702 / 173
Регистрация: 19.02.2011
Сообщений: 6,296
26.11.2012, 18:24 6
Цитата Сообщение от Turbo-Dizel Посмотреть сообщение
Получается стрельбу через массив реализовывать не правильно?
Правильно.

Цитата Сообщение от Turbo-Dizel Посмотреть сообщение
Так как если писать delete Bullets[i]
Вы же к массиву обращаетесь, а не к объекту, поэтому slice

Цитата Сообщение от Turbo-Dizel Посмотреть сообщение
пробовал через slice удалять, вообще ничего не происходит
Значит плохо пробовал.

Цитата Сообщение от Turbo-Dizel Посмотреть сообщение
В любом случае если удалю она будет говорить, что не может найти то, что нужно двигать.
Если правильно удалить - не будет. А правильно - это так, что в массиве нет не актуальных "ячеек". Кстати, лучше использовать типизированный массив (Vector)
1
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 30
26.11.2012, 19:11  [ТС] 7
Цитата Сообщение от TanaTiX Посмотреть сообщение
Правильно.


Вы же к массиву обращаетесь, а не к объекту, поэтому slice


Значит плохо пробовал.


Если правильно удалить - не будет. А правильно - это так, что в массиве нет не актуальных "ячеек". Кстати, лучше использовать типизированный массив (Vector)
Пытался только что сделать типизированный массив, но компилятору что-то не нравилось, хотя всё по примеру сделал. Возможно из-за того, что флеш CS3? Так как для Vector нужен флеш плеер не меньше 10 версии, возможно это как то связано).

По поводу удаления, удалил сначала объект со сцены, а потом и из массива.
ActionScript 3
1
2
removeChild(Bullets[i]);
Bullets.splice(i, 1);
Теперь кажется всё работает, и всё правильно).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2012, 19:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удаление объекта из массива объектов
Здравствуйте. Вопрос вот в чем: есть массив объектов некоторого класса в ArrayList. В определенный...

Некорректное удаление динамического массива внутри объекта
Здравствуйте, встретился вот такой проблемой: скрин Краткое введение в курс дела, захотел...

Удаление объекта при столкновении с с триггером
Есть много объектов и триггер, нужно сделать так, что бы объекты при прикосновении с триггером...

Удаление объекта при столкновении - ConcurrentModificationException
Выскакивает эта проклятая ошибка. Пытаюсь с помощью итератора пробежаться по коллекции и, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.