|
|
|||||
Регистрация: Nov 2013
Сообщений: 11
|
удаление объекта со сцены
Ребят помогите пожалуйста. У меня ттакие вопросы.
1) Как организовать то чтоб ячейки с пулями(массив bullet) после вылета экзэмпляра со сцены очищали место новым экзэмплярам. тк в моей реалезации пули не уничтожаются, а так и продолжают существовать - а я думаю это не есть хорошо. 2) Как организовать уничтожение и пули(bullet) и астероида(bot) при столкновении друг с другом. Вот код: import flash.utils.Timer; import flash.events.TimerEvent; stop(); var bullet:Array= new Array(); var bulletSpeed:Number = 10; var i:Number = 0; var iMax:Number = 10; var num:Number =0; var numMax:Number = 5; var resetTime:Number =1000; var timer:Timer = new Timer(0); var reload:Boolean = false; var bot:MovieClip =new Asteroid(); var botSpeed:Number = 10; loading(); function loading():void{ num = numMax; timer.delay = resetTime; timer.repeatCount = 5; } timer.addEventListener(TimerEvent.TIMER, anim); function anim(event:TimerEvent):void{ num++; } timer.addEventListener(TimerEvent.TIMER_COMPLETE, resetTimer); function resetTimer(e:TimerEvent):void{ timer.reset(); timer.repeatCount = 5; reload = false; } stage.addEventListener(Event.ENTER_FRAME, reset); function reset(e:Event):void{ res.text = String(num); } stage.addEventListener(MouseEvent.MOUSE_MOVE, shipMove); function shipMove(e:MouseEvent):void{ ship.x = mouseX; ship.y = mouseY; e.updateAfterEvent(); } stage.addEventListener(MouseEvent.CLICK, addBullet); function addBullet(e:MouseEvent):void{ if(reload == false){ var bul = new Bullet_mc(); //bullet[i] = bul; bullet.push(bul); addChild(bullet[i]); bullet[i].x = ship.x; bullet[i].y = ship.y; i++; num--; stage.addEventListener(Event.ENTER_FRAME, bulletMove); if(num==0){timer.start(); reload = true;} } } function bulletMove(e:Event):void{ for(var k=0; k<i; k++){ if(bullet[k]){ bullet[k].y-=bulletSpeed; } if (bullet[k].y< 0){ } } } addAsteroid(); function addAsteroid():void{ addChild(bot); bot.x = Math.random()*700 + 50; bot.y = 0; bot.addEventListener(Event.ENTER_FRAME, botMove); } function botMove(e:Event):void{ bot.y+=botSpeed; if(bot.y>600){ removeChild(bot); addAsteroid(); } } |
|
|||||
Вот это попробуйте для удаления пули:
Добавлено через 3 минуты Столкновение обрабатывать можно с помощью этого метода http://help.adobe.com/ru_RU/FlashPla...#hitTestPoint() |
|
|||||
Регистрация: Aug 2010
Сообщений: 22
|
alexandrratush,
1. Зачем bullet[k]=null ? splice() удаляет элементы массива со сдвигом всех остальных, т.е. никаких пустых элементов оставаться не должно. 2. При удалении элемента из массива методом splice() в момент итерации по нему приведет к пропуску следующего элемента. Решение: либо делаем k-- после удаления элемента массива, либо цикл изначально пускаем в обратном направлении (что предпочтительнее, дабы не дергать счетчик). |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
я бы отказался от удаления пуль и использовал бы их повторно.
|
|
|||||
Регистрация: Nov 2013
Сообщений: 11
|
как бы ты это реализовал?
Добавлено через 8 минут Нет ребят, не получается(( я новичёк в as3 надеюсь на помощь)))) Добавлено через 23 часа 40 минут ХЭЛП!!! |
|
|||||
Что именно у вас не получается?
Вы пытались сделать то что написал я и shmaser? |
|
|||||
Регистрация: Nov 2013
Сообщений: 11
|
Да пытался. Код не работает ни при одном из алгоритмов
|
|
|||||
Скиньте архив с проектом сюда, попробую вам помочь.
|
|
|||||
Регистрация: Nov 2013
Сообщений: 11
|
Архив
Вот архив
|
|
|||||
import flash.utils.Timer; import flash.events.TimerEvent; stop(); var bulletSpeed:Number = 10; var i:Number = 0; var iMax:Number = 10; var num:Number = 0; var numMax:Number = 5; var resetTime:Number =1000; var timer:Timer = new Timer(0); var reload:Boolean = false; var bot:MovieClip =new Asteroid(); var botSpeed:Number = 10; loading(); function loading():void{ num = numMax; timer.delay = resetTime; timer.repeatCount = 5; } timer.addEventListener(TimerEvent.TIMER, anim); function anim(event:TimerEvent):void{ num++; } timer.addEventListener(TimerEvent.TIMER_COMPLETE, resetTimer); function resetTimer(e:TimerEvent):void{ timer.reset(); timer.repeatCount = 5; reload = false; } stage.addEventListener(Event.ENTER_FRAME, reset); function reset(e:Event):void{ res.text = String(num); } stage.addEventListener(MouseEvent.MOUSE_MOVE, shipMove); function shipMove(e:MouseEvent):void{ ship.x = mouseX; ship.y = mouseY; e.updateAfterEvent(); } stage.addEventListener(MouseEvent.CLICK, addBullet); function addBullet(e:MouseEvent):void{ if(reload == false){ // Создаем пулю var bul: Bullet_mc = new Bullet_mc(); bul.x = ship.x; bul.y = ship.y; // Добавляем на сцену addChild(bul); // Вешаем на пулю обработчик события bul.addEventListener(Event.ENTER_FRAME, bulletMove); num--; if(num==0){timer.start(); reload = true;} } } /** Событие */ function bulletMove(e:Event):void { // Наша пуля var bul: Bullet_mc = e.target as Bullet_mc; bul.y -= bulletSpeed; // Проверка улетания пули за пределы видимой части сцены if (bul.y < 0) { // удаляем пулю removeChild(bul); // удаляем обработчик bul.removeEventListener(Event.ENTER_FRAME, bulletMove); // помечаем для удаления bul = null; } // Здесь обрабатываем столкновение с астероидом } /*addAsteroid();*/ function addAsteroid():void{ addChild(bot); bot.x = Math.random()*700 + 50; bot.y = 0; bot.addEventListener(Event.ENTER_FRAME, botMove); } function botMove(e:Event):void{ bot.y+=botSpeed; if(bot.y>600){ removeChild(bot); addAsteroid(); } } |
Часовой пояс GMT +4, время: 11:15. |
|
« Предыдущая тема | Следующая тема » |
|
|