hi all,
the script below is for a smooth random movement around the stage with a single instance of a clip (Player) loaded from the library.
can anyone tell me how i can tell the package shown below that i want it to replicate the instance “player” on the stage multiple times and still keep the random movement for each instance of Player?
so there are multiple clips all scooting around the stage at will?
would an array solve it? i’m not sure what i should be looking to do?
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends MovieClip
{
// player settings
private var _moveSpeedMax:Number = 1000;
private var _rotateSpeedMax:Number = 15;
private var _decay:Number = .98;
private var _destinationX:int = 150;
private var _destinationY:int = 150;
private var _minX:Number = 0;
private var _minY:Number = 0;
private var _maxX:Number = 550;
private var _maxY:Number = 400;
// player
private var _player:MovieClip;
// global
private var _dx:Number = 0;
private var _dy:Number = 0;
private var _vx:Number = 0;
private var _vy:Number = 0;
private var _trueRotation:Number = 0;
/**
* Constructor
*/
public function Main()
{
// create player object
createPlayer();
// add listeners
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
/**
* Creates player
*/
private function createPlayer():void
{
_player = new Player();
_player.x = stage.stageWidth / 2;
_player.y = stage.stageHeight / 2;
stage.addChild(_player);
}
/**
* EnterFrame Handlers
*/
private function enterFrameHandler(event:Event):void
{
updateCollision();
updatePosition();
updateRotation();
}
/**
* Calculate Rotation
*/
private function updateRotation():void
{
// calculate rotation
_dx = _player.x - _destinationX;
_dy = _player.y - _destinationY;
// which way to rotate
var rotateTo:Number = getDegrees(getRadians(_dx, _dy));
// keep rotation positive, between 0 and 360 degrees
if (rotateTo > _player.rotation + 180) rotateTo -= 360;
if (rotateTo < _player.rotation - 180) rotateTo += 360;
// ease rotation
_trueRotation = (rotateTo - _player.rotation) / _rotateSpeedMax;
// update rotation
_player.rotation += _trueRotation;
}
/**
* Calculate Position
*/
private function updatePosition():void
{
// update velocity
_vx += (_destinationX - _player.x) / _moveSpeedMax;
_vy += (_destinationY - _player.y) / _moveSpeedMax;
// if close to target
if (getDistance(_dx, _dy) < 50)
{
getRandomDestination();
}
// apply decay (drag)
_vx *= _decay;
_vy *= _decay;
// update position
_player.x += _vx;
_player.y += _vy;
}
/**
* updateCollision
*/
protected function updateCollision():void
{
// Check X
// Check if hit top
if (((_player.x - _player.width / 2) < _minX) && (_vx < 0))
{
_vx = -_vx;
}
// Check if hit bottom
if ((_player.x + _player.width / 2) > _maxX && (_vx > 0))
{
_vx = -_vx;
}
// Check Y
// Check if hit left side
if (((_player.y - _player.height / 2) < _minY) && (_vy < 0))
{
_vy = -_vy
}
// Check if hit right side
if (((_player.y + _player.height / 2) > _maxY) && (_vy > 0))
{
_vy = -_vy;
}
}
/**
* Calculates a random destination based on stage size
*/
private function getRandomDestination():void
{
_destinationX = Math.random() * (_maxX - _player.width) + _player.width / 2;
_destinationY = Math.random() * (_maxY - _player.height) + _player.height / 2;
}
/**
* Get distance
* @param delta_x
* @param delta_y
* @return
*/
public function getDistance(delta_x:Number, delta_y:Number):Number
{
return Math.sqrt((delta_x*delta_x)+(delta_y*delta_y));
}
/**
* Get radians
* @param delta_x
* @param delta_y
* @return
*/
public function getRadians(delta_x:Number, delta_y:Number):Number
{
var r:Number = Math.atan2(delta_y, delta_x);
if (delta_y < 0)
{
r += (2 * Math.PI);
}
return r;
}
/**
* Get degrees
* @param radians
* @return
*/
public function getDegrees(radians:Number):Number
{
return Math.floor(radians/(Math.PI/180));
}
}
}
anyone?..
:batman: ?
:mr_t: ?