swift - Swift SpriteKit,不能多次发射子弹
问题描述
我正在制作一个小游戏,其中有一艘宇宙飞船,你可以发射子弹,当我运行程序并单击发射子弹时,它可以工作,但是当我再次单击时它不会发射。它给了我
Thread 1: signal SIGABRT
当我尝试第二次开火时。有人可以帮我吗?
这是代码:
import SpriteKit
import GameplayKit
import UIKit
class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "mySpaceship")
//let stars = SKSpriteNode(imageNamed: "stars")
let bullet = SKSpriteNode(imageNamed: "bullet")
override func didMove(to view: SKView) {
//print(frame.size.width)
//print(frame.size.height)
/*stars.position = CGPoint(x: self.size.width/2, y:self.size.height/2)
addChild(stars)*/
player.position = CGPoint(x:0, y:0)
player.zPosition = 2
self.addChild(player)
}
func fireBullet() {
bullet.position = player.position
bullet.zPosition = 1
self.addChild(bullet)
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?) {
print("Fired bullet")
fireBullet()
}
override func update(_ currentTime: TimeInterval) {
}
}
所有这些代码都在我的 GameScene.swift 文件中。谢谢!
更新:查看节点计数器后,我观察到如果我在前一个子弹被删除后发射子弹(使总节点数为 2),子弹会射得很好。但是,如果我在前一个子弹被删除之前射击子弹(这使得节点计数为 2),程序就会崩溃。反正有没有等到前一颗子弹被删除就再射一颗子弹?
解决方案
您只需要在fireBullet方法中初始化您的 Bullet 精灵。
func fireBullet() {
// make sure you initialize bullet here.
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.position = player.position
bullet.zPosition = 1
self.addChild(bullet)
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)
}
推荐阅读
- git - 如何在发送拉取请求之前同步我的分叉和合并
- kotlin - Kotlin/对任何 Kotlin 库的原生支持?
- java - 如何将几个 IF 转换为一个 LOOP
- sql - 从 UI 调用 SQL 存储过程
- python - 将元素附加到列表并从另一个列表中删除
- python - 使用正则表达式,获取字符后的字符串,特殊情况
- arrays - 数组 r 中的 24 个值的平均值
- javascript - 使用 ajax 调用中的 json 填充脚本后无法访问脚本中的数据变量
- javascript - React 中屏蔽输入的 onChange 问题
- android - AdapterView 不支持 addView(View) - LinearLayout 嵌套在 ListView 中