【问题标题】:Attemped to add a SKNode which already has a parent swift尝试添加一个已经有父 swift 的 SKNode
【发布时间】:2016-04-27 23:19:33
【问题描述】:

我正在创建一个游戏,但我的子弹生成方法与操纵杆相关联时不断收到此错误。我想在操纵杆处于活动状态时重复生成节点这是我创建触发方法的方式

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
}

第一个项目符号按计划启动并且效果很好但是,每次第二个项目符号启动应用程序时都会崩溃并且我收到错误消息。有人可以告诉我另一种创建射速的方法

【问题讨论】:

  • 您需要在发射下一个子弹之前移除子弹1,或者每次都创建新子弹。
  • 告诉我们变量 bullet1 的创建位置
  • 你说创建@MateHegedus是什么意思
  • 变量bullet1在哪里声明??
  • 在 NSTimer 方法中@mateHegedus 我也尝试了一个不起作用的运行块方法

标签: swift sprite-kit game-physics skspritenode


【解决方案1】:

您需要 self.addChild(SKSpriteNode(imageNamed: "bullet.png")) 之类的东西,而不是 self.addChild(bullet1)

这是因为您需要在每次射击时创建一个新子弹,您不希望每次都移动同一个子弹。

【讨论】:

  • 所以你说我需要创建一个名为 createbullet () 的单独方法,它添加孩子,然后在我的 spawnBullet1 () 方法 @mateHegedus 中调用该方法
  • @gkolman 不,你需要 self.addChild(createBullet()) 之类的东西
  • createBullet() 是什么意思?为什么变量会包含输入参数,是变量还是方法?
  • 所以你想让我创建一个带有 self.addchild(bullet1) 的单独函数,然后在我的 spawnbullet1() 方法中调用该方法? @MateHegedus
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多