如何让物体移动?

时间:2015-11-11 16:52:09

标签: ios swift sprite-kit

这是我在Xcode中使用Sprite Kit,Swift编写的代码。我试图制作像ComboQuest这样的游戏。游戏包括一个左右移动的移动栏,试图击中物体。我试图在这里重新创建左右移动是我的代码:

func rightSprite(){
    let actionR = SKAction.moveByX(0.001, y: 0,  duration: 0.01)
    Sprite.runAction(SKAction.repeatActionForever(actionR))

}

func leftSprite(){
    let actionR = SKAction.moveByX(-0.001, y: 0, duration: 0.01)
    Sprite.runAction(SKAction.repeatActionForever(actionR))

}

然后在TouchesBegan覆盖功能中激活这两个功能,但是存在一个小缺陷。当您触摸屏幕以改变方向时,没有完全反应。

你们会怎么编码呢?

2 个答案:

答案 0 :(得分:0)

首先,请确保您拥有SKSpriteNode的有效实例。查看更多代码以查看要创建要移动的条形精灵的位置会很有帮助。例如,下面我创建了一个红色矩形精灵。

let bar = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 50, height: 10))

就你的行为而言,你需要在你的精灵实例上调用它们。我使用了上面例子中的相同bar精灵。此外,由于您要将动作设置为永久重复,因此您需要删除该动作才能使其停止。您似乎希望该栏左右移动。您可以像我一样删除所有操作,也可以命名您的操作,然后删除某个操作。为简单起见,我刚刚删除了所有操作。

func rightSprite(){
    let actionR = SKAction.moveByX(0.001, y: 0,  duration: 0.01)
    bar.removeAllActions()
    bar.runAction(SKAction.repeatActionForever(actionR))
}

func leftSprite(){
    let actionL = SKAction.moveByX(-0.001, y: 0, duration: 0.01)
    bar.removeAllActions()
    bar.runAction(SKAction.repeatActionForever(actionL))
}

答案 1 :(得分:0)

看看这个:

override func didMoveToView(view: SKView) {


        let sprite = SKSpriteNode(color: UIColor.purpleColor(), size: CGSize(width: 20, height:50))

        var startPoint:CGPoint  = CGPoint(x: 100, y: CGRectGetMidY(frame))

        var endPoint:CGPoint  = CGPoint(x: 300, y: CGRectGetMidY(frame))

        let moveLeft = SKAction.moveTo(endPoint, duration:3)

        let moveRight = SKAction.moveTo(startPoint, duration:3)

        let sequence = SKAction.sequence([moveLeft,moveRight])


        sprite.position = startPoint

        addChild(sprite)

        sprite.runAction(SKAction.repeatActionForever(sequence), withKey:"moving")

    }

我假设您的场景和视图已初始化并且大小正确(例如,您执行了类似此scene.size = skView.bounds.size的操作),因此当您尝试此示例时,精灵将显示在屏幕上(而不是可能的屏幕外,因为你可能从.sks文件加载一个场景。)

IMO这是使用SKAction连续将精灵从A点移动到B点的自然方式(如从Combo Quest中移动),这是:

  • 创建起点和终点
  • 单独执行左右移动精灵的操作
  • 制作一个序列,一个接一个地运行这两个动作
  • 永远重复此动作
  • 使用密钥运行该操作,为自己提供一种停止操作的方法

当你想停止行动时,你应该这样做:

if(sprite.actionForKey("moving") != nil){

            sprite.removeActionForKey("moving")
}