【问题标题】:How to control scenekit character movement with SkSpriteNode如何使用 SkSpriteNode 控制场景包角色移动
【发布时间】:2017-04-27 19:01:26
【问题描述】:

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

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()
}

【问题讨论】:

    标签: ios swift scenekit


    【解决方案1】:

    您需要创建一个覆盖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 (.sks) 文件中创建一个 SKScene 并加载它,而不是通过编程方式创建一个,但其余的细节是添加一个手势识别器,将其连接到您的角色3D场景和设置叠加是一样的。

    使用.sks 文件,this should help。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-27
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多