Swift: SKAction 在触摸时不起作用
Swift: SKAction not working on touch
我一直在努力跟进 swift 教程,但我在尝试跟进的每个教程中都遇到了一些非常令人沮丧的事情,每当使用 SKAction 时,我都无法跟进任何教程,因为我的程序永远不会工作。多个程序都发生过这种情况,我永远无法弄清楚。
程序代码如下:
import SpriteKit
import GameplayKit
class GameScene: SKScene{
let player = SKSpriteNode(imageNamed: "playerShip")
override func didMove(to view: SKView) {
let background = SKSpriteNode(imageNamed: "background")
background.size = self.size
background.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
background.zPosition = -1
self.addChild(background)
player.setScale(1)
player.position = CGPoint(x: self.size.width / 2, y: self.size.height * 0.2)
player.zPosition = 2
self.addChild(player)
}
func fireBullet(){
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.setScale(1)
bullet.zPosition = 1
bullet.position = player.position
let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1)
let deleteBullet = SKAction.removeFromParent()
let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
bullet.run(bulletSequence)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
fireBullet()
}
}
每当我构建和 运行 模拟器中的程序时,一切都很好并且构建成功。然而,每当我点击什么都没有发生时,每次我尝试使用 SKAction 做任何事情时都会发生这种情况。值得一提的是,每次单击时,屏幕右下角的 FPS 都会发生变化,但没有其他任何反应,节点数保持不变,屏幕保持不变,但子弹未发射。
这是我尝试遵循的教程:https://www.youtube.com/watch?v=mvlwZs2ehLU
我注意到您在实例化后实际上并没有将 bullet
精灵添加到您的场景中。确保添加 addChild(bullet)
。我建议实施这样的事情:
func fireBullet() {
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.setScale(1)
bullet.zPosition = 1
bullet.position = player.position
addChild(bullet)
let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1.0)
let deleteBullet = SKAction.removeFromParent()
let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
bullet.run(bulletSequence)
}
我一直在努力跟进 swift 教程,但我在尝试跟进的每个教程中都遇到了一些非常令人沮丧的事情,每当使用 SKAction 时,我都无法跟进任何教程,因为我的程序永远不会工作。多个程序都发生过这种情况,我永远无法弄清楚。
程序代码如下:
import SpriteKit
import GameplayKit
class GameScene: SKScene{
let player = SKSpriteNode(imageNamed: "playerShip")
override func didMove(to view: SKView) {
let background = SKSpriteNode(imageNamed: "background")
background.size = self.size
background.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
background.zPosition = -1
self.addChild(background)
player.setScale(1)
player.position = CGPoint(x: self.size.width / 2, y: self.size.height * 0.2)
player.zPosition = 2
self.addChild(player)
}
func fireBullet(){
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.setScale(1)
bullet.zPosition = 1
bullet.position = player.position
let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1)
let deleteBullet = SKAction.removeFromParent()
let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
bullet.run(bulletSequence)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
fireBullet()
}
}
每当我构建和 运行 模拟器中的程序时,一切都很好并且构建成功。然而,每当我点击什么都没有发生时,每次我尝试使用 SKAction 做任何事情时都会发生这种情况。值得一提的是,每次单击时,屏幕右下角的 FPS 都会发生变化,但没有其他任何反应,节点数保持不变,屏幕保持不变,但子弹未发射。
这是我尝试遵循的教程:https://www.youtube.com/watch?v=mvlwZs2ehLU
我注意到您在实例化后实际上并没有将 bullet
精灵添加到您的场景中。确保添加 addChild(bullet)
。我建议实施这样的事情:
func fireBullet() {
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.setScale(1)
bullet.zPosition = 1
bullet.position = player.position
addChild(bullet)
let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1.0)
let deleteBullet = SKAction.removeFromParent()
let bulletSequence = SKAction.sequence([moveBullet, deleteBullet])
bullet.run(bulletSequence)
}