Here’s a game built with the AS3 ActionScript Physics Engine. It’s easy to create a simple a car physics game with APE. Here’s my go at it: Kinetic Car Park. Make the car fly through the air and land in the parking space. Click the game to give it focus, then use the left/right arrow keys on your keyboard to control the game. It’s possible to put the car on every ramp in the game. Not too hard really.

This is a very rough go at a game so no scoring etc. at this point. You can download the source AS3 & Fla files here. You’ll also need the ActionScript Physics Engine. This little demo was created with APE v0.45.




Here’s the document class:

package
{
	import org.cove.ape.*;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.ui.Keyboard;
	import flash.events.KeyboardEvent;

	public class APEcar extends Sprite
	{

		private var wheel1:WheelParticle = new WheelParticle(460,20,10,false,100,0.05);
		private var wheel2:WheelParticle = new WheelParticle(500,20,10,false,100,0.05);

		public function APEcar()
		{
			addEventListener(Event.ENTER_FRAME, run);
			APEngine.init(1/4);
			APEngine.container = this;
			APEngine.addMasslessForce(new Vector(0,2));
			var defaultGroup:Group = new Group();
			defaultGroup.collideInternal = true;

			defaultGroup.addParticle(wheel1);
			defaultGroup.addParticle(wheel2);

			var leftWall:RectangleParticle = new RectangleParticle(5,0,990,10,4.712389,true);
			defaultGroup.addParticle(leftWall);

			var rightWall:RectangleParticle = new RectangleParticle(695,0,990,10,4.712389,true);
			defaultGroup.addParticle(rightWall);

			// Left //

			var planeLeft1:RectangleParticle = new RectangleParticle (10, 140, 200, 10, -0.2, true);
			defaultGroup.addParticle(planeLeft1);

			var planeLeft2:RectangleParticle = new RectangleParticle(10,200,200,10,-0.1,true);
			defaultGroup.addParticle(planeLeft2);

			var planeLeft3:RectangleParticle = new RectangleParticle(10,300,300,10,0.2,true);
			defaultGroup.addParticle(planeLeft3);		

			// Center //

			var planeCenter1:RectangleParticle = new RectangleParticle(420,245,200,10,0.1,true);
			defaultGroup.addParticle(planeCenter1);

			var planeCenter2:RectangleParticle = new RectangleParticle(503,240,50,10,-0.6,true);
			defaultGroup.addParticle(planeCenter2);

			var planeCenter4:RectangleParticle = new RectangleParticle(440,350,180,10,0.1,true);
			defaultGroup.addParticle(planeCenter4);

			var planeCenter5:RectangleParticle = new RectangleParticle(240,490,200,10,-0.4,true);
			defaultGroup.addParticle(planeCenter5);

			var planeCenter6:RectangleParticle = new RectangleParticle(380,483,80,10,0.6,true);
			defaultGroup.addParticle(planeCenter6);

			var planeCenter3:RectangleParticle = new RectangleParticle(340,330,50,10,0.7,true);
			defaultGroup.addParticle(planeCenter3);

			// Right //

			var planeRight1:RectangleParticle = new RectangleParticle(670,160,70,10,0,true);
			defaultGroup.addParticle(planeRight1);

			var planeRight2:RectangleParticle = new RectangleParticle(620,360,70,10, 0.1,true);
			defaultGroup.addParticle(planeRight2);

			var planeRight4:RectangleParticle = new RectangleParticle(570,380,40,10, -0.8,true);
			defaultGroup.addParticle(planeRight4);

			var planeRight3:RectangleParticle = new RectangleParticle(560,390,260,10, -0.3,true);
			defaultGroup.addParticle(planeRight3);

			var speedBump:RectangleParticle = new RectangleParticle(670,156,4,10,0,true);
			defaultGroup.addParticle(speedBump);

			var floor:RectangleParticle = new RectangleParticle(300,500,1000,10,0,true);
			defaultGroup.addParticle(floor);

			// put the car together: 2 wheel particles joined by a spring constraint: //

			var car:SpringConstraint = new SpringConstraint(wheel1, wheel2, 0.3, true, 3);
			defaultGroup.addConstraint(car);
        	APEngine.addGroup(defaultGroup);

			stage.addEventListener(KeyboardEvent.KEY_DOWN, key_pressed);
			stage.addEventListener(KeyboardEvent.KEY_UP, key_released);
		}

		function key_pressed(event:KeyboardEvent):void
		{
			if (event.keyCode == Keyboard.RIGHT)
			{
				wheel1.angularVelocity = 0.3;
				wheel2.angularVelocity = 0.3;
			}

			if (event.keyCode == Keyboard.LEFT)
			{
				wheel1.angularVelocity = -0.3;
				wheel2.angularVelocity = -0.3;
			}
		}

		function key_released(event:KeyboardEvent):void
		{
			wheel1.angularVelocity = 0;
			wheel2.angularVelocity = 0;
		}

		private function run(evt:Event):void
		{
			APEngine.step();
			APEngine.paint();
		}
	}
}

Comments

Leave a Reply