物理身体在休息时改变它的形象

时间:2015-02-18 22:17:01

标签: cocos2d-x game-physics cocos2d-x-3.0

我创建了一款游戏,允许用户点按屏幕并创建盒子精灵。精灵只是一个简单的盒子图像,然后我为精灵创建了一个物理体。

在我的更新方法中,我不断检查所有这些块精灵,看它们是否正在休息。如果他们不休息,我希望盒子图像是某个文件。如果他们正在休息,我希望盒子图像是一个不同的图像文件。出于某种原因,当精灵没有休息时,精灵会变成我想要的图像,但它们在休息时它们永远不会变成我想要的图像。

for (int i = 0; i < blockVector.size(); i++)
{
    if (!blockVector.at(i)->getPhysicsBody()->isResting() && blockVector.at(i)->getPhysicsBody()->getTag() == 1)
    {
        blockVector.at(i)->setTexture("PTBlock2.png");
        blockVector.at(i)->getPhysicsBody()->setTag(2);
    }
    else if (blockVector.at(i)->getPhysicsBody()->isResting() && blockVector.at(i)->getPhysicsBody()->getTag() == 2)
    {
        blockVector.at(i)->setTexture("PTBlock.png");
        blockVector.at(i)->getPhysicsBody()->setTag(1);
    }
}

标记值1 = PTBlock.png,2 = PTBlock2.png。 我添加了标记,以便每次调用更新方法时块都不会将它们的图像设置为相同的内容。只有当他们改变为不同的图像时,他们才会改变他们的形象。

无论如何,我检查了图像永远不会变回PTBlock.png的原因是块继续为isResting()返回false。为什么是这样?我已经启用了引力,因此块会先移动,但是当它们撞到地面后它们会停止移动,所以它们不应该被认为是静止的吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我还想了解更多关于如何使用isResting的信息。在CCPhysicsBody.cpp中,这是我们发现的:

bool PhysicsBody::isResting() const
{
    return CP_PRIVATE(_info->getBody()->node).root != ((cpBody*)0);
}