2015-11-07 175 views
3

我想在背景上创建我的播放器。不知何故,这是行不通的。节点计数器增加1,但不可见。我在添加背景后添加播放器,因此它应该位于顶部。该代码我用它来创建播放器:SpriteKit:另一个节点上的节点

var player = SKSpriteNode() 

func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){ 
    player = SKSpriteNode(imageNamed: "player") 
    player.size = CGSize(width: fieldsWidth, height: fieldsWidth) 
    player.position = CGPoint(x: xPos, y: yPos) 
    gameScene.addChild(player) 
} 

我从另一个类访问功能是这样的:

 person().addPlayer(self, xPos: fieldsWidth/2, yPos: fieldsWidth/2) 

希望你能帮助我。

+1

为什么要明确设置精灵的大小?尝试删除尺寸线或检查fieldsWidth和fieldsHeight的值是否有效(还请注意,对于使用fieldsWidth的高度) – giorashc

+0

由于手机的大小,我设置了精灵的大小。精灵不应该在iPhone 6和iPhone 6s上具有相同的尺寸。我计算一个特定的比例。 –

+0

@LukasKöhl以及当您将其添加到场景后打印出来时,玩家的实际尺寸是多少? – Whirlwind

回答

1

如果你确信你已经在需要的位置添加的节点,这可能是因为这里的节点数递增,您可以设置播放机的和背景的zPosition使背景上述球员的情况:

var player = SKSpriteNode() 

//1. somewhere in your code set background's zPosition to 1 before you add it to the scene 

func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){ 
    player = SKSpriteNode(imageNamed: "player") 

    //2. Set player's zPosition to be higher than background's zPosition 
    player.zPosition = 2 
    player.size = CGSize(width: fieldsWidth, height: fieldsWidth) 
    player.position = CGPoint(x: xPos, y: yPos) 
    gameScene.addChild(player) 
} 

关于ignoresSiblingOrder ...我建议您将其保留至true,因为它对性能有很大帮助。关于这种优化的唯一“事情”是,你必须明确地设置zPosition节点在相同的zPosition可以重叠,但你不想让它们以随机顺序重叠(忽略当同步设置为true时,SiboresOrder会做),而是以确定的顺序重叠(由您控制​​)。这是从文档:

当此属性设置为YES,当确定呈现顺序时忽略 树中节点的位置。渲染 节点在同一z位置的顺序是任意的,并且每次渲染新帧时可能会更改 。

所以,只需明确设置zPosition,你会没事的。

+0

已经尝试过,它没有工作。我也尝试将背景背离(不重叠),只是将该玩家添加到场景中,尽管图像名称正确,但他仍然不可见。你有另一个想法吗? –

+0

尝试添加扩展名以及图像名称。 “player.png”而不是“player”。或者检查玩家节点是否在场景中正确定位... – Whirlwind

+0

可悲的是,这没有什么区别。坐标为(31 | 31),锚点位于(0 | 0)(左下角?),它应该是可见的并且在屏幕上。 –

0

在场景的视图控制器中,设置skView.ignoresSiblingOrder = false

+0

已经尝试过。没有工作。我也尝试离开背景,只是将玩家添加到场景中,但他仍然不可见。 –

相关问题