ios - 触摸时重定向 SKNode SkAction 方向

标签 ios swift sprite-kit swift2

当玩家触摸时,下面的代码假设将节点移动到 MaxX。一旦到达该点,就会将节点的移动重定向到 MinX ,反之亦然。

就目前情况而言,我只能将玩家向一个方向移动,并且它会忽略 movePlayer() 逻辑。

行动声明

 var moveRightTest:Bool = true;
 var moveLeftTest:Bool = false;

 let moveRight = SKAction.moveByX(1000, y: 0, duration: 2);
 let moveLeft = SKAction.moveByX(-1000, y: 0, duration: 2);

游戏场景内部:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    movePlayer();
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    stopPlayer();
}

func movePlayer() {
    if(moveRightTest == true) {
        if(player.position.x <= CGRectGetMaxX(self.frame)) {
            player.runAction(moveRight);
        } else  {
            moveRightTest = false;
            moveLeftTest = true;
        }
    }

    else if(moveLeftTest == true) {
        if(player.position.x >= CGRectGetMinX(self.frame)) {
            player.runAction(moveLeft);
        } else {
            moveLeftTest = false;
            moveRightTest = true;
        }
    }
}

func stopPlayer() {
    player.removeAllActions();
}

注意:我用整数/ float 替换了一些变量,以从代码中删除计算以便呈现。与该问题无关。我也刚刚学习 Swift。

最佳答案

现在,您的函数 movePlayer 在您调用它时仅执行一次,因此播放器会到达右边缘并停止。您需要在每次运行后重复以下步骤。为此,您可以将 runActioncompletion 一起使用,如下所示:

isRight: Bool = true

let moveRight = SKAction.moveToX(CGRectGetMaxX(self.frame), duration: 2)
let moveLeft = SKAction.moveToX(CGRectGetMinX(self.frame), duration: 2)

func movePlayer() {
    if isRight {
        player.runAction(moveRight, completion: { () -> Void in
            isRight = false
            self.movePlayer()
        })
    } else {
        player.runAction(moveLeft, completion: { () -> Void in
            isRight = true
            self.movePlayer()
        })
    }
}

关于ios - 触摸时重定向 SKNode SkAction 方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811098/

相关文章:

ios - 在 SKSpriteNode 上叠加两个纹理

ios - iOS-以编程方式取消所有声音/音乐?

javascript - ios - 如何在 Web View 中使用 javascript 打开快速 View ?

ios - 动态改变API数据获取结构

objective-c - 将 DBAccess 转换为 swift

ios - 检索子项的子值

swift - 连续触摸/移动 Swift & SpriteKit

objective-c - 在另一个 xib 中从 xib 加载自定义 View 时遇到问题

ios - 应用上传错误 : "The value for key CFBundleVersion must be a period-separated list of non-negative integers"

Swift 3 - 表达式太复杂,无法在合理的时间内解决;考虑将表达式分解为不同的子表达式