Weird Vehicle Control behavior

Hey Monkeys

I made a Kart class based on the TestFancyCar example but when I start the Game the Cart and the wheels are leike screwed up or just go to the center of the Chasis.

Here’s the Kart class:

[java]package kartGame;

import com.jme3.asset.AssetManager;

import com.jme3.bounding.BoundingBox;

import com.jme3.bullet.collision.shapes.CollisionShape;

import com.jme3.bullet.control.VehicleControl;

import com.jme3.bullet.util.CollisionShapeFactory;

import com.jme3.math.FastMath;

import com.jme3.math.Vector3f;

import com.jme3.renderer.queue.RenderQueue.ShadowMode;

import com.jme3.scene.Geometry;

import com.jme3.scene.Node;

import com.jme3.scene.Spatial;



  • @author elias


    public class Kart {

    private float stiffness = 120.0f;//200=f1 car

    private float compValue = 0.2f; //(lower than damp!)

    private float dampValue = 0.3f;

    private float mass;

    private float wheelRadius;

    private float steeringValue = 0;

    private float accelerationValue = 0;

    private VehicleControl vehicleControl;

    private Node kartNode;

    public Kart(AssetManager assetManager,String fileName){

    mass = 400;

    kartNode = (Node)assetManager.loadModel(fileName);


    Geometry chasis = findGeom(kartNode,“Chasis”);

    BoundingBox box = (BoundingBox) chasis.getModelBound();

    //Create a hull collision shape for the chassis

    CollisionShape carHull = CollisionShapeFactory.createDynamicMeshShape(chasis);

    //Create a vehicle control

    vehicleControl = new VehicleControl(carHull, mass);


    //Setting default values for wheels

    vehicleControl.setSuspensionCompression(compValue * 2.0f * FastMath.sqrt(stiffness));

    vehicleControl.setSuspensionDamping(dampValue * 2.0f * FastMath.sqrt(stiffness));



    //Create four wheels and add them at their locations

    //note that our fancy car actually goes backwards…

    Vector3f wheelDirection = new Vector3f(Vector3f.UNIT_Y); //maybe her’s the problem I tried to change the Vector units but on any

    Vector3f wheelAxle = new Vector3f(Vector3f.UNIT_X);//logicol combination wierd things happen to the wheels.

    Geometry wheel_fr = findGeom(kartNode, “WheelFrontRight”);;

    box = (BoundingBox) wheel_fr.getModelBound();

    wheelRadius = box.getYExtent();

    float back_wheel_h = (wheelRadius * 1.7f) - 1f;

    float front_wheel_h = (wheelRadius * 1.9f) - 1f;

    vehicleControl.addWheel(wheel_fr.getParent(), box.getCenter().add(0, -front_wheel_h, 0),

    wheelDirection, wheelAxle, 0.2f, wheelRadius, true);

    Geometry wheel_fl = findGeom(kartNode, “WheelFrontLeft”);;

    box = (BoundingBox) wheel_fl.getModelBound();

    vehicleControl.addWheel(wheel_fl.getParent(), box.getCenter().add(0, -front_wheel_h, 0),

    wheelDirection, wheelAxle, 0.2f, wheelRadius, true);

    Geometry wheel_br = findGeom(kartNode, “WheelBackRight”);;

    box = (BoundingBox) wheel_br.getModelBound();

    vehicleControl.addWheel(wheel_br.getParent(), box.getCenter().add(0, -back_wheel_h, 0),

    wheelDirection, wheelAxle, 0.2f, wheelRadius, false);

    Geometry wheel_bl = findGeom(kartNode, “WheelBackLeft”);;

    box = (BoundingBox) wheel_bl.getModelBound();

    vehicleControl.addWheel(wheel_bl.getParent(), box.getCenter().add(0, -back_wheel_h, 0),

    wheelDirection, wheelAxle, 0.2f, wheelRadius, false);




    public static Geometry findGeom(Spatial spatial, String name) {

    if (spatial instanceof Node) {

    Node node = (Node) spatial;

    for (int i = 0; i < node.getQuantity(); i++) {

    Spatial child = node.getChild(i);

    Geometry result = findGeom(child, name);

    if (result != null) {

    return result;



    } else if (spatial instanceof Geometry) {

    if (spatial.getName().startsWith(name)) {

    return (Geometry) spatial;



    return null;


    public VehicleControl getVehicleControl(){

    return this.vehicleControl;


    public float getSteeringValue(){

    return this.steeringValue;


    public void setSteeringValue(float steeringValue){

    this.steeringValue = steeringValue;


    public float getAccelerationValue(){

    return this.accelerationValue;


    public void setAccelerationValue(float accelerationValue){

    this.accelerationValue = accelerationValue;


    public float getMass(){

    return this.mass;


    public void setMass(float mass){

    this.mass = mass;


    public Node getNode(){

    return this.kartNode;



    Since I can’t use the SceneComposer I can’t look up the real axises of the wheels but I think the Blender importer just swaps the Y and Z direction ,doesn’t it?

    Please help! I’m actually doing this project just to get a bit involved in jME but now I’m already working about that for about 4 days and 3 nights and still nothing playable came out.



Did you find a solution yet?

Could you post a working JME3 project, that uses your class for testing?