我试图利用init?(coder aDecoder:NSCoder)函数,以便我可以在sks文件中继承sprites。使用所需的init(nscoder)设置物理主体代码
我可以在sks文件中设置物理体,但是对于我使用的也有圆角的矩形精灵来说,它效果不佳。由于圆角,在使用init函数之前,我使用代码设置了物理体,并将宽度设置为略小于方形宽度(这样,当我的英雄从方块滑落时,没有间隙圆角是..
我知道我可以使用阿尔法面具物理身体得到相同的影响,除了这个,当我的英雄是在块,似乎有1 px'ish差距,并且它看起来并不好。
奇怪,为什么我不能设置物理体这种情况的原因,也是我该怎么做,或围绕它得到什么?
感谢您的帮助!
更新:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
if let p = userData?.value(forKey: "col") as? String {
setup(p)
print("working")
}
}
func setup(_ col: String) {
setupPhysics()
//allSprites.append(self)
在setupPhysics我:
override func setupPhysics() {
physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: frame.width - 4, height: frame.height - 1))
...more code...
}
这是我对精灵的代码,我有它正确地安装在SKS文件...
我将allSprites的附录注释掉了,这样我就可以证明它不起作用。随着追加注释掉,精灵被添加到allSprites,然后在场景文件我didMove功能,它遍历allSprites和运行setupPhysics():
func setup(_ col: String) {
//setupPhysics()
allSprites.append(self)
// scene file
func setupAllSpritesPhysics() {
for sprite in allSprites { sprite.setupPhysics() }
}
@ Knight0fDragon:
您提这是一个丑陋的修复。我不同意这个事实,即它不会以'正确'的方式工作。目前我没有足够的精灵来引起场景加载的任何滞后。如果情况确实如此,我可以在未来考虑这一点。
我承认我没有尝试过你提到的方法,因为我不想为每个创建的sprite创建一个子节点,以便即使它能够正常工作。我欣赏目前为止的建议。
它会帮助你,如果你显示一些更多的信息。如果英雄物理是在代码中设置的,则显示代码或显示图像,以显示当精灵进行交互时正在发生的事情。你可以提供的信息越容易找出你的问题。 –
感谢您的评论,我目前没有将我的电脑放在我面前,但是当我有机会时我会更新这个问题。我可以说,init函数正常工作并且工作,我只有1个init函数。在super.init被调用后调用设置物理的函数。我确实得到它太工作,使用完成关闭的等待skaction ...所以我认为super.init需要更多的时间完成,但这似乎有点hacky ... – Discoveringmypath
你甚至检查,看看是否打印线正在发生 – Knight0fDragon