2014-12-05 4 views
1

안녕하세요 저는이 모든 것을 처음 접했고 약간의 도움이 필요합니다. 플레이어가 특정 레벨에 도달 할 때 볼 수있는 4 개의 메달이 있습니다. 내가 알아챈 문제는 20 점을 받아 첫 메달을 얻을 수 있지만, 메달 _02의 다음 점수에 도달하면 메달 _01을 보여줍니다. 저는 그것이 (점수> = 20) 있다면 (점수> = 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]; 
} 

답변

4

당신은 당신의 if의의 순서를 반대로한다 감사; 첫 번째 메달은 첫 메달에 대해 사실이지만 그 이후에도 계속 유지되므로 다른 메달에 대한 테스트가 이루어지지 않습니다.

3

먼저 메달을 만드는 방법을 만들 수 있습니다.

- (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]; 
} 

나는 왜 점수> =인지 확인하지 못 했으므로 사용자가 어떤 수준에 도달 할 수 있는지 확인한 다음 확인하지 않아도됩니다. 현재 점수가 숫자인지 확인해야합니다. 경우가있는 경우, 해당 사용자는

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 
} 
+0

는'gameOver' 원래 방법 로컬 될 수 있습니다. 아마도 메달을 돌려주고 호출자가'addChild :'를 할 것입니다. –

관련 문제