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

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

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

Регистрация: Dec 2013
Сообщений: 8
The bomb! полет пули в сторону клика

Как собственно такое реализовать? Вот мой код:

Код AS3:
var pulya:Pulka=new Pulka(); //добавляем пулю
var pulyaArr:Array = []; //массив пуль
stage.addEventListener(MouseEvent.CLICK,addPulya);
function addPulya(e:MouseEvent):void{
	pulya.x=275;
	pulya.y=500;
	addChild(pulya);
	pulyaArr.push(pulya);
Tweener.addTween(pulya, {x:mouseX,y:mouseY, time:1, transition:"linear"});//класс твинер для полета пули
}
подключил класс твинер, но мне кажется можно намного проще, и при этом если через этот класс делать то пуля останавливается в месте клика, а мне нужно чтобы дальше летела и за пределами окна удалялась и еще я массив создал, только вот не догоняю как сделать так, чтобы пули кончались

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Для того, чтобы пуля продолжала свое движение, нужно по двум точкам найти вектор перемещений. И просто перемещать объект вдоль этого вектора.
Есть клас Pulka (naming convention сохранил)
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
	/**
	 * ...
	 * @author KumoKairo
	 */
	public class Pulka extends Sprite
	{
		private var movementVector:Point;
 
		public function Pulka(startPoint:Point, targetPoint:Point, speed:Number) 
		{
			// Простая графика для отладки
			graphics.beginFill(0xFF0000);
			graphics.drawCircle(startPoint.x, startPoint.y, 15);
			graphics.endFill();
 
			// Находим вектор перемещений. 
			// Он задает направление движения
			movementVector = targetPoint.subtract(startPoint);
			// Нормируем его по скорости, его длина будет равна скорости
			movementVector.normalize(speed);
 
			addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}
 
		private function onAddedToStage(e:Event):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			// Таким образом в обработчике ENTER_FRAME stage не будет равно null
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		private function onEnterFrame(e:Event):void 
		{
			this.x += movementVector.x;
			this.y += movementVector.y;
			// Здесь следует добавить проверку на выход за рамки экрана
			// И сообщать родителю о том, что пуля закончила свое передвижение
			// чтобы родитель мог удалить эту пулю из списка детей и удалить все ссылки
			// Не забудьте отписаться от события ENTER_FRAME
		}
 
	}
 
}
И пример создания пульки
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author KumoKairo
	 */
	public class Main extends Sprite 
	{
		private var defaultStartPoint:Point;
		private var defaultSpeed:Number;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			// Задаем значения точки отправки пули по умолчанию
			defaultStartPoint = new Point(275, 500);
			// И скорость по умолчанию
			defaultSpeed = 5;
			stage.addEventListener(MouseEvent.CLICK, onStageClick);
		}
 
		private function onStageClick(e:MouseEvent):void 
		{
			// Как альтернатива - можно использовать e.stageX вместо mouseX
			var targetPoint:Point = new Point(e.stageX, e.stageY);
			// Здесь у вас будет массив и прочие приблуды
			var pulka:Pulka = new Pulka(defaultStartPoint, targetPoint, defaultSpeed);
			addChild(pulka);
		}
	}
 
}
Обратите внимание на комментарии - я не описывал удаление пули с экрана и отписку от событий

Старый 13.12.2013, 17:46
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
А не проще ли тем же ТвинМаксом это делать - зная начальную точку и конечную ( начальную даже знать не важно, это скорее важнее объекту генератору пули, в каком мсте генерится там и начальная, а клик мыши конечная, которую по твинмаксу и двигаем. ).
__________________
Марк Tween

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
ТС написал что если твинером делать, то в конечной точке останавливается пуля, и это логично. Если твинером делать, то придется вычислять точку, которая находится за экраном, чтобы в случае чего пуля не останавливалась в точке, в которую нажали, а продолжала лететь дальше.

Да и потом, если делать твинером, то придется как-то вычислять время анимации, основанное на заданной скорости, чтобы у всех пуль была одинаковая скорость. А это сделать сложнее чем найти вектор перемещения и двигать пулю вдоль него.

Может я конечно не знаю что-то про TweenMax, я с ним не работал Но у твинеров принцип действия в целом одинаковый должен быть, отсюда такие предположения)

Тут принцип то простой, просто кода много из-за того что не в кадрах.

Старый 16.12.2013, 15:05
zhdanoff вне форума Посмотреть профиль Отправить личное сообщение для zhdanoff Найти все сообщения от zhdanoff
  № 5  
Ответить с цитированием
zhdanoff

Регистрация: Dec 2013
Сообщений: 8
классы классы, я не шарю в классах, можно без них? сколько пытался начать программировать грубо говоря дальше hello world не уходил, хотя учился на программиста, и вот решил опробовать флеш профешнл, мне понравилось.
как без классов сделать? я у меня есть пример готовый, где пуля летит но падает, тк. там еще и гравитация есть, но так и не получилось запихнуть в один слой, я делаю весь код в одном слое, и давайте не будем от том что я делаю неправильно или еще что то, можно просто переделать без классов, оч прошу

Старый 16.12.2013, 16:20
zhdanoff вне форума Посмотреть профиль Отправить личное сообщение для zhdanoff Найти все сообщения от zhdanoff
  № 6  
Ответить с цитированием
zhdanoff

Регистрация: Dec 2013
Сообщений: 8
вот пример приблизительно как мне надо, только чтобы все в одном файле было, все делал в один слой весь код даже ошибок не было, но не работает
Вложения
Тип файла: rar stvol.rar (7.6 Кб, 53 просмотров)

Старый 16.12.2013, 16:22
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 7  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
ну вы же вот здесь пишите

Цитата:
Сообщение от zhdanoff Посмотреть сообщение
Код AS3:
var pulya:Pulka=new Pulka(); //добавляем пулю
а это и есть ничто иное как класс, точнее вы создаете экземпляр класса пули.

а внутри класса пули вам нужно поместить 2 переменные: на сколько пикселей пуля смещается по х и по y

а потом по энтерфрейму доставать пробегаться по массиву пуль, доставать из пули эти переменные и смещать пулю на них
тоесть
Код AS3:
 
pulya.x+=pulya.moveX;
pulya.y+=pulya.moveY;
проекты надо сохранять в CS5 версию

Старый 17.12.2013, 10:30
zhdanoff вне форума Посмотреть профиль Отправить личное сообщение для zhdanoff Найти все сообщения от zhdanoff
  № 8  
Ответить с цитированием
zhdanoff

Регистрация: Dec 2013
Сообщений: 8
Цитата:
Сообщение от Isfet Посмотреть сообщение
проекты надо сохранять в CS5 версию
а какая разница? я сохраняю .fla cs6

Старый 17.12.2013, 11:28
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 9  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
я сохраняю .fla cs6
Угу, открывайте, как хотите, уважаемые. Если у вас нет cs6 - это ваши проблемы.

Старый 17.12.2013, 14:01
zhdanoff вне форума Посмотреть профиль Отправить личное сообщение для zhdanoff Найти все сообщения от zhdanoff
  № 10  
Ответить с цитированием
zhdanoff

Регистрация: Dec 2013
Сообщений: 8
Код AS1/AS2:
var pulya:MovieClip=new Pulka();
var pulyaArr:Array = []; //массив пуль
var speed = 10;
stage.addEventListener(MouseEvent.CLICK , clickListener);
function clickListener(e:MouseEvent):void
{
	pulya.x = 275;
	pulya.y = 500;
	addChild(pulya);
		pulyaArr.push(pulya);
	if (pulyaArr.length > 9)	{	
removeChild(pulya);
puh.gotoAndStop("puli");	}
	pulya.angle = Math.atan2(mouseX-pulya.x, mouseY-pulya.y);
	addEventListener(Event.ENTER_FRAME,fire)
}
function fire(e:Event):void 
{
	 pulya.x += Math.sin( pulya.angle ) * speed;
	 pulya.y += Math.cos( pulya.angle ) * speed;     
}
Проблема решена, нашел у вас на форуме, мне на другом предлагали такие коды километровые, а вся задача в 5 строчек .
Теперь вопрос как сделать так, чтобы пока пуля не скроется за границы, у меня окно 500х500, нельзя было выпустить следующую, ну и соответственно чтобы за границами окна пуля removeChild

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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