【问题标题】:pause/play in skscene issue在 skscene 问题中暂停/播放
【发布时间】:2014-04-06 22:09:18
【问题描述】:

我正在开发一个演示游戏,并在场景中实现了暂停播放功能。这两个功能都可以正常工作。暂停将停止所有动作,播放将恢复除一个动作之外的动作。以下是我如何在触摸开始时实现暂停/播放功能:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:_bgLayer];
    [self moveZombieToward:touchLocation];

    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    if (node == _pauseButton) {
        [_pauseButton setTexture:[SKTexture textureWithImageNamed:@"pausebutton"]];
        _pauseButtonPressed = YES;
        self.scene.view.paused = YES;
    }

    if (node == _playButton) {
        [_playButton setTexture:[SKTexture textureWithImageNamed:@"playButton"]];
        _playButtonPressed = YES;
        self.scene.view.paused = NO;
    }
}

我还在 update 方法中更新了时间,以便考虑当前时间并且暂停操作正常工作。

- (void)update:(NSTimeInterval)currentTime
{
    if (_lastUpdateTime) {
        _dt = currentTime - _lastUpdateTime;
    } else {
        _dt = 0;
    }
    _lastUpdateTime = currentTime;

    if (_pauseButtonPressed) {
        _lastUpdateTime = 0;
        return;
    }
}

这里是僵尸动作方法:

- (void)moveZombieToward:(CGPoint)location
{
    [self startZombieAnimation];
    _lastTouchLocation = location;
    CGPoint offset = CGPointSubtract(location, _zombie.position);

    CGPoint direction = CGPointNormalize(offset);
    _velocity = CGPointMultiplyScalar(direction, ZOMBIE_MOVE_POINTS_PER_SEC);


}

我使用这种方法的唯一问题是(正如我之前提到的)移动僵尸[self moveZombieToward:touchLocation]; 的调用在按下播放按钮后不起作用,所以在按下播放按钮后我无法移动角色更多的。其他动画效果很好,但角色不再通过触摸移动。有人可以帮助了解我做错了什么吗?

【问题讨论】:

    标签: ios sprite-kit skscene


    【解决方案1】:

    这是我想出的答案。我在这里提到它,以便其他人可以从中受益。我在上面的代码中所做的是触发暂停按钮并触发播放按钮,但是当另一个按钮处于活动状态时,我从未将暂停和播放按钮设置为 no。代码如下:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [touches anyObject];
        CGPoint touchLocation = [touch locationInNode:_bgLayer];
        [self moveZombieToward:touchLocation];
    
        CGPoint location = [touch locationInNode:self];
        SKNode *node = [self nodeAtPoint:location];
    
        if (node == _pauseButton) {
            [_pauseButton setTexture:[SKTexture textureWithImageNamed:@"pausebutton"]];
            _pauseButtonPressed = YES;
            _playButtonPressed = NO;
            self.scene.paused = YES;
        }
    
        if (node == _playButton) {
            [_playButton setTexture:[SKTexture textureWithImageNamed:@"playButton"]];
            _playButtonPressed = YES;
            _pauseButtonPressed = NO;
            self.scene.paused = NO;
        }
    }
    

    还有一个额外提示,我不得不将self.scene.view.paused = YES; 更改为self.scene.paused = YES;,因为我只需要暂停场景,所以当我设置_lastUpdateTime = 0; 时,它会停止时间并且玩家不会移动,而游戏暂停。是的,在 sprite kit 中又学到了一步。:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      相关资源
      最近更新 更多