出于某种原因,在发生碰撞后,我的游戏中的分数上升了4,当我只使用score++
看我的情况时,它应该上升1:
- (void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (collision == (playerCategory | gainCategory)) {
score++;
scorelabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)score];
[contact.bodyB.node removeFromParent];
}
}
它之前正在运作,但刚刚开始这样做,我不知道为什么。导致分数上升四而不是一分的原因是什么?我可以根据要求提供更多代码。
答案 0 :(得分:0)
您的方法似乎可能被多次调用。在方法中设置断点或NSLog调用以查看它被调用的次数。或者您的得分参数可能会在代码中的其他位置更新。
答案 1 :(得分:0)
赔率是,didBeginContact确实被调用了4次(如前所述,你应该调试以确认这一点)。这通常是由两个物体相互“放牧”引起的。一种解决方案是在与身体第一次碰撞后使用一种“超时”。您还应该查看您的归还价值。还有一个小小的注释,突然发生的原因是帧率,特别是如果你使用帧率独立的运动
答案 2 :(得分:0)
NSInteger
是原子类型,不是对象类型。你已经声明了一个指向它的指针。递增指针时,它会上升sizeof(type)
。您必须在32位计算机上进行测试。
建议:删除星号,以免声明指针。