2015-11-11 110 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") 
}