coc*_*ner 1 iphone box2d cocos2d-iphone
我想移动屏幕周围屏幕上触摸的任何b2体.我听说过关于鼠标关节的一些事情..
我发现:http://iphonedev.net/2009/08/05/how-to-grab-a-sprite-with-cocos2d-and-box2d/
但是如果我只是将ccTouch方法复制到一个新项目中(当然也是标题中的变量),我只是给了我很多错误.例如world-> Query < - 没有找到成员
可能会有人制作一个tut /一个新项目并将其上传到此处.或者,还有更好的方法?
首先,您必须创建b2QueryCallback子类:
class QueryCallback : public b2QueryCallback
{
public:
QueryCallback(const b2Vec2& point)
{
m_point = point;
m_object = nil;
}
bool ReportFixture(b2Fixture* fixture)
{
if (fixture->IsSensor()) return true; //ignore sensors
bool inside = fixture->TestPoint(m_point);
if (inside)
{
// We are done, terminate the query.
m_object = fixture->GetBody();
return false;
}
// Continue the query.
return true;
}
b2Vec2 m_point;
b2Body* m_object;
};
Run Code Online (Sandbox Code Playgroud)
然后在你的touchBegan方法:
b2Vec2 pos = yourTouchPos;
// Make a small box.
b2AABB aabb;
b2Vec2 d;
d.Set(0.001f, 0.001f);
aabb.lowerBound = pos - d;
aabb.upperBound = pos + d;
// Query the world for overlapping shapes.
QueryCallback callback(pos);
world_->QueryAABB(&callback, aabb);
b2Body *body = callback.m_object;
if (body)
{
//pick the body
}
Run Code Online (Sandbox Code Playgroud)
我有两种方法可以控制拾取的身体.第一个,你注意到 - 创建一个mouseJoint,第二个是让你的身体运动并控制它的速度(不是位置! - 它会在碰撞时提供非物理行为,因为速度将为零).在第一种情况下,如果您将移动物体非常快,移动时会有一些延迟.我自己没有尝试第二种方式,因为在这种情况下,身体不会与其他运动和静态物体发生碰撞.
此外,您可能希望在移动时锁定身体的旋转.