我在cocos2dx和box2d
中有两种类型的位置有
CCSprite* parent = CCSprite::create("parent.png");
parent->setPosition(ccp(100, 100));
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(self.position.x / PTM_RATIO,self.position.y / PTM_RATIO);
这两个职位有什么区别
PTM_Ratio的值为32或40。
什么是PTM_RATIO及其值?
答案 0 :(得分:2)
在box2d中,您使用米作为长度值,在cocos2d-x中您使用像素或点。 PTM是像素到米。如果PTM RATIO为32,则表示cocos2d-x中的32个像素在box2d中为1米。
答案 1 :(得分:1)
这里有两个坐标系:
PTM比率是您用于在两个坐标系之间进行的像素/米的比例值。使用直线比例将两个坐标系的原点相互叠加。因此,屏幕上的位置只是box2d世界中位置的倍数。这意味着你不会看到一般具有负坐标的物体(除非它们的一部分精灵粘在屏幕的左边缘上)。
当您在Box2d世界和屏幕世界之间往返时,您可以使用PTM_RATIO将一个位置更改为另一个位置。
通常,您可以按如下方式进行设置:
例如:
for(all bodies)
{
Vec2 pos = body->GetPosition();
_sprite->setPosition(ccp(pos.x*PTM_RATIO,pos.y*PTM_RATIO));
}
当用户与屏幕交互时,如果要查找最近的身体等,则必须将触摸位置转换为世界位置(通过除以PTM_RATIO)。
我有一篇博文,更详细地讨论了这一点,并展示了如何构建“视口”。这允许您查看box2d世界的一小部分并在视图中移动,缩放其中的对象等。帖子(以及源代码和视频)位于here。
这有用吗?
答案 2 :(得分:0)
在box2d惯例中,PTM_RATIO是32