/**
* Car Movement - Accelerate, Brake, Rotate & Reverse
* ---------------------
* VERSION: 2.0
* DATE: 1/09/2011
* AS3
* UPDATES AND DOCUMENTATION AT: http://www.FreeActionScript.com
**/
package com.freeactionscript{import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
publicclass Car extends Sprite
{//Settingsprivatevar speed:Number = 0;
privatevar speedMax:Number = 8;
privatevar speedMaxReverse:Number = -3;
privatevar speedAcceleration:Number = .15;
privatevar speedDeceleration:Number = .90;
privatevar groundFriction:Number = .95;
privatevar steering:Number = 0;
privatevar steeringMax:Number = 2;
privatevar steeringAcceleration:Number = .10;
privatevar steeringFriction:Number = .98;
privatevar velocityX:Number = 0;
privatevar velocityY:Number = 0;
privatevarup:Boolean = false;
privatevardown:Boolean = false;
privatevarleft:Boolean = false;
privatevarright:Boolean = false;
publicfunction Car(){
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}privatefunction onAddedToStage(event:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
init();
}privatefunction init():void{stage.addEventListener(Event.ENTER_FRAME, runGame);
stage.addEventListener(KeyboardEvent.KEY_DOWN, myOnPress);
stage.addEventListener(KeyboardEvent.KEY_UP, myOnRelease);
}privatefunction runGame(event:Event):void{if(up){//check if below speedMaxif(speed < speedMax){//speed up speed += speedAcceleration; //check if above speedMax if (speed > speedMax){//reset to speedMax
speed = speedMax;
}}}if(down){//check if below speedMaxReverseif(speed > speedMaxReverse){//speed up (in reverse)
speed -= speedAcceleration;
//check if above speedMaxReverseif(speed < speedMaxReverse){//reset to speedMaxReverse speed = speedMaxReverse; } } } if (left) { //turn left steering -= steeringAcceleration; //check if above steeringMax if (steering > steeringMax){//reset to steeringMax
steering = steeringMax;
}}if(right){//turn right
steering += steeringAcceleration;
//check if above steeringMaxif(steering < -steeringMax){//reset to steeringMax steering = -steeringMax; } } // friction speed *= groundFriction; // prevent drift if(speed > 0 && speed < 0.05) { speed = 0 } // calculate velocity based on speed velocityX = Math.sin (this.rotation * Math.PI / 180) * speed; velocityY = Math.cos (this.rotation * Math.PI / 180) * -speed; // update position this.x += velocityX; this.y += velocityY; // prevent steering drift (right) if(steering > 0){// check if steering value is really low, set to 0if(steering < 0.05){
steering = 0;
}}// prevent steering drift (left)elseif(steering < 0){// check if steering value is really low, set to 0 if(steering > -0.05){
steering = 0;
}}// apply steering friction
steering = steering * steeringFriction;
// make car go straight after driver stops turning
steering -= (steering *0.1);
// rotatethis.rotation += steering * speed;
}/**
* Keyboard Handlers
*/privatefunction myOnPress(event:KeyboardEvent):void{switch( event.keyCode){case Keyboard.UP:
up = true;
break;
case Keyboard.DOWN:
down = true;
break;
case Keyboard.LEFT:
left = true;
break;
case Keyboard.RIGHT:
right = true;
break;
}
event.updateAfterEvent();
}privatefunction myOnRelease(event:KeyboardEvent):void{switch( event.keyCode){case Keyboard.UP:
up = false;
break;
case Keyboard.DOWN:
down = false;
break;
case Keyboard.LEFT:
left = false;
break;
case Keyboard.RIGHT:
right = false;
break;
}}}}
Download Fla Sample
Wishlist
-Car leaves tire marks
Updates Version 2.0 – 01/09/2011
-Re-wrote most of the code
-Fixed drifting bug
-Fixed reverse
-Added car starting rotation (just set car’s rotation property)
AS3 version of my endless starfield & parallax scrolling effect. This is a huge improvement over the last script in terms of performance and ease-of-use.
This version lets you set the width, height, and speed of the starfield, as well as position it anywhere on stage by setting the X & Y coordinates (old version only allowed it to be fullscreen).
This is great because you’ll now be able to use it in games (top-down and side scrollers), any size banners (horizontal or skyscrapers), and anywhere else you need the effect.
Using it is pretty simple: parallaxField.createField(containerMC, x, y, width, height, numberOfStars, speedX, speedY);
You can also use: parallaxField.enable(); parallaxField.disable();
To start and stop the effect.
We’re going to make this little asteroid-clone space shooter for AS3 beginners.
It has the basic key press detection (listeners) and an AS3 version of onEnterFrame. We are however going to use classes and packages. Don’t be scared, it’s not complicated.
9 Comments »