![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2012
Сообщений: 7
|
Помогите создать эффект выстрела. Суть такова есть враг (enemy), мувик состоит из двух кадров первый сам враг второй взрыв. Я пробовал соединить hitTestObject и gotoAndStop код выглядел так:
при этом выбивает такая ошибка 1120: Обращение несуществующого свойства pulaR если заменить pulaR на L5 то при столкновении с объектомвсе все работает. L5 это объект который и должен стрелять. Вот весь код: var up,down,left,right = 0; stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownF); stage.addEventListener(KeyboardEvent.KEY_UP,keyUpF); stage.addEventListener(Event.ENTER_FRAME,updatePosF); function keyDownF(e:KeyboardEvent):void { if (e.keyCode == Keyboard.UP) { up = 1; } if (e.keyCode == Keyboard.DOWN) { down = 1; } if (e.keyCode == Keyboard.RIGHT) { right = 1; } if (e.keyCode == Keyboard.LEFT) { left = 1; } } function keyUpF(e:KeyboardEvent):void { if (e.keyCode == Keyboard.UP) { up = 0; } if (e.keyCode == Keyboard.DOWN) { down = 0; } if (e.keyCode == Keyboard.RIGHT) { right = 0; } if (e.keyCode == Keyboard.LEFT) { left = 0; } } function updatePosF(e:Event):void { if (up == 1) { L5.y -= 10; } if (down == 1) { L5.y += 10; } if (left == 1) { L5.x -= 10; } if (right == 1) { L5.x += 10; } } //===========================================================>>>> var enemyArr:Array= new Array(); var enemySpeed:Number=5; const enemyNum:int = 40; for (var i=0; i<enemyNum; i++) { var enemy:MovieClip= new D2(); enemyArr.push(enemy); enemyArr[i].x = Math.random() * -400 +400; enemyArr[i].y = Math.random() * -7000; addChild(enemyArr[i]); addEventListener(Event.ENTER_FRAME,enemyMove); } function enemyMove(e:Event):void { for (var i=0; i<enemyNum; i++) { var enemy=enemyArr[i]; enemy.y+=enemySpeed; if(pulaR.hitTestObject(enemy)) { enemy.gotoAndStop (2); } } } //===========================================================>>>> stage.addEventListener(MouseEvent.CLICK,vustril); function vustril (e:MouseEvent):void{ var pulaRArr:Array= new Array(); var pulaRSpeed:Number=15; const pulaRNum:int = 1; for (var q=0; q<pulaRNum; q++) { var pulaR:MovieClip= new pula(); pulaRArr.push(pulaR); pulaRArr[q].x = L5.x; pulaRArr[q].y = L5.y; addChild(pulaRArr[q]); addEventListener(Event.ENTER_FRAME,pulaRMove); } function pulaRMove(e:Event):void { for (var q=0; q<pulaRNum; q++) { var pulaR=pulaRArr[q]; pulaR.y-=pulaRSpeed; } } } |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 125
|
У вас pulaR объявлена в функции vustril (причем дважды), а использовать вы её пытаетесь в функции enemyMove.
|
|
|||||
|
Регистрация: Nov 2012
Сообщений: 7
|
А как правильно надо записать?
|
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
вынести пулю за функции
var pulaR:MovieClip; function vustril (e:MouseEvent):void{ var pulaRArr:Array= new Array(); var pulaRSpeed:Number=15; const pulaRNum:int = 1; for (var q=0; q<pulaRNum; q++) { pulaR = new pula(); pulaRArr.push(pulaR); pulaRArr[q].x = L5.x; pulaRArr[q].y = L5.y; addChild(pulaRArr[q]); addEventListener(Event.ENTER_FRAME,pulaRMove); } function pulaRMove(e:Event):void { for (var q=0; q<pulaRNum; q++) { pulaR=pulaRArr[q]; pulaR.y-=pulaRSpeed; } } } |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 7
|
Спасибо уже работает,но появилась новая проблема функция enemyMove работает только после клика
к тому же появилась ошибка: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". at litak_fla::MainTimeline/enemyMove() |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
переменная pulaR у вас создается в функции
следовательно в другой функции ее не будет видно если вы исправили как я вам говорил в предыдущем посте, то выложите новый код, будем уже в нем смотреть. |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 7
|
вот новый код:
var enemy:MovieClip; var enemyArr:Array= new Array(); var enemySpeed:Number=10; const enemyNum:int = 40; for (var i=0; i<enemyNum; i++) { enemy = new D2(); enemyArr.push(enemy); enemyArr[i].x = Math.random() * -400 +400; enemyArr[i].y = Math.random() * -7000; addChild(enemyArr[i]); addEventListener(Event.ENTER_FRAME,enemyMove); } function enemyMove(e:Event):void { for (var i=0; i<enemyNum; i++) { var enemy=enemyArr[i]; enemy.y+=enemySpeed; if(pulaR.hitTestObject(enemy)) { enemy.gotoAndStop (2); } if(enemy.y>=400) { enemy.x = Math.random() * -400 +400; enemy.y = Math.random() * -7000; enemy.gotoAndStop(1); } } } //===========================================================>>>> var pulaR:MovieClip; stage.addEventListener(MouseEvent.CLICK,vustril); function vustril (e:MouseEvent):void{ var pulaRArr:Array= new Array(); var pulaRSpeed:Number=15; const pulaRNum:int = 1; for (var q=0; q<pulaRNum; q++) { pulaR = new pula(); pulaRArr.push(pulaR); pulaRArr[q].x = L5.x; pulaRArr[q].y = L5.y; addChild(pulaRArr[q]); addEventListener(Event.ENTER_FRAME,pulaRMove); } function pulaRMove(e:Event):void { for (var q=0; q<pulaRNum; q++) { pulaR=pulaRArr[q]; pulaR.y-=pulaRSpeed; } } } |
|
|||||
|
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
здесь вы запускаете функцию enemyMove
здесь обращаетесь к переменной pulaR а создаете ее в другой функции, то есть чтобы заработал ваш код нужно сначала вызвать функцию vustril которая создаст pulaR, а потом только вызвать функцию enemyMove, но я так понимаю это неправильно вам нужно сделать проверку на существование пули так |
|
|||||
|
Регистрация: Nov 2012
Сообщений: 7
|
Спасибо вам теперь все работает.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:52. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|