更新游戏分数时出错
Error in updating the score in a game
我在游戏中更新分数时遇到问题我不知道是什么问题但是当我射击一些东西时分数应该增加 1 但在我的代码中有时它增加 2 或 3 有时 1 它不是常数我不知道为什么会发生这里是我使用的代码
@interface GameScene () {
SKLabelNode* _scoreLabelNode;
NSInteger _score;
}
-(void)didMoveToView:(SKView *)view {
_score = 0;
_scoreLabelNode = [SKLabelNode labelNodeWithFontNamed:@"Silom Regular"];
_scoreLabelNode.fontSize = 50;
_scoreLabelNode.position = CGPointMake(self.size.width - 335 , self.size.height - 60);
_scoreLabelNode.zPosition = 100;
[self addChild:_scoreLabelNode];
_scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
}
if (contact.bodyB.categoryBitMask == ObjectCategory) {
_score++;
_scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
}
此委托几乎没有类似问题,看看这是否可以解决您的问题:
SpriteKit: didBeginContact being called non-stop on iPad
Why are didBeginContact called multiple times?
didBeginContact is being called multiple times for the same SKPhysicsBody
即使不能解决您的问题,您也可以使用标志变量来处理一次分数更新。例如,
bool hasScoreUpdated;
- (void)didBeginContact:(SKPhysicsContact * _Nonnull)contact
{
if(!hasScoreUpdated)
{
_score++;
hasScoreUpdated = true;
}
// your rest of the logic
}
- (void)didEndContact:(SKPhysicsContact * _Nonnull)contact
{
hasScoreUpdated = false;
}
编辑:
根据您上面的评论:
i put "NSLog (@"%d", _score )" after "_score++" it increment as should
like 10 11 12 .. etc but the score jumped from 10 to 12
这可能是由于调用相应事件非常频繁并且 UI 元素更新非常快。
我在游戏中更新分数时遇到问题我不知道是什么问题但是当我射击一些东西时分数应该增加 1 但在我的代码中有时它增加 2 或 3 有时 1 它不是常数我不知道为什么会发生这里是我使用的代码
@interface GameScene () {
SKLabelNode* _scoreLabelNode;
NSInteger _score;
}
-(void)didMoveToView:(SKView *)view {
_score = 0;
_scoreLabelNode = [SKLabelNode labelNodeWithFontNamed:@"Silom Regular"];
_scoreLabelNode.fontSize = 50;
_scoreLabelNode.position = CGPointMake(self.size.width - 335 , self.size.height - 60);
_scoreLabelNode.zPosition = 100;
[self addChild:_scoreLabelNode];
_scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
}
if (contact.bodyB.categoryBitMask == ObjectCategory) {
_score++;
_scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
}
此委托几乎没有类似问题,看看这是否可以解决您的问题:
SpriteKit: didBeginContact being called non-stop on iPad
Why are didBeginContact called multiple times?
didBeginContact is being called multiple times for the same SKPhysicsBody
即使不能解决您的问题,您也可以使用标志变量来处理一次分数更新。例如,
bool hasScoreUpdated;
- (void)didBeginContact:(SKPhysicsContact * _Nonnull)contact
{
if(!hasScoreUpdated)
{
_score++;
hasScoreUpdated = true;
}
// your rest of the logic
}
- (void)didEndContact:(SKPhysicsContact * _Nonnull)contact
{
hasScoreUpdated = false;
}
编辑:
根据您上面的评论:
i put "NSLog (@"%d", _score )" after "_score++" it increment as should like 10 11 12 .. etc but the score jumped from 10 to 12
这可能是由于调用相应事件非常频繁并且 UI 元素更新非常快。