【问题标题】:In Sprite Kit, when I am spawning nodes, why do they all appear on the top right of the screen?在 Sprite Kit 中,当我生成节点时,为什么它们都出现在屏幕的右上角?
【发布时间】:2017-06-21 13:01:08
【问题描述】:

MainPlayer 是中心的主球,我希望蓝色敌方节点在每一侧随机生成,但它们都出现在右上角。我很确定这段代码是正确的,但我无法让它工作。看起来它们在正确的地方产卵,但由于某种原因它只是缩放到右上角。

func Enemies() {
        let xPos = randomBetweenNumbers(firstNum: 0, secondNum: frame.width )

        let Enemy = SKSpriteNode(imageNamed: "Ball")
        Enemy.zPosition =  -1.0
        Enemy.size = CGSize(width: 20.0, height: 20.0)

        Enemy.physicsBody?.categoryBitMask = PhysicsCategory.Enemy
        Enemy.physicsBody?.contactTestBitMask = PhysicsCategory.Smallball | PhysicsCategory.MainBall
        Enemy.physicsBody?.collisionBitMask = PhysicsCategory.Smallball | PhysicsCategory.MainBall

        let randomNumber = arc4random() % 4 + 1

        switch randomNumber {
        case 0:
            Enemy.position.x = 0
            var positionY = arc4random_uniform(UInt32(frame.size.height))
            Enemy.position.y = CGFloat(positionY)
            self.addChild(Enemy)
            break

        case 1:
            Enemy.position.y = 0
            var positionX = arc4random_uniform(UInt32(frame.size.width))
            Enemy.position.x = CGFloat(positionX)
            self.addChild(Enemy)
            break

        case 2:
            Enemy.position.y = frame.size.height
            var positionX = arc4random_uniform(UInt32(frame.size.width))
            Enemy.position.x = CGFloat(positionX)
            self.addChild(Enemy)
            break

        case 3:
            Enemy.position.x = frame.size.width
            var positionY = arc4random_uniform(UInt32(frame.size.height))
            Enemy.position.y = CGFloat(positionY)
            self.addChild(Enemy)
            break

        default:
            break
        }

        Enemy.position = CGPoint(x: CGFloat(xPos), y: self.frame.size.height / 2)
        Enemy.physicsBody = SKPhysicsBody(circleOfRadius: 7)
        Enemy.physicsBody?.affectedByGravity = false
        Enemy.physicsBody?.categoryBitMask = 0
        Enemy.physicsBody?.contactTestBitMask = 1
        addChild(Enemy)

        Enemy.run(SKAction.move(to: MainPlayer.position, duration: 3))
    }

这是我的代码的结果,显然,我只是让它生成而不是移动到球上,因为我想显示奇怪的生成位置。

【问题讨论】:

  • 你场景的ancorPoint很可能是0.5,0.5,也就是说0.0,0.0在场景的中心。因此,要在红球左侧生成节点,您应该在 -scene.size.width/2 之间生成节点(不是减号)。

标签: ios sprite-kit swift3


【解决方案1】:

试试这个:

let Enemy = SKSpriteNode(imageNamed: "Ball")
    Enemy.zPosition =  -1.0
    Enemy.size = CGSize(width: 20.0, height: 20.0)
    Enemy.physicsBody?.categoryBitMask = PhysicsCategory.Enemy
    Enemy.physicsBody?.contactTestBitMask = PhysicsCategory.Smallball | PhysicsCategory.MainBall
    Enemy.physicsBody?.collisionBitMask = PhysicsCategory.Smallball | PhysicsCategory.MainBall

    Enemy.physicsBody?.affectedByGravity = false
    Enemy.physicsBody?.isDynamic = true

Enemy.run(SKAction.move(to: MainPlayer.position, duration: 3))之外的break后删除代码 另外,尝试删除 arc4random 之后的 +1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多