2014-05-12 68 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

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