如何使用 SkSpriteNode 控制 scenekit 角色移动
How to control scenekit character movement with SkSpriteNode
我刚刚完成了我的 scenekit 游戏,其中我有一个移动的角色,它开始用单个磁带移动 gesture.I 希望它在按下按钮时移动,所以我在 skscene 中创建了 play/pause 按钮class.How 我只在按下播放按钮时让我的角色移动?
如这张图
这是我的代码
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()
}
您需要创建一个叠加层 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。
我刚刚完成了我的 scenekit 游戏,其中我有一个移动的角色,它开始用单个磁带移动 gesture.I 希望它在按下按钮时移动,所以我在 skscene 中创建了 play/pause 按钮class.How 我只在按下播放按钮时让我的角色移动?
如这张图
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()
}
您需要创建一个叠加层 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。