我创建了一款游戏,允许用户点按屏幕并创建盒子精灵。精灵只是一个简单的盒子图像,然后我为精灵创建了一个物理体。
在我的更新方法中,我不断检查所有这些块精灵,看它们是否正在休息。如果他们不休息,我希望盒子图像是某个文件。如果他们正在休息,我希望盒子图像是一个不同的图像文件。出于某种原因,当精灵没有休息时,精灵会变成我想要的图像,但它们在休息时它们永远不会变成我想要的图像。
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。为什么是这样?我已经启用了引力,因此块会先移动,但是当它们撞到地面后它们会停止移动,所以它们不应该被认为是静止的吗?
提前致谢。
答案 0 :(得分:0)
我还想了解更多关于如何使用isResting的信息。在CCPhysicsBody.cpp中,这是我们发现的:
bool PhysicsBody::isResting() const
{
return CP_PRIVATE(_info->getBody()->node).root != ((cpBody*)0);
}