我刚刚完成了我的场景套件游戏,其中我有一个移动的角色,开始用单个磁带手势移动。我希望它按下按钮时移动所以我在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()
}
答案 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。