Discuss any questions about BEPUphysics or problems encountered.
CrazyXBMax
Posts: 4 Joined: Mon Feb 13, 2012 5:45 pm
Post
by CrazyXBMax » Sat Sep 29, 2012 1:03 pm
Hi everyone,
I have a problem with the Vehicles in BepuPhysics. I'm using the Vehicle class from the demos but my vehicle is only driving backwards and not forward.
This is the code for taking input and applying it to the car. ForwardSpeed is 30 and BackwardSpeed -13.
Code: Select all
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_UP))
{
//Drive
//Vehicle.Wheels[1].DrivingMotor.MaximumForwardForce = 100000;
//Vehicle.Wheels[3].DrivingMotor.MaximumForwardForce = 100000;
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed;
}
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_DOWN))
{
//Reverse
//Vehicle.Wheels[1].DrivingMotor.MaximumBackwardForce = 100000;
//Vehicle.Wheels[3].DrivingMotor.MaximumBackwardForce = 100000;
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed;
}
else
{
//Idle
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0;
}
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_SPACE))
{
//Brake
foreach (Wheel wheel in Vehicle.Wheels)
{
wheel.Brake.IsBraking = true;
}
}
else
{
//Release brake
foreach (Wheel wheel in Vehicle.Wheels)
{
wheel.Brake.IsBraking = false;
}
}
The rest of the code including the steering is directly taken from the VehicleDemo code. Is there anything wrong with this code?
6thVenom
Posts: 12 Joined: Mon Sep 03, 2012 6:31 pm
Post
by 6thVenom » Sat Sep 29, 2012 2:02 pm
Code: Select all
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_UP))
{
//Drive
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed;
}
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_DOWN))
{
//Reverse
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed;
}
else
{
//Idle
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0;
}
With that, if you're not pressing KC_DOWN the last TargetSpeed set is 0, even if you're pressing KC_UP.
You should try:
Code: Select all
if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_DOWN))
{
//Reverse
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = BackwardSpeed;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = BackwardSpeed;
}
else if (keyboardInput.IsKeyDown(MOIS.KeyCode.KC_UP))
{
//Drive
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = ForwardSpeed;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = ForwardSpeed;
}
else
{
//Idle
Vehicle.Wheels[1].DrivingMotor.TargetSpeed = 0;
Vehicle.Wheels[3].DrivingMotor.TargetSpeed = 0;
}
So that KC_DOWN always prior on KC_UP (for braking), then only if none, TargetSpeed = 0.
CrazyXBMax
Posts: 4 Joined: Mon Feb 13, 2012 5:45 pm
Post
by CrazyXBMax » Sat Sep 29, 2012 6:15 pm
Thank you! I can't believe I didn't see that.