我想测试玩家的身体何时移动到屏幕上的某个点,并在他们这样做时调用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]];
}
在sprite-kit代码中,检查用户在屏幕上的位置/何时处于0状态的最佳位置在哪里?
它准确地测试了何时用帧更新,但添加了太多。
我也尝试使用&#34; performSelector&#34;在didMoveToView方法内部调用但是没有工作..
(代码:
-(void)didMoveToView:(SKView *)view {
[self performSelector:@selector(checkNow) withObject:nil afterDelay:1.0];
}
)
那我该怎么做呢?
答案 0 :(得分:2)
IMO,-(void)update:(CFTimeInterval)currentTime
是进行检查的好地方。但是,您的节点游戏正在多次创建,因为在outOfMoves
方法仍在运行时,检查会重复多次。
我建议您添加BOOL
变量,该变量最初为NO
,并在调用YES
方法时更改为outOfMoves
。然后返回update:
,再次调用NO
之前检查此变量是否为outOfMoves
。这样你就不会在它运行时继续调用方法。此外,您可以在方法完成后再将此变量设置回NO
,然后再次准备就绪。