![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 247
|
Действия происходят только с последнего спрайта.
Тоесть в моем случае я на сцену ставлю башни и стреляет только с последней башни, вот код: private function thisClick(e:MouseEvent):void { var xv:int = (e.target as Sprite).x; var yv:int = (e.target as Sprite).y; makeTurret(xv, yv); (e.target as Sprite).removeEventListener(MouseEvent.CLICK, thisClick); } private function makeTurret(xValue:int,yValue:int):void{ var turret = new Sprite(); turret.x = xValue + 12.5; turret.y = yValue + 12.5; turret.graphics.beginFill(0x999999); turret.graphics.drawCircle(0,0,12.5); turret.graphics.endFill(); turret.graphics.beginFill(0xFFFFFF); turret.graphics.drawRect(-2.5, 0, 5, 20); turret.graphics.endFill(); addChild(turret); turret.addEventListener(Event.ENTER_FRAME, eFrameEvents); } private function eFrameEvents(e:Event):void { var turret:Sprite = Sprite(e.target); var distance:Number = range; enTarget = null; for(var i:int=enemyHolder.numChildren-1;i>=0;i--){ var cEnemy =enemyHolder.getChildAt(i); if (Math.sqrt(Math.pow(cEnemy.y - turret.y, 2) + Math.pow(cEnemy.x - turret.x, 2)) < 100) { enTarget = cEnemy; } } if(enTarget != null){ turret.rotation = Math.atan2((enTarget.y-turret.y), enTarget.x-turret.x)/Math.PI*180 - 90; if(loaded2){ loaded2 = false; var newBullet = new Sprite(); newBullet.graphics.beginFill(0xFFFFFF); newBullet.graphics.drawCircle(0,0,2); newBullet.graphics.endFill(); newBullet.x = turret.x;//<--получается выстрел берет newBullet.y = turret.y;//<--координаты с последней башни newBullet.addEventListener(Event.ENTER_FRAME,eFrame); addChild(newBullet); } } if(!loaded2){ cTime2 ++; if(cTime2 == reloadTime2){ loaded2 = true; cTime2 = 0; } } } private function eFrame(e:Event):void { var newBullet2:Sprite = Sprite(e.target); if (enTarget == null ) { if(newBullet2.parent){ newBullet2.parent.removeChild(newBullet2); } newBullet2.removeEventListener(Event.ENTER_FRAME, eFrame); }else{ var yDist:Number=enTarget.y+12.5 - newBullet2.y; var xDist:Number=enTarget.x+12.5 - newBullet2.x; var angle:Number=Math.atan2(yDist,xDist); ySpeedBul=Math.sin(angle) * maxSpeedBul; xSpeedBul=Math.cos(angle) * maxSpeedBul; newBullet2.x+= xSpeedBul; newBullet2.y+= ySpeedBul; if(newBullet2.hitTestObject(enTarget)){ enTarget.health -= damage; if(newBullet2.parent){ newBullet2.parent.removeChild(newBullet2); } newBullet2.removeEventListener(Event.ENTER_FRAME, eFrame); } } } Предпологаю что нужен под каждую башню определенный спрайт, от которого из них будут идти выстрелы,пока-что не могу понять как... Нужна ваша помощь ![]() Добавлено через 28 часов 37 минут Все еще нужно решение :\ |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 2
|
если вам нужно несколько башень - напишите под каждую из них спрайт
|
|
|||||
|
Регистрация: Jan 2011
Сообщений: 247
|
Не вариант, у меня может быть несколько десятков башен.
Кто нибудь сталкивался с такой проблемой ? |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 169
|
Это надо делать классами либо массивами с нахождением той башни,которая стреляет.
|
|
|||||
|
Вы зря тогда оттолкнули мой пример с классами.
Аргументируйте, почему тот подход вам не подходит? А я тем временем приделаю в ту версию выстрелы ![]()
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
ну а про ваш пример, у вас башня в отдельном классе. хотелось бы это реализовать массивами, только не знаю как к этому подойти... |
|
|||||
|
Цитата:
Куда удобнее все эти башни и пули подменять.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 169
|
Ну как подойтии...Делаете массивы башенок,потом при нажатии на мышку проводите цикл
Вот по сути и все |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
private function makeTurret(xValue:int,yValue:int):void{ var turret = new Sprite(); turret.x = xValue + 12.5; turret.y = yValue + 12.5; turret.graphics.beginFill(0x999999); turret.graphics.drawCircle(0,0,12.5); turret.graphics.endFill(); turret.graphics.beginFill(0xFFFFFF); turret.graphics.drawRect(-2.5, 0, 5, 20); turret.graphics.endFill(); sprTurret.push(turret); //addChild(turret); //for (var n:int = sprites.length - 1; n >= 0; n--) { for(var i:int = 0;i < sprTurret.length;i++) { var spr2Turret:Sprite = sprTurret[i]; addChild(spr2Turret); spr2Turret.addEventListener(Event.ENTER_FRAME, eFrameEvents); } } private function makeTurret(xValue:int,yValue:int):void{ var turret = new Sprite(); turret.x = xValue + 12.5; turret.y = yValue + 12.5; turret.graphics.beginFill(0x999999); turret.graphics.drawCircle(0,0,12.5); turret.graphics.endFill(); turret.graphics.beginFill(0xFFFFFF); turret.graphics.drawRect(-2.5, 0, 5, 20); turret.graphics.endFill(); sprTurret.push(turret); //addChild(turret); for (var n:int = sprites.length - 1; n >= 0; n--) { //for(var i:int = 0;i < sprTurret.length;i++) { var spr2Turret:Sprite = sprTurret[n]; addChild(spr2Turret);// <------ ошибка Error #2007: Параметр child не должен быть равен нулю. spr2Turret.addEventListener(Event.ENTER_FRAME, eFrameEvents); } } private function makeTurret(xValue:int,yValue:int):void{ var turret = new Sprite(); turret.x = xValue + 12.5; turret.y = yValue + 12.5; turret.graphics.beginFill(0x999999); turret.graphics.drawCircle(0,0,12.5); turret.graphics.endFill(); turret.graphics.beginFill(0xFFFFFF); turret.graphics.drawRect(-2.5, 0, 5, 20); turret.graphics.endFill(); sprTurret.push(turret); addChild(turret); for (var n:int = sprites.length - 1; n >= 0; n--) { //for(var i:int = 0;i < sprTurret.length;i++) { var spr2Turret:Sprite = sprTurret[n]; //addChild(spr2Turret); if(spr2Turret != null){ spr2Turret.addEventListener(Event.ENTER_FRAME, eFrameEvents); } } } Последний раз редактировалось GrafMine; 30.08.2011 в 17:26. |
|
|||||
|
Регистрация: Aug 2011
Адрес: Урал
Сообщений: 10
|
Напишите отдельный класс башни Tower и пули Bullet, как рекомендовали выше. Внутри класса башни добавляется пуля.
И создаете башни как экземпляры класса Tower хоть 100 штук. По вашему примеру, нужно к КАЖДОЙ! создаваемой башне (в массиве или нет не важно) например прицепить слушатель или таймер по которому запускается функция Bullet. типа такого: //раз в 30 кадров выполняется функция Bullet() у каждого tower; for (vat i:int=0, i<10,i++) { var tower:Sprite = new Sprite(); addChild(tower); tower.addEventListener(Event.ENTER_FRAME, eFrame); } var count:int=0; private function eFrame(e:Event):void { if (count>30) { count=0; Bullet(); } else { count++; } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|