Exemple d'utilisation de QuickB2

Le 26 mai 2011 - Jeux, Tutoriaux  -  Pas de commentaires
box2d_ex

Comme présenté ici QuickB2 est une version simplifié de Box2D. Vous pouvez bien sur consulter les exemples avec sources sur leur site internet ou dans le moteur (QuickB2_0_6\QuickB2\examples\qb2DemoReel\).
Sinon vous pouvez télécharger l'exemple que je vous ai préparé. J'ai simplement repris et allégé la classe CarDriving.as, ça pourrait en aider certains si vous avez du mal à l'installer ou à faire fonctionner les exemples. Voici ce que l'on obtiens :

This movie requires Flash Player 9

Et voici ma classe:

package 
{
	import As3Math.geo2d.*;
	import As3Math.consts.*;
	import flash.display.*;
	import QuickB2.events.qb2ContainerEvent;
	import QuickB2.objects.tangibles.*;
	import QuickB2.stock.*;
	import TopDown.ai.brains.tdControllerBrain;
	import TopDown.ai.controllers.tdKeyboardCarController;
	import TopDown.carparts.tdEngine;
	import TopDown.carparts.tdTire;
	import TopDown.carparts.tdTorqueCurve;
	import TopDown.carparts.tdTransmission;
	import TopDown.objects.tdCarBody;
	import TopDown.objects.tdMap;
	import TopDown.objects.tdTerrain;
 
	public class Main extends Sprite 
	{
		private var playerCar:tdCarBody = new tdCarBody();
		private var world:qb2World = new qb2World();
		private var map:tdMap = new tdMap();
		private var saveGravity:amVector2d = new amVector2d();
		private var fence:qb2Group = new qb2Group();
		private var center:amPoint2d;
 
		public function Main():void 
		{
			center = new amPoint2d(stage.stageWidth/2, stage.stageHeight/2);
 
			// World
			initWorld();
			world.addObject(map);
 
			// Gravité
			saveGravity.copy(this.world.gravity);
			this.world.gravity.set(0, 0);
			this.world.gravityZ = 9.8;
 
			// Terrain
			var defaultTerrain:tdTerrain = new tdTerrain(true);
			defaultTerrain.frictionZMultiplier = 1.5;
			map.addObject(defaultTerrain);
 
			// Voiture
			initCar();
			map.addObject(playerCar);
 
			initObjects();
			map.addObject(fence);
		}
 
		protected function initWorld():void
		{
			//world.debugDragSource = this;
			world.actor = addChild(new Sprite());
			world.debugDrawContext = (addChild(new Sprite()) as Sprite).graphics;
			world.realtimeUpdate = true;
			world.maximumRealtimeStep = 1.0 / 10.0;
			world.gravity.y = 10;
			world.defaultPositionIterations = 10;
			world.defaultVelocityIterations = 10;
			world.start();
		}
 
		protected function initCar():void
		{
			// Géométrie et poids de la voiture
			var carWidth:Number = 60;
			var carHeight:Number = 90;
			playerCar.addObject( qb2Stock.newRectShape(new amPoint2d(0, 0), carWidth, carHeight) );
			playerCar.mass = 1000; //1000kg
			playerCar.position.copy(center);
 
			// Création des roues
			var tireFriction:Number = 2.0;
			var tireRollingFriction:Number = 1;
			var tireWidth:Number = 7;
			var tireRadius:Number = 10;
			playerCar.addObject
			(
				new tdTire(new amPoint2d(-carWidth/2, -carHeight/3), tireWidth, tireRadius, true /*driven*/,  true /*turns*/, false /*brakes*/, tireFriction, tireRollingFriction),
				new tdTire(new amPoint2d( carWidth/2, -carHeight/3), tireWidth, tireRadius, true,  true, false, tireFriction, tireRollingFriction),
				new tdTire(new amPoint2d( carWidth/2,  carHeight/3), tireWidth, tireRadius, false, false, true, tireFriction, tireRollingFriction),
				new tdTire(new amPoint2d(-carWidth/2,  carHeight/3), tireWidth, tireRadius, false, false, true, tireFriction, tireRollingFriction)
			);
 
			// Controle au clavier
			var playerBrain:tdControllerBrain = new tdControllerBrain();
			playerBrain.addController(new tdKeyboardCarController(stage));
			playerCar.addObject(playerBrain);
 
			// Moteur et transmission de la voiture
			playerCar.addObject(new tdEngine(), new tdTransmission());
 
			// Gear ratios (transmission)
			playerCar.tranny.gearRatios = Vector.<Number>([3.5, 3.5, 3, 2.5, 2, 1.5, 1]);
 
			//Courbe de régime du moteur, correspondance entre RPM et NM
			var curve:tdTorqueCurve = playerCar.engine.torqueCurve;
			curve.addEntry(1000, 300); // à 1000 RPM, 300 Nm max
			curve.addEntry(2000, 310);
			curve.addEntry(3000, 320);
			curve.addEntry(4000, 325);
			curve.addEntry(5000, 330);
			curve.addEntry(6000, 325);
			curve.addEntry(7000, 320);
		}
 
		protected function initObjects():void
		{
			//Création d'objets en cercle
			fence.frictionZ = 1.0;
			var angleInc:Number = RAD_10;
			var rotPoint:amPoint2d = center.clone().incY( -200);
			var limit:int = AM_PI * 2 / angleInc;
			for (var i:int = 0; i < limit; i++) 
			{
				fence.addObject(qb2Stock.newRectBody(rotPoint.rotatedBy(i * angleInc, center), 20, 20, 200, i * angleInc));
			}
		}
	}
}

Pour tester l'exemple complet, avec .fla, moteur et dépendances : c'est ici

Laisser un commentaire