繁体   English   中英

在Sprite Kit中,当我生成节点时,为什么它们都出现在屏幕的右上方?

[英]In Sprite Kit, when I am spawning nodes, why do they all appear on the top right of the screen?

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))
    }

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

在此处输入图片说明

尝试这个:

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))还尝试在arc4random之后删除+1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM