如何在可以打开和关闭的循环上添加 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环中打开(和关闭)PyQt5 应用程序,并让该循环多次运行

如何在 SpriteKit 中一次引用多个 SKNode?

跟踪某个类别的 SKNode

如何可以让ASP程序网站访问缓慢?

使用 swift 查找 SKNode 的相对 Y 位置

如何手动添加和删除Windows服务