【问题标题】:how to repetitively spawn a SKnode while a button is active如何在按钮处于活动状态时重复生成 SKnode
【发布时间】:2016-04-27 01:29:20
【问题描述】:

我正在创建一个游戏,我正在尝试创建一种射击方法。我让子弹在枪上产生并朝着操纵杆的方向移动。这就是我如何用枪以一致的速度(射速)产生子弹并朝着操纵杆的方向移动。

 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

            }

此方法仅启动第一个项目符号,然后在启动第二个项目符号之前应用程序崩溃。子弹运动的一切都是完美的,只是产生一串子弹进行射击。我想不出另一种方法来创造火速。

【问题讨论】:

  • 崩溃时收到的错误信息是什么?
  • 另外,bullet1 变量是什么?
  • 它说,类似。错误崩溃,尝试添加已经有父节点的 SkSpritenode”,这通常是当您调用相同的 self.addchild 两次 @mate Hegedus 时会发生的情况

标签: swift sprite-kit touch game-physics


【解决方案1】:

当你调用self.addChild(bullet1)时,你总是试图添加同一个孩子

您需要在spawnBullet1 函数中每次都创建一个新实例,并将该对象添加为子对象。

【讨论】:

  • 你能说得更具体点吗?你能给我举个例子吗? @mate Hegedus
  • 按钮 1 是什么意思?基本上我有两个布尔值武器火和棍子活跃。一旦您触摸操纵杆,坚持 vie 就会成为现实。一旦激活棒是真的武器火=真在我的覆盖视图中启动一个NStimer确实开始方法循环我的子弹产卵方法spawnBullet1()@mate Hegedus
  • @gkolman 在 spawnBullet1() 函数中有一个名为 bullet1 的变量。您在 self.addChild(bullet1) 中使用它,向我展示这个 bullet1 是如何创建的。因为你需要在这个函数中创建一个新的实例。你不能使用同一个。因为本质上你正在做的是你试图一遍又一遍地添加相同的项目符号。
  • 我提供的代码就是我所拥有的,我猜我哪里出错了哈哈。您能否为我提供一个创建项目符号 1 而不是重复添加项目符号的实例示例? @Mate Hegedus
  • 我也尝试了一种运行块方法,但该方法不起作用并导致相同的错误@MateHegedus
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多