我试图让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
}
}
答案 0 :(得分:0)
你可能需要将你的射弹添加到场景而不是玩家本身。你将射弹添加到你的播放器中。
你应该将射弹添加到父母场景中。像这样的东西。
self.scene!.addChild(newProjectile)
答案 1 :(得分:0)
如果你想让射弹成为玩家的孩子,那么射弹的位置必须用玩家表示,即(0,0)的位置会将射弹放在玩家的锚点上。
如果你想让射弹成为场景的孩子,那么射弹的位置将以场景的形式表示,即需要一个等于玩家位置的位置将射弹放在玩家的顶部。
你将两者组合在一起,使得弹丸放置在场景中玩家的(x,y)位置,但是与玩家相关,这意味着无论玩家与场景的原点进行比较,那么射弹相对于玩家的位置。