繁体   English   中英

在哪里测试这种情况?

[英]Where to test for this condition?

我想测试玩家的身体何时移动到屏幕上的某个点,并在他们这样做时调用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];
}

那我该怎么做呢?

IMO, -(void)update:(CFTimeInterval)currentTime是放置该检查的好地方。 但是,您的节点游戏正在多次创建,因为在outOfMoves方法仍在运行时,检查会重复多次。

我建议你添加一个最初为NOBOOL变量,并在outOfMoves方法时更改为YES 然后返回update:在再次调用outOfMoves之前检查此变量是否为NO 这样你就不会在它运行时继续调用方法。 此外,您可以在方法完成并再次准备好后将此变量设置为NO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM