Полагаю, в вашей задаче будут отрицательные числа в проверках неравенства.Например, при падении, я думаю, vspeed
будет отрицательным.В зависимости от того, где вы установили источник своего ящика, это может означать, что условие
y + vspeed <= b.worldY + b.height
всегда истинно.
Помимо этого, добавляя расстояние к скорости, выприняли магическое измерение за единицу времени.Это делает ваш код хрупким, потому что если вы измените это магическое число, то ваши уравнения будут неверными.
Попробуйте,
y + vspeed*unit_time <= b.worldY + b.height
Если вы хотите обрабатывать единицы во время компиляции (а не платить за это умножение), тогда используйте boost.units
.
Дополнительно
x + hspeed > b.worldX+b.width + hspeed-2
можно упростить до
x > b.worldX+b.width-2
И значение этого магического числа 2 можно догадаться.(почему, например, у вас есть
//Check if we are on the sides
if(y + vspeed <= b.worldY+b.height)
, но есть -2
in
//Check if we are on the top or the bottom
if( x + hspeed <= b.worldX+b.width-2)
)