Free ActionScript

Flash AS2 & AS3 Tutorials, Game Code, Effects, Source Files & Sample Downloads

Game Enemy Manager

Enemy Manager code that handles basic enemy functions:

  • Create Enemy
  • Update Enemy
  • Get Closest Enemy
  • Destroy Enemy
Download Fla Sample

Download Fla Sample

Update – Version 1.1.0
Refactored code to be OOP

Enemy AI – Patrol

New enemy AI patrol script. Movieclip follows a predefined set of point markers stored in an array.

Features

  • Accelerate/Decelerate
  • Smooth movement & rotation
  • Bounce off walls on collision
  • Go to next point once destination is reached
  • Easily add/remove destinations

Preview

Download Fla Sample

Download Fla Sample

Enemy AI – random movement

Brand new enemy AI game engine based on my previous smooth follow example.

Features

  • Smooth movement & rotation
  • Change direction once destination is reached
  • Bounce off walls on collision

Preview

View Code ACTIONSCRIPT
/**
 * Enemy AI - Random movement
 * ---------------------
 * VERSION: 1.0
 * DATE: 1/25/2011
 * AS3
 * UPDATES AND DOCUMENTATION AT: http://www.FreeActionScript.com
 **/
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));
		}
 
	}
 
}
Download Fla Sample

Download Fla Sample

Random Movement & Random Direction Change

Here is an ActionScript 2 enemy ai script that allows you to create enemies that move around randomly inside a container movieclip and randomly change direction.

Preview

Download Fla Sample

Download Fla Sample