射弹不是来自正确的位置

时间:2016-05-12 15:49:06

标签: ios swift sprite-kit

我试图让SKSpriteNode来自SKShapeNode。当下面的代码运行时,弹丸出现,但它们将来自屏幕上的不同点,而不是玩家位置。 这是我在我的播放器类中的拍摄功能。

func shoot() { 

            let newProjectile = Projectile()
            newProjectile.position = self.position

           self.addChild(newProjectile)
            let action = SKAction.moveTo(CGPointMake(
                600 * -cos(newProjectile.zRotation - 1.57079633) + newProjectile.position.x,
                600 * -sin(newProjectile.zRotation - 1.57079633) + newProjectile.position.y
            ), duration: 2.0)

            let actionMoveDone = SKAction.removeFromParent()
            newProjectile.runAction(SKAction.sequence([action, actionMoveDone]))
            }

这是我的弹丸类:

    class Projectile : SKSpriteNode {

        let Texture = SKTexture(imageNamed: "image.png")

        static var counter : Int = 0

        init(){
            //super.init()
            super.init(texture: Texture, color: UIColor.whiteColor(), size: CGSize(width: radius * 2, height: radius * 2))
            self.name   = "projectile-" + NSUUID().UUIDString
            self.physicsBody = SKPhysicsBody(circleOfRadius: radius)
            self.physicsBody?.categoryBitMask = GlobalConstants.Category.projectile
            self.physicsBody?.collisionBitMask = GlobalConstants.Category.projectile
            self.physicsBody?.contactTestBitMask = GlobalConstants.Category.projectile | GlobalConstants.Category.wall
            self.zPosition = GlobalConstants.ZPosition.projectile
}
}

2 个答案:

答案 0 :(得分:0)

你可能需要将你的射弹添加到场景而不是玩家本身。你将射弹添加到你的播放器中。

你应该将射弹添加到父母场景中。像这样的东西。

self.scene!.addChild(newProjectile)

答案 1 :(得分:0)

如果你想让射弹成为玩家的孩子,那么射弹的位置必须用玩家表示,即(0,0)的位置会将射弹放在玩家的锚点上。

如果你想让射弹成为场景的孩子,那么射弹的位置将以场景的形式表示,即需要一个等于玩家位置的位置将射弹放在玩家的顶部。

你将两者组合在一起,使得弹丸放置在场景中玩家的(x,y)位置,但是与玩家相关,这意味着无论玩家与场景的原点进行比较,那么射弹相对于玩家的位置。