Box2D-从身体中获取固定装置的宽度,或者我什至应该尝试
Box2d - Get width of fixture from a body or should I even try?
我已经阅读了一些有关此的线程,但是它们看起来并不清楚。因此,如何找到一个固定装置的宽度?我知道可以访问固定装置及其所有这些,但对最后一部分并不了解。尤其是,我不知道如何以最有效的方式执行此操作,如果您实际上最好将float变量作为身体的用户data进行。
谢谢,非常感谢!
您可以通过2种方法完成此任务:
1)将形状连接到固定装置,然后使用形状值。无需以这种方式访问宽度,因为您将是定义它的人。理想情况下的大小应该是您班上的成员。
例如:
struct Player
{
vec2 m_position;
vec2 m_size;
std::unique_ptr<b2Body> m_body;
Player( const vec2 &pos_ = {0.f,0.f},
const vec2 &size_ = {1.f,1.f} )
:
m_position(pos_),
m_size(size_),
m_body(nullptr)
{;}
};
// In your code...
std::unique_ptr<Player> m_player{ new Player({0.f,0.f},{3.f,2.f}) }; // make_unique if in C++14
b2World *m_world = new b2World(b2Vec2(0.f, -9.81f)); // use smart ptr here too..
b2BodyDef bodyDefinition;
b2PolygonShape bodyShape;
b2FixtureDef bodyFixture;
// PLAYER BODY DEFINITION
bodyDefinition.type = b2_dynamicBody;
// PLAYER SHAPE
bodyShape.SetAsBox(m_player->m_size.x, m_player->m_size.y);
// PLAYER FIXTURE
bodyFixture.shape = &bodyShape;
// PLAYER BIND TO THE WORLD
m_player->m_body.reset( m_world->CreateBody(&bodyDefinition) ); // or you can use the b2Body::CreateBody factory function. Then use b2Body::DestroyBody to delete the object.
m_player->m_body->SetActive(true);
m_player->m_body->CreateFixture(&bodyFixture);
从那时起,您可以使用类成员来访问位置和大小。如果我知道每个对象(播放器)应该在场景中,那就是我要使用的方法。
2)如果您有案例,但是在哪里不定义初始化时的大小,则需要在形状周围创建AABB,从那里,您可以从中计算出大小AABB的最小点和最大点。如果对象旋转,则需要计算obb。
例如:
m_player->m_body->SetTransform(m_player->m_position,0.f);
b2AABB aabb;
bodyShape.ComputeAABB(&aabb,m_player->m_body->GetTransform(),0);
Center = m_player->m_body->GetFixtureList()->GetAABB(0).GetCenter();
LowerBound = m_player->m_body->GetFixtureList()->GetAABB(0).lowerBound;
HigherBound = m_player->m_body->GetFixtureList()->GetAABB(0).lowerBound;
然后使用此信息计算宽度。
从Box2D文档(http://box2d.org/manual.pdf)中找到此信息
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Box2D-从身体中获取固定装置的宽度,或者我什至应该尝试
- 我可以在不声明变量类型的情况下获取输入,或者在 c++ 中为同一变量声明多个类型吗?
- 获取unordered_set中最右边的元素(或者反向打印内容)