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

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

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

Регистрация: Jan 2011
Сообщений: 247
По умолчанию Действия происходят только с последнего спрайта

Действия происходят только с последнего спрайта.
Тоесть в моем случае я на сцену ставлю башни и стреляет только с последней башни, вот код:
Код AS3:
		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 минут
Все еще нужно решение :\

Старый 27.08.2011, 22:32
AqueGen вне форума Посмотреть профиль Отправить личное сообщение для AqueGen Найти все сообщения от AqueGen
  № 2  
Ответить с цитированием
AqueGen

Регистрация: Nov 2010
Сообщений: 2
если вам нужно несколько башень - напишите под каждую из них спрайт

Старый 29.08.2011, 13:37
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 3  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от AqueGen Посмотреть сообщение
если вам нужно несколько башень - напишите под каждую из них спрайт
Не вариант, у меня может быть несколько десятков башен.
Кто нибудь сталкивался с такой проблемой ?

Старый 29.08.2011, 14:09
windrunner31 вне форума Посмотреть профиль Отправить личное сообщение для windrunner31 Найти все сообщения от windrunner31
  № 4  
Ответить с цитированием
windrunner31

Регистрация: Jul 2011
Сообщений: 169
Это надо делать классами либо массивами с нахождением той башни,которая стреляет.

Старый 29.08.2011, 14:30
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 5  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Вы зря тогда оттолкнули мой пример с классами.
Аргументируйте, почему тот подход вам не подходит?
А я тем временем приделаю в ту версию выстрелы
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 29.08.2011, 15:35
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 6  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от ChuwY Посмотреть сообщение
Вы зря тогда оттолкнули мой пример с классами.
Аргументируйте, почему тот подход вам не подходит?
А я тем временем приделаю в ту версию выстрелы
Про выстрелы, смешно ))))
ну а про ваш пример, у вас башня в отдельном классе.

Цитата:
Сообщение от windrunner31 Посмотреть сообщение
Это надо делать классами либо массивами с нахождением той башни,которая стреляет.
хотелось бы это реализовать массивами, только не знаю как к этому подойти...

Старый 29.08.2011, 16:02
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 7  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Цитата:
Сообщение от GrafMine Посмотреть сообщение
Про выстрелы, смешно ))))
ну а про ваш пример, у вас башня в отдельном классе.
И что из того? И пуля будет в отдельном классе тоже.
Куда удобнее все эти башни и пули подменять.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 29.08.2011, 19:09
windrunner31 вне форума Посмотреть профиль Отправить личное сообщение для windrunner31 Найти все сообщения от windrunner31
  № 8  
Ответить с цитированием
windrunner31

Регистрация: Jul 2011
Сообщений: 169
Ну как подойтии...Делаете массивы башенок,потом при нажатии на мышку проводите цикл
Код AS3:
var a:Array = new Array();
for(var i:int = 0;i < a.length;i++) {
//тут действия обращаясь к башне как к a[i]
}
Вот по сути и все

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

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от windrunner31 Посмотреть сообщение
Ну как подойтии...Делаете массивы башенок,потом при нажатии на мышку проводите цикл
Код AS3:
var a:Array = new Array();
for(var i:int = 0;i < a.length;i++) {
//тут действия обращаясь к башне как к a[i]
}
Вот по сути и все
По вашему примеру сделал так :
Код AS3:
		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);
			}
 
		}
результат тот же, попробовал применить по-другому массив:
Код AS3:
	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);
			}
 
		}
Так тоже , тоже самое:
Код AS3:
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.
Старый 31.08.2011, 10:00
Marcus вне форума Посмотреть профиль Отправить личное сообщение для Marcus Найти все сообщения от Marcus
  № 10  
Ответить с цитированием
Marcus

Регистрация: Aug 2011
Адрес: Урал
Сообщений: 10
Напишите отдельный класс башни Tower и пули Bullet, как рекомендовали выше. Внутри класса башни добавляется пуля.
И создаете башни как экземпляры класса Tower хоть 100 штук.

По вашему примеру, нужно к КАЖДОЙ! создаваемой башне (в массиве или нет не важно) например прицепить слушатель или таймер по которому запускается функция Bullet.
типа такого:

Код AS3:
//раз в 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, время: 20:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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