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

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

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

Регистрация: Jul 2007
Сообщений: 102
По умолчанию Правильно удаление мувиков (в массивах)

Вобщем, есть функция проверки сталкивания объектов, вешается на update. (listvr, listvz - массивы)

Код AS3:
public function hitsp():void {
        for(var i:uint=0;i<listvr.length;i++) {
        for(var j:uint=0;j<listvz.length;j++) {
           if (listvr[i].hitTestObject(listvz[j])) {
	 removeChild(listvr[i]);
	 removeChild(listvz[j]);
           }
        }
        }
}
Вопросы вот какие: Почему даже когда один из мувиков удаляется (т.е. столкновения не должно быть) - то ничего не меняется и трейс показывает результат что мувики всё ещё сталкивается? А также в функции выше видимо неправильное удаление мувиков при столкновении, удаление происходит но сразу же вылазиет ошибка:

Код AS3:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
	at flash.display::DisplayObjectContainer/removeChild()
	at HelloWorld/hitsp()
	at HelloWorld/Update()
Прошу помощи, совсем тяжело мне переходить с кодинга АС2 в фреймах, на АС3 в классах
п.с. это я игру делаю, использую box2d, если кто может знает как ещё по спрайту тела удалять само тело (т.е. каким образом по спрайту обратиться непосредственно к телу, которому он принадлежит) в бокс2д - было бы очень здорово

Старый 22.10.2009, 00:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Кодинг в фреймах — это вообще AS1, а не AS2, не обольщайтесь.
Смотрите что именно у вас удаляется.

Старый 22.10.2009, 00:51
artemst вне форума Посмотреть профиль Отправить личное сообщение для artemst Найти все сообщения от artemst
  № 3  
Ответить с цитированием
artemst

Регистрация: Jul 2007
Сообщений: 102
ну, я в АС2 в фреймах писал ещё
Если вместо ремувЧил написать трейс, то выводит [object circ],[object vzriv]. вот они получается и удалются, наверное, неправильно.. вот и прошу совета как правильно сделать

Старый 22.10.2009, 00:58
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от artemst Посмотреть сообщение
ну, я в АС2 в фреймах писал ещё
Во фреймах не бывает AS2, вас обманули.

Цитата:
Сообщение от artemst Посмотреть сообщение
Если вместо ремувЧил написать трейс, то выводит [object circ],[object vzriv]. вот они получается и удалются, наверное, неправильно.. вот и прошу совета как правильно сделать
Значит удаляете не у того контейнера, к которому они принадлежат.

Старый 22.10.2009, 01:03
artemst вне форума Посмотреть профиль Отправить личное сообщение для artemst Найти все сообщения от artemst
  № 5  
Ответить с цитированием
artemst

Регистрация: Jul 2007
Сообщений: 102
Ну, я добавляю ведь не в контейнер вовсе (или это называется "главный контейнер"(?)), а просто addChild, значит и удалять надо просто removeChild, думается мне

Старый 22.10.2009, 01:04
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Только думается. addChild и removeChild у каждого DisplayObjectContainer свои.

Старый 22.10.2009, 01:14
artemst вне форума Посмотреть профиль Отправить личное сообщение для artemst Найти все сообщения от artemst
  № 7  
Ответить с цитированием
artemst

Регистрация: Jul 2007
Сообщений: 102
вот закручено то понаделали А как узнать к какому контейнеру принадлежит, функция есть какая-то спец. поди?

Старый 22.10.2009, 01:21
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 8  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
DisplayObjectContainer.contains() называется. А вообще в справке это всё очень подробно описано, не говоря уже о том, что по-русски.

Старый 22.10.2009, 02:02
artemst вне форума Посмотреть профиль Отправить личное сообщение для artemst Найти все сообщения от artemst
  № 9  
Ответить с цитированием
artemst

Регистрация: Jul 2007
Сообщений: 102
SamFR, у меня портативная версия флэша, поэтому справки нет там, буду признателен если дадите ссылку на справку в инете на русском.
А также как я понял, приведенная вами функция выше не указывает к какому контейнеру принадлежит объект, а лишь проверяет принадлежит ли объект к указываемому контейнеру.

Добавлено через 33 минуты
Цитата:
Сообщение от etc Посмотреть сообщение
Значит удаляете не у того контейнера, к которому они принадлежат.
Кстати, почему это? А что должен выводить трейс, по-моему как раз это и должен. К тому же мувики то нужные удаляются, но вылазиет ошибка, если бы не у того контейнера, просто ошибка бы вылезала, а мувики бы не удалялись, не так?

Старый 22.10.2009, 02:48
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от artemst Посмотреть сообщение
ничего не меняется и трейс показывает результат что мувики всё ещё сталкивается
Цитата:
Сообщение от artemst Посмотреть сообщение
удаление происходит но сразу же вылазиет ошибка
если мувик уже removeChild(), а потом вылазит такая ошибка, то понятно, почему у тебя при удалении одного мувика все еще трейсит "столкновение" — видимо твой мувик следом еще пересекается с кем-то. И если ты удаляешь один, но не его - он продолжает пересекаться дальше. А если удаляешь оба — то при повторном пересечении происходит попытка сделать removeChild() с уже удаленным из дисплейлиста мувиком.

P.S.
Вся эта теория верна, если hitTestObject работает даже с мувиком, который не в дисплейлисте ) а этого я не знаю
__________________
Поймай яблоко 2!

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

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

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


 


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


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