【问题标题】:Frames border does not move框架边框不动
【发布时间】:2014-10-31 23:02:01
【问题描述】:

为了练习,我正在尝试构建一个简单的游戏,但无法弄清楚为什么框架的边框没有移动而其他一切都在移动。

当我到达最后一根柱子并向右移动一点时,游戏结束。这在某种程度上是因为当山羊和柱子移动时,框架边框不会移动。

我有 SKNode 的三层。一个叫_mainLayer,第二个叫_playerLayer,第三个叫_squareLayer。 _mainLayer 包含 _playerLayer 和 _squareLayer。

当我移动屏幕时,正在使用此代码:

-(void)moveScreen {
    _xMoved += 100;

    SKAction *move = [SKAction moveByX:-100 y:0 duration:0.5];
    [_squareLayer runAction:move];
    [_playerLayer runAction:move];
}

我尝试使用 [_mainLayer runAction:move] 而不是其他两个调用,但是游戏结束屏幕没有移动,直接添加到场景类(“self”)中。

_gameOverScreen = [[EndScene alloc] init];
_gameOverScreen.position = CGPointMake(self.size.width / 2, self.size.height / 2);
_gameOverScreen.gameOver.size = CGSizeMake(self.frame.size.width, _gameOverScreen.gameOver.size.height / 2);
[self addChild:_gameOverScreen];

游戏结束画面是我自己制作的一个 SKNode 类。

有人有什么建议吗?

【问题讨论】:

  • 需要发生什么才能导致游戏结束?
  • 当山羊(玩家)在屏幕任意一侧碰到屏幕边框时,游戏应该结束。问题是,如果我像第二张图片一样到达第二个第三个(最后一个)柱子,游戏就会结束。当击中一个新的柱子时,我在 x 轴上移动了 _playerLayer 和 _squareLayer -100,但不知何故,框架的边界不会移动太多,所以当击中第三个柱子时,游戏结束,如第二张图片所示。话虽如此,我想出了一个解决方案,我将在一秒钟内发布。

标签: objective-c xcode5 sprite-kit layer


【解决方案1】:

我找到了解决问题的方法。

-(void)didSimulatePhysics {
// If the goat didn't get on top of a platform
[_playerLayer enumerateChildNodesWithName:@"Goat" usingBlock:^(SKNode *node, BOOL *stop) {
    if (!CGRectContainsPoint(CGRectMake(_xMoved, 0, self.frame.size.width, self.frame.size.height), node.position)) {
        _gameOverScreen.numberScore = _score;
        [_gameOverScreen testNewScore:_score];

        [_scoreLabel removeFromParent];
        _gameOverScreen.hidden = NO;
        _gameOver = YES;
    }
}];

}

通过制作一个新的 CGRect 来模拟屏幕移动,我让它工作了。但是为什么这个(下面的代码)不起作用我不知道。

-(void)didSimulatePhysics {
// If the goat didn't get on top of a platform
[_playerLayer enumerateChildNodesWithName:@"Goat" usingBlock:^(SKNode *node, BOOL *stop) {
    if (!CGRectContainsPoint(self.frame, node.position)) {
        _gameOverScreen.numberScore = _score;
        [_gameOverScreen testNewScore:_score];

        [_scoreLabel removeFromParent];
        _gameOverScreen.hidden = NO;
        _gameOver = YES;
    }
}];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多