我最近开始使用box2d, 目前我遇到了绘制box2d的问题。 现在,我的盒子只用边界线绘制。但我想在框存在的地方绘制纹理。
尽管如此,我不确定正确的方法是将纹理分配给box2d,还是使用Sprite在框上绘制纹理。
有没有办法为box2d指定纹理?或者在使用box2d时渲染纹理的其他方法?
答案 0 :(得分:0)
我使用的基本上有两种方法。
在GameManager / GameWorld类中实现每帧调用的update / tick方法。在调用world->Step(delta, 10, 10);
循环遍历世界上的所有实体并更新其Sprite位置之后。请注意,当您创建实体时,许多人将使用body.userData成员来存储指向“附加”到此主体的Sprite的指针。
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext())
{
if (b->GetUserData() != NULL) {
CCSprite *spriteData = (CCSprite *)b->GetUserData();
spriteData.position = ccp(b->GetPosition().x * PTM_RATIO,b->GetPosition().y * PTM_RATIO);
spriteData.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
}
假设您有一个名为player的对象。你可以在这个类中实现一个tick / update方法,用身体的位置来更新它自己的sprite ......比如:
[self setPosition:ccp(body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO)];
您需要有一个指向b2_body的指针,并将此实例添加到实现主更新/刻度/步骤的CCLayer中。
答案 1 :(得分:0)
你必须找到实际的身体姿势 例如,在render方法中,您可以实现以下内容来查找正文位置并为其附加纹理。
ballPosition = ballBody.getPosition();
并将位置应用于屏幕上绘制的纹理