我的奖金达到一定分数的方法有什么问题?
问题描述:
你好我是新来的所有这一切,只需要一点帮助。我有4枚奖牌,玩家在达到一定水平时应该看到。我注意到的问题是我可能达到20分并获得第一枚奖牌,但如果我达到medal_02的下一个分数,它仍会显示medal_01。我认为这可能是因为我告诉它如果(得分> = 20)显示medal_01,但如果它是下一个得分,则不说,因为它在技术上仍然大于20,它将显示medal_01。我的奖金达到一定分数的方法有什么问题?
谢谢
if(_score >= 2){
SKSpriteNode *medal = [SKSpriteNode spriteNodeWithImageNamed:@"medal_1"];
medal.position = CGPointMake(CGRectGetMaxX(self.frame)*1/4 + 23, CGRectGetMidY(self.frame) + 23);
[gameOver addChild:medal];
}else if(_score >= 4){
SKSpriteNode *medal = [SKSpriteNode spriteNodeWithImageNamed:@"medal_2"];
medal.position = CGPointMake(CGRectGetMaxX(self.frame)*1/4 + 23, CGRectGetMidY(self.frame) + 23);
[gameOver addChild:medal];
}else if(_score >= 30){
SKSpriteNode *medal = [SKSpriteNode spriteNodeWithImageNamed:@"medal_3"];
medal.position = CGPointMake(CGRectGetMaxX(self.frame)*1/4 + 23, CGRectGetMidY(self.frame) + 23);
[gameOver addChild:medal];
}else if(_score >= 50){
SKSpriteNode *medal = [SKSpriteNode spriteNodeWithImageNamed:@"medal_4"];
medal.position = CGPointMake(CGRectGetMaxX(self.frame)*1/4 + 23, CGRectGetMidY(self.frame) + 23);
[gameOver addChild:medal];
}
答
你应该扭转你if
S的顺序;你的第一枚奖牌对于第一枚奖牌将是真实的,但在此之后保持不变,以防其他奖牌的任何if
得到测试。
答
首先你可以制作出创造奖牌的方法。
- (void)setMedalWithName:(NSString *)medalName
{
SKSpriteNode *medal = [SKSpriteNode spriteNodeWithImageNamed:medalName];
medal.position = CGPointMake(CGRectGetMaxX(self.frame)*1/4 + 23, CGRectGetMidY(self.frame) + 23);
[gameOver addChild:medal];
}
之后我不知道你为什么检查score> =,如果用户可以达到任何级别,那么你不需要检查。你应该检查当前分数是否是某个数字。如果有情况下,用户可以跳过分数数量,比需要检查
if (_score >= 2 && _score < 4)
{
[self setMedalWithName:"medal_1"];
}
else if (_score >= 4 && _score < 10)
{
[self setMedalWithName:"medal_2"];
}
,但你也可以使用这个伪代码:
/// method for calling
if (_score == 50)
{
[self setMedalWithName:"medal_4"];
}
else if(_score == 25)
{
///etc
}
'gameOver'可能是本地的原始方法。返回勋章并让调用者执行'addChild:'可能会更好 – 2014-12-05 20:00:10