![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
Есть массив пулек, если пулька улетает за границу экрана или попадает в цель ,то я ее удаляю из массива так:
но он не всегда удаляет правильно, то есть, бывают случаи, когда перед удалением текущей пульки удаляется какая либо другая, массив смещается, и вот этот метод, который нашел индекс нашей пульки удаляет из массива,в котором вся индексация смещена, и получается ,что удаляется из массива не та пулька, как можно это обработать? |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Странно.. Как такое может быть? Вы передали пульку на удаление и только в методе определился индекс, ход выполнения прерывается и в этот метод попадает другая пулька. Индекс пересчитывается. но старый где-то сохраняется... Даже представить сложно, как такое возможно.
|
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
Ну я убедился в этом! я сам офигел! в итоге я переписал немного и все заработало, в условии , где у меня колизится пулька с врагами и проверяется вылет пульки за границы экрана я ставлю свойство isDead в true,
а потом в цикле апдейта я проверяю isDead и там же удаляю если в тру это значение |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Так получше будет.
private function updateBullets():void{ var i:int = bullets.length; var bullet:Bullet; while(i--) { bullet = bullets[i]; if(bullet.isDead == true){ bullets.splice(bullets.indexOf(bullet), 1); }else bullet.update(); } } ![]() |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
я на это даже внимания не обратил))) А лучше я употребил про присвоение элемента свойству.
|
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
я бы все таки делал это статичной функцией , аля InGame.removeBullet(this);
Последний раз редактировалось Isfet; 20.02.2014 в 10:28. |
|
|||||
|
Цитата:
Многие намеренно пишут явную проверку, чтобы проще было читать. Понятно, что в этом случае для программы разницы нет, но вот при чтении человеком, будет сразу понятно, что там булево значение, а не приведение к типу Boolean. Что бы ты подумал, если бы увидел вот такой кусок г-кода? (не обращая внимания на то, что тут названия не по конвенциям) Что hasOne это Boolean? Или может это проверка на null с неявным приведением к Boolean, например? Цитата:
|
|
|||||
|
indexOf возвращает -1, если объект не найден.
splice при удалении с -1 удаляет последний элемент. Без if'а не обойтись.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
![]() Добавлено через 3 часа 59 минут Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|