Swift SpriteKit:位于另一个节点之上的节点

Swift SpriteKit:位于另一个节点之上的节点,swift,sprite-kit,sprite,skspritenode,scene,Swift,Sprite Kit,Sprite,Skspritenode,Scene,我想在背景上创建我的播放器。不知怎么的,这不管用。节点计数器上升1,但不可见。我在添加背景后添加了播放器,所以它应该在顶部。我用于创建播放器的代码: var player = SKSpriteNode() func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){ player = SKSpriteNode(imageNamed: "player") player.size = CGSize(width

我想在背景上创建我的播放器。不知怎么的,这不管用。节点计数器上升1,但不可见。我在添加背景后添加了播放器,所以它应该在顶部。我用于创建播放器的代码:

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)

希望您能帮助我。

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

如果您确定在所需位置添加了节点,这可能是因为节点数增加了,您可以设置播放器和背景,使播放器位于背景之上:

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)
}
关于……我建议您将其留给
true
,因为它在性能方面会有很大帮助。这种优化的唯一“事情”是,您必须显式地为相同的
zPosition
节点设置
zPosition
,这些节点可以重叠,但您不希望让它们以随机顺序重叠(当设置为true时,IgnoreSessiblingSorder会这样做),而是以确定的顺序重叠(由您控制)。这是来自文档:

当此属性设置为“是”时,节点在 在确定渲染顺序时,将忽略树。渲染 相同z位置的节点顺序是任意的,可能会发生变化 每次渲染新帧时


所以,只需显式设置zPosition,您就可以了。

已经尝试过了。没用。我也试着离开背景,只是将玩家添加到场景中,但他仍然不可见。已经尝试了这两种方法,但都不起作用。我还试着去掉背景(没有重叠),只将玩家添加到场景中,他仍然不可见,尽管图像名称是正确的。你有其他想法吗?试着在图像名称的同时添加扩展名。。例如,“player.png”而不是“player”。或者检查玩家节点在场景中的位置是否正确……遗憾的是,这没有什么区别。坐标为(31 | 31),定位点位于(0 | 0)(左下角?)它应该在屏幕上可见。节点在屏幕上是否可见取决于视图和场景大小。默认情况下,如果从sks创建场景,其大小为1024x768,这可能不同于基于用于测试的设备/模拟器的视图大小。另一个问题:您使用的是纹理图集还是xcassets?接下来我能想到的是:清除派生数据,清除项目,清除模拟器的内容和设置,并在设备上重新安装应用程序。还要确保没有代码逻辑问题或打字错误。我正在使用xcassets。我也不使用内置模拟器,因为我的Macbook有点慢,所以我直接在iPhone上运行程序。我将尝试“重置”所有内容,然后再试一次。如果你想,我可以通过dropbox给你我的项目。为什么要显式设置精灵的大小?请尝试删除尺寸线或检查fieldsWidth和fieldsHeight的值是否有效(请注意,对于使用fieldsWidth的高度),我会根据手机的大小设置精灵的大小。精灵在iPhone 6和iPhone 6s上的大小不应相同。我计算了一个特定的比例。@LukasKöhl,当你把一个玩家添加到场景中打印出来时,它的实际大小是多少?哦,天哪,我发现了错误。这么愚蠢的错误给你添了这么多麻烦
fieldsWidth
设置为0,因此节点不可见,但显示在节点计数器中。谢谢您的时间。@LukasKöhl Nice…好吧,Giorasch可能正在寻找问题。所以,你可以感谢他:)