Итак, я пытаюсь создать объект Human, связанный с SFML-спрайтом, а также тело и прибор Box2D. Я получаю эту ошибку, однако:
Assertion failed: area > 1.19209289550781250000e-7F, file ...b2PolygonShape.cpp, line 352
Поэтому я быстро покопался и обнаружил, что моя проблема заключается в том, что я делаю неправильные вершины. Но я не понимаю, как это возможно, если я использую Shape.SetAsBox()
функция …
Вот мой код:
#include "../../include/entity/Human.hpp"
Human::Human(unsigned int id, b2World& world, sf::Vector2f pos, sf::Texture* texture)
: AnimatedEntity(id, world, pos, sf::Vector2i(32, 32), texture)
{
b2PolygonShape shape;
shape.SetAsBox((32/2)/SCALE, (32/2)/SCALE); // Set the size; Box2D takes the half-width/height as params, and then scale.
b2FixtureDef fixtureDef;
fixtureDef.density = .8f;
fixtureDef.friction = .4f;
fixtureDef.restitution = .2f;
fixtureDef.shape = &shape;
e_body->CreateFixture(&fixtureDef); // Assuming: shape and density are set
}
FTR, SCALE
это static const int
со значением 30
(30px / 1м). В чем дело?
Я думаю, что означает Биллц:
(32/2) = 16
16 / 30 = 0
Вам просто нужно использовать float для SCALE вместо int …
Других решений пока нет …