Показать сообщение отдельно
Старый 13.06.2015, 14:31
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 6  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
У меня почти то же самое что и у ZackMercury, но вдруг пригодится.
Это класс вашей ракеты. У неё есть метод moveToTarget, который двигает ракету к заданной цели.
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author samana
	 */
	public class Rocket extends Sprite 
	{
		private var _target:Point = new Point(); //сюда запишем точку, куда нужно двигаться (клик мыши)
		private var _speedX:Number;
		private var _speedY:Number;
 
		public var speed:Number = 10; //скорость движения
 
 
		// начать движение к заданной точке
		public function moveToTarget(targetX:Number, targetY:Number):void
		{
			_target.x = targetX;
			_target.y = targetY;
 
			var dx:Number = _target.x - x;
			var dy:Number = _target.y - y;
			var ang:Number = Math.atan2(dy, dx);
 
			_speedX = Math.cos(ang) * speed;
			_speedY = Math.sin(ang) * speed;
 
			//повернуть объект в сторону движения если надо
			rotation = ang / Math.PI * 180;
 
			addEventListener(Event.ENTER_FRAME, enterFrame_moved);
 
		}
 
		private function enterFrame_moved(e:Event):void 
		{
			//узнаём расстояние между объектом и целью 
			var dx:Number = _target.x - x;
			var dy:Number = _target.y - y;
			var dist:Number = Math.sqrt(dx * dx + dy * dy);
 
			//если расстояние между объектом и целью меньше шага скорости, то останавливаемся
			if (dist < speed)
			{
				x = _target.x;
				y = _target.y;
				removeEventListener(Event.ENTER_FRAME, enterFrame_moved);
				if (parent) parent.removeChild(this);
				//trace(this, "stoped");
			}
			//иначе движемся к цели
			else
			{
				x += _speedX;
				y += _speedY;
				//trace(this, "is moved");
			}
 
		}
 
	}
 
}
Запуск по клику на сцене, примерно такой:
Код AS3:
public class Main extends Sprite 
{
 
	private var _pointA:Point;
 
	public function Main() 
	{
		_pointA = new Point(50, 50);
		stage.addEventListener(MouseEvent.CLICK, stage_click);
	}
 
	private function stage_click(e:MouseEvent):void 
	{
		var rocket:Rocket = new Rocket();
		rocket.x = _pointA.x;
		rocket.y = _pointA.y;
		addChild(rocket);
 
		rocket.moveToTarget(stage.mouseX, stage.mouseY);
	}
}