2014-07-23 45 views
0

出于某种原因,在碰撞发生之后,在我的比赛中得分上升4时,它应该只上浮了1看到,因为我如何使用score++得分++ 4增加分数,而不是由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

你是怎么定义'score'的? –

+0

得分由头文件中的@property(nonatomic)NSInteger *得分定义; – user3593148

+0

碰撞检测可以关闭多次,您可能想要在增加分数之前分开实体,或者在联系后单位不碰撞2秒钟的冷却时间。 – Stephan

回答

0

NSInteger是原子类型,而不是对象类型。你已经声明了一个指针。当你增加一个指针时,它会增加sizeof(type)。您必须在32位机器上进行测试。

建议然后:删除星号,以免声明指针。

0

看来您的方法可能会被多次调用。在方法中设置断点或NSLog调用以查看调用的次数。或者可能您的分数参数在代码中的其他地方更新。

+0

我做了NSLog和它唯一被调用一次。 – user3593148

+0

检查您的分数参数是否正在代码的另一部分中更新。 – mihai

+0

啊我看,你已经把count声明为一个指针。很高兴你解决它。 – mihai

0

可能性是,didBeginContact确实被调用了4次(正如前面提到的你应该调试以确认这一点)。这通常是由两个物体相互“放牧”引起的。一种解决方案是在与身体首次碰撞后使用一种“超时”。你也应该看看你的价值来恢复原状。而一个小纸条,这可能会突然发生的原因是帧率,尤其是如果您使用帧率无关运动

+0

当身体由多个形状组成时,也可能发生多个接触,或者凸形分解为多个凹形 – LearnCocos2D