Пишу взаимодействие персонажа и мяча в игре (волейбол), то есть их столкновение. При выполнении кода появляется ошибка. Буду рад, если кто поможет решить проблему.
Ошибка:
Assertion failed: fixture->m_body == this, file d:\c++\box2d_v2.3.0\box2d\box2d\dynamics\b2body.cpp, line 222
Код создания мяча:
body_def.position.Set(10, 0); b2CircleShape ball_shape; ball_shape.m_radius = 32 / SCALE; b2Body* ball = World.CreateBody( &body_def); b2FixtureDef ball_fixture; ball_fixture.shape = &ball_shape; ball_fixture.filter.categoryBits = 0x2; ball_fixture.filter.maskBits = 0x4; ball_fixture.restitution = 0.75; ball_fixture.density = 0.5; b2Fixture* fixture = ball->CreateFixture( &ball_fixture); const char* ball_name[] = { "ball" }; ball->SetUserData( ball_name);
Условие нажатия клавиши:
if (Keyboard::isKeyPressed( Keyboard::Q)) { ball->DestroyFixture( fixture); // Creating CircleShape object b2CircleShape ball_shape; ball_shape.m_radius = 32 / SCALE; b2Body* ball = World.CreateBody( &body_def); b2FixtureDef ball_fixture; ball_fixture.shape = &ball_shape; ball_fixture.restitution = 0.75; ball_fixture.density = 0.5; ball_fixture.filter.categoryBits = 0x3; ball_fixture.filter.maskBits = 0x3; //b2Fixture* ball->CreateFixture(ball_fixture); b2Fixture* fixture = ball->CreateFixture( &ball_fixture); const char* ball_name[] = { "ball" }; ball->SetUserData( ball_name); position = ball->GetPosition( ); int a = position.y; position = body_1->GetPosition( ); int b = position.y; if ( a < b) { if ( is_contact) { std::cout << position.Length( ) << std::endl; float S = 35 - ball->GetPosition( ).Length( ); //расстояние от центра поля до мяча float h = 250 / SCALE; //высота сетки float t = h / 9.81; ball->SetLinearVelocity( b2Vec2( ( S / t) * 8, t * 32)); std::cout << S << " " << h << " " << t << " (" << ( S / t) << ", " << t * 2 << ")" << std::endl; } } }
в box2d ошибок нет (относящихся к твоему случаю). ошибки есть в твоём коде, который его использует. так как ошибки совершенно бессмысленные, я бы рекомендовал для начала попытаться понять, что ты написал.
Не правильно сформулировал, ясно, что в движке не будет ошибок. Код я свой понимаю. Я сначала создаю Fixture для моего Body, потом пытаюсь изменить путем удаления старого и созданием нового.
Видимо я его не понимаю на уровне компиляции, т.к. ошибка выдается при открытии в файла, путь к которому указан в ошибке.
Тема в архиве.