这是我在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覆盖功能中激活这两个功能,但是存在一个小缺陷。当您触摸屏幕以改变方向时,没有完全反应。
你们会怎么编码呢?
答案 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")
}