Exemple d'utilisation de QuickB2
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
Rechercher
Les plus populaires
CATEGORIES
TAGS
3D
as3
away3d
box2d
Camera3d
Cube
CubeMaterialsData
currentTarget
Design Pattern
Factory
HoverCamera3D
isométrie
jeu
kinect
lab
moteur 2D
moteur phisique
MOUSE_OVER
ObjectContainer3D
OpenNI
panorama
pathfinder
Plane
quickb2
render
rollOver
ROLL_OVER
scene3d
SenSorKinect
Singleton
Skybox
Skybox6
source
Sphere
target
TargetCamera3D
Triangle
tutorial
view3d
vista
webcam
windows




