如何使用SkSpriteNode控制scenekit角色移动

时间:2016-12-12 20:20:28

标签: ios swift scenekit

我刚刚完成了我的场景套件游戏,其中我有一个移动的角色,开始用单个磁带手势移动。我希望它按下按钮时移动所以我在skscene类创建播放/暂停按钮。我如何制作我的只有按下播放按钮时才会移动角色? 如此图片enter image description here 这是我的代码

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch in touches {
        let location = touch.location(in: self)
        let _node:SKNode = self.atPoint(location)
        if(_node.name == "Play Button"){
                        parentView?.startGame()

        }
            if self.pauseNode.contains(location) {
                if !self.isPaused {
                    self.pauseNode.texture = SKTexture(imageNamed: "Pause Button")

                }
                else {
                    self.pauseNode.texture = SKTexture(imageNamed: "Play Button")

                }

                self.isPaused = !self.isPaused



        }
    }

在LevelOneViewController viewDidLoad()

中移动角色的功能
func move (){
    Character.idle()
    let startTap = UITapGestureRecognizer(target: self, action: #selector(LevelOneViewController.handleStartTap(_:)))
    scnView.addGestureRecognizer(startTap)

    let stopTap = UITapGestureRecognizer(target: self, action: #selector(LevelOneViewController.handleStopTap(_:)))
    scnView.addGestureRecognizer(stopTap)
    stopTap.numberOfTapsRequired = 2
    }
    move()
}

1 个答案:

答案 0 :(得分:2)

您需要创建一个覆盖SKScene,其中SKSpriteNode代表您的播放按钮,并为您的节点添加一个手势识别器,然后更新您的角色。然后,将此控件场景设置为SCNView

的叠加层

一些示例伪代码,您需要填写详细信息:

class GameControlsScene:SKScene {

  var character:Character
  var playButton:SKSpriteNode
  var playButtonGestureRecognizer:UIGestureRecognizer

  override init(character:Character) {
    self.character = character
    super.init()
  }

  func didMove(to:SKView) {
    // add an SKSpriteNode for the play button
    self.playButton = SKSpriteNode(imageNamed:"playButton")
    self.playButton.position = CGPointMake(<<w>>, <<h>>) 
    self.playButtonGestureRecognizer = // add a UIGestureRecognizer with selector as handlePlayButtonTap 
    self.view.addGestureRecognizer(self.playButtonGestureRecognizer)
  }

  // gesture recognizer to handle play button tap
  func handlePlayButtonTap() {
    //in here move your character    
  }
}

现在您设置SCNView设置叠加层。

var controlScene:GameControlScene(<<character>>
scnView.overlaySKScene = controlScene

请注意,您还可以在Xcode(SKScene)文件中创建.sks并加载它而不是以编程方式创建一个,但是添加手势识别器的其余细节,将其连接到您在3D场景中的角色并将其设置为叠加层是相同的。

使用.sks文件this should help