/**
* 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.
8 Comments »