2015-11-11 112 views
0

这是我使用Sprite Kit,Swift在Xcode中编写的代码。我正在尝试制作像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 FUNC激活,但有一个小缺陷。当你触摸屏幕改变方向时,没有完整的反应。

你们会如何编码?

+0

欢迎堆栈溢出!你能否更详细地描述你的意思是“不是一个完整的反应”?它是不是移动,只是移动中途,不停止或其他? – Gliderman

回答

0

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

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

至于你的行动,你需要给他们打电话你的Sprite的实例。我从上面的例子中使用了相同的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)) 
} 
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点不断(比如从一个组合任务)时,那就是:

  • 创建起止点
  • 制作移动精灵单独行动,左,右
  • 做一个序列运行这两个动作接二连三
  • 重复那个动作永远
  • 运行与关键行动给你的SE LF一种方法来阻止一个动作

当你想停止动作,你应该做这样的事情:

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

      sprite.removeActionForKey("moving") 
}