2014-05-12 72 views
0

我想測試玩家的身體何時移動過屏幕上的某個點,並在遊戲結束時調用gameOver節點。在哪裏測試這種情況?

我試着把它放在觸摸開始的方法,但隨後每次用戶觸摸後,它會繼續添加gameOver節點。

我也試過把它放在-(void)update:(CFTimeInterval)currentTime方法中,但是它在每一幀都添加了一個gameOver節點。

這是當用戶離開的舉動,測試代碼/穿過屏幕上的某個點:

//Check to see if moves are at 0. 
if (movesRemaining < 0) { 
    movesRemaining = 0; 
} 

if (_fish.position.y < CGRectGetMidY(self.frame)-160) { 
    movesRemaining = 0; 
} 

if (movesRemaining == 0) { 
    [self runAction:[SKAction sequence:@[ 
             [SKAction waitForDuration:0.5], 
             [SKAction runBlock:^{ 
     [self outOfMoves]; 

    }], 
             ]]]; 
} 

調用該:

-(void)outOfMoves { 

    SKShapeNode *gameOverNode = [SKShapeNode node]; 
    [gameOverNode setPath:CGPathCreateWithRoundedRect(CGRectMake(-140, -125, 280, 250), 10, 10, nil)]; 
    gameOverNode.strokeColor = gameOverNode.fillColor = [UIColor colorWithRed:192/255. green:47/255. blue:47/255. alpha:1.0]; 
    gameOverNode.position = CGPointMake(CGRectGetMidX(self.frame), -150); 

    SKLabelNode *outOfMoves = [SKLabelNode labelNodeWithFontNamed:@"DIN Condensed"]; 
    outOfMoves.position = CGPointMake(0,80); 
    outOfMoves.fontSize = 40; 
    outOfMoves.text = @"OUT OF MOVES"; 

    SKLabelNode *reTry = [SKLabelNode labelNodeWithFontNamed:@"DIN Condensed"]; 
    reTry.position = CGPointMake(0, 30); 
    reTry.fontSize = 40; 
    reTry.fontColor = [UIColor colorWithRed:255/255. green:156/255. blue:0/255. alpha:1.0]; 
    reTry.name = @"reTry"; 
    reTry.text = @"TRY AGAIN"; 

    [gameOverNode addChild:outOfMoves]; 
    [gameOverNode addChild:reTry]; 
    [self addChild:gameOverNode]; 

    [gameOverNode runAction:[SKAction moveToY:CGRectGetMidY(self.frame)+40 duration:0.5]]; 

} 

哪裏是最好的地方將檢查屏幕上用戶所處位置/何時處於0的條件置於sprite-kit代碼中?

它準確地測試了它何時被幀更新,但增加了太多。

我也使用didMoveToView法內 「performSelector」 呼叫嘗試,但沒有工作,要麼..

(代碼:

-(void)didMoveToView:(SKView *)view { 
    [self performSelector:@selector(checkNow) withObject:nil afterDelay:1.0]; 
} 

所以,我該怎麼辦這個?

回答

2

IMO,-(void)update:(CFTimeInterval)currentTime是放置該檢查的好地方。但是,由於在方法仍在運行時檢查重複多次,因此您的遊戲在節點上多次創建。

我建議你在調用outOfMoves方法時添加一個BOOL變量,該變量最初爲NO,並更改爲YES。然後回到update:,在再次調用outOfMoves之前檢查此變量是否爲NO。這樣你就不會在運行時調用這個方法。另外,當您的方法完成並且您再次準備好時,您可以將此變量設置回NO

+0

感謝愚蠢的我,工作得很好。 :) –