我想在SpriteKit游戏中实现一个纹理:
http://imgur.com/gallery/toh3W7h/new
如您所见,有两个水平条。 SpriteNode应该通过这两个条形,它们都应该是实体并与精灵接触。
然而,由于某种原因,顶部栏不提供与spriteNode的任何冲突,并且SpriteNode只是通过它,BOTTOM栏完全按照它应该工作,I.E。 spriteNode可以与它联系。
虽然这是一个文件,所以这对我来说绝对没有意义。为什么只有底栏呈现。
这是我的纹理代码:
let pointnodeTexture = SKTexture(imageNamed: "pointnode")
let pointnode = SKSpriteNode(texture: pointnodeTexture, size:pointnodeTexture.size())
pointnode.physicsBody = SKPhysicsBody(texture: runningbarTexture, size: runningbarTexture.size())
pointnode.physicsBody?.affectedByGravity = false
pointnode.physicsBody?.pinned = true
pointnode.physicsBody?.dynamic = false
pointnode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) / 1.5)
这有什么解决方案吗?感谢。
答案 0 :(得分:1)
我认为问题在于如何
pointnode.physicsBody = SKPhysicsBody(texture: runningbarTexture, size: runningbarTexture.size())
实际上有效。如果我记得正确地从纹理中制作物理体将尝试创建1个形状并从左下角开始。因为你有透明像素,所以它只是在底部条形图周围绘制。
要获得您想要的结果,您必须将其拆分为两个单独的精灵。现在,如果你仍然想要控制位置,你可以尝试制作两个小精灵并将它们添加到父节点并移动父节点。
希望这有帮助。
修改强>
它看起来像这样......
let pointnodeTexture = SKTexture(imageNamed: "pointnode") //single bar texture
let pointnode = SKNode()
let distanceApart : CGFloat = 20.0
let bar1 = SKSpriteNode(texture: pointnodeTexture, size:pointnodeTexture.size())
bar1.physicsBody = SKPhysicsBody(texture: bar1.texture, size: bar1.size)
bar1.physicsBody?.affectedByGravity = false
bar1.physicsBody?.pinned = true
bar1.physicsBody?.dynamic = false
bar1.position = CGPointMake(0.0, distanceApart)
pointnode.addChild(bar1)
let bar2 = SKSpriteNode(texture: pointnodeTexture, size:pointnodeTexture.size())
bar2.physicsBody = SKPhysicsBody(texture: bar2.texture, size: bar2.size)
bar2.physicsBody?.affectedByGravity = false
bar2.physicsBody?.pinned = true
bar2.physicsBody?.dynamic = false
bar2.position = CGPointMake(0.0, -distanceApart)
pointnode.addChild(bar2)
pointnode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) / 1.5)
我还注意到,在您的原始代码中,您使用的物理体的纹理与您用于创建精灵的纹理不同。 pointnodeTexture vs runningbarTexture不确定你想要哪个纹理但你应该使用相同的纹理来创建精灵和物理体。
希望这会让你指出正确的方向。