![](/img/trans.png)
[英]Cocos2d - Is is possible to turn off collision for a Box2d b2Body with a b2FixtureDef?
[英]How to grab a b2Body and move it around the screen? (cocos2d,box2d,iphone)
我想在屏幕周围移动屏幕上触摸的任何b2body。 我听说过一些关于老鼠关节的事情。
我发现: 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;
};
然后在您的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
}
我看到有两种方法可以控制拾取的身体。 您会注意到,第一个是创建mouseJoint,第二个是使您的身体运动并控制它的速度(而不是位置!-碰撞时它将提供非物理行为,因为速度为零)。 在第一种情况下,如果您将快速移动对象,则移动时会有些延迟。 我自己没有尝试第二种方法,因为在这种情况下,该物体不会与其他运动和静态物体碰撞。
另外,您可能希望在移动时锁定身体的旋转。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.