Самый простой и логичный способ добиться этого - иметь свойство velocity
, которое вы можете уменьшить. Вот класс, который может содержать такое свойство:
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class PhysicsMovieClip extends MovieClip
{
// Properties
private var _velocity:Number = 0;
private var _angle:Number = 0;
public var velocityTarget:Number = 0;
/**
* Constructor
*/
public function PhysicsMovieClip()
{
addEventListener(Event.ENTER_FRAME, _handle);
}
/**
* ...
* @param e Event.ENTER_FRAME
*/
private function _handle(e:Event):void
{
_velocity -= (_velocity - velocityTarget) / 10;
x += Math.cos(_angle) * _velocity;
y += Math.sin(_angle) * _velocity;
}
/**
* Getters & Setters
*/
public function get angle():Number{ return _angle * 180 / Math.PI; }
public function set angle(value:Number):void
{
_angle = value / 180 * Math.PI;
}
}
}
Вышеуказанное позволит вам изменить свойство velocityTarget
, которое замедлит или ускорит ваш объект.
Пример:
var mc:PhysicsMovieClip = new PhysicsMovieClip(); // assign graphics somewhere
addChild(mc);
mc.velocityTarget = 10; // the MovieClip will speed up
Вы сможете изменить направление движения, установив свойство angle
выше так:
mc.angle = 90; // movement is now directly south
mc.angle = 270 // movement is now directly north
(вспышка 0 градусов прямо на восток)