如何在可以打开和关闭的循环上添加 SKnode
Posted
技术标签:
【中文标题】如何在可以打开和关闭的循环上添加 SKnode【英文标题】:how to add a SKnode on a loop that can be toggled on and off 【发布时间】:2016-04-29 01:03:30 【问题描述】:我正在创建一个游戏,但我的子弹生成方法与操纵杆相关联时不断收到此错误。我想在操纵杆处于活动状态时重复生成子弹节点。这是我如何创建触发方法
class GameScene: SKScene, SKPhysicsContactDelegate
let bullet1 = SKSpriteNode(imageNamed: "bullet.png")
override func didMoveToView(view: SKView)
if fireWeapon == true
NSTimer.scheduledTimerWithTimeInterval(0.25, target: self,
selector: Selector ("spawnBullet1"), userInfo: nil, repeats: true)
func spawnBullet1()
self.addChild(bullet1)
bullet1.position = CGPoint (x: hero.position.x , y:hero.position.y)
bullet1.xScale = 0.5
bullet1.yScale = 0.5
bullet1.physicsBody = SKPhysicsBody(rectangleOfSize: bullet1.size)
bullet1.physicsBody?.categoryBitMask = PhysicsCategory.bullet1
bullet1.physicsBody?.contactTestBitMask = PhysicsCategory.enemy1
bullet1.physicsBody?.affectedByGravity = false
bullet1.physicsBody?.dynamic = false
override func touchesBegan(touches: Set<UITouch>, withEvent
event:UIEvent?)
for touch in touches
let location = touch.locationInNode(self)
let node = nodeAtPoint(location)
if (CGRectContainsPoint(joystick.frame, location))
stickActive = true
if stickActive == true
fireWeapon = true
override func touchesEnded(touches: Set<UITouch>, withEvent event:
UIEvent?)
fireWeapon = false
第一个项目符号按计划启动并且效果很好,但是,每次第二个项目符号启动应用程序时,应用程序都会崩溃,并且我收到此错误“尝试添加已经有父节点的 SKNode”。谁能告诉我另一种方法
【问题讨论】:
【参考方案1】:您的问题与错误所说的完全一样,您需要先将子弹从其父级中删除,然后再重新添加,或者在spawnBullet
函数内将bullet1
设为本地属性,以便每次调用该函数创建一个新子弹并将其作为子项添加到场景中,而不是尝试重新添加相同的子弹。
【讨论】:
但是如果我想同时显示超过 1 个项目符号怎么办?如果我想要一个流而不是一次一个流怎么办 @abdou023 我上面所说的是关于您当前遇到的错误。首先,您需要解决它并确保生成子弹的代码是正确的,然后再继续下一步。 你认为锯子弹的正确方法是什么? @abdou023 你做的很好,在编程中有几种方法可以做同样的事情,只有你才能确定哪种方法最合适,别人很难告诉你怎么做您应该编写自己的代码,但如果您遇到任何问题或错误,我们会随时为您提供帮助。 好吧,我显然知道为什么会发生错误,我正在寻求一种不会导致错误/崩溃的替代解决方案@abdou023以上是关于如何在可以打开和关闭的循环上添加 SKnode的主要内容,如果未能解决你的问题,请参考以下文章