2015-07-12 143 views
0

我有我想要在游戏中SpriteKit实施质地:iOS的纹理渲染

http://imgur.com/gallery/toh3W7h/new

正如你可以看到,有两个横条。 SpriteNode应该穿过这两个小节,它们都应该是坚实的并且与小精灵有联系。

但是,由于某种原因,顶部栏不会提供与spriteNode的任何碰撞,并且SpriteNode只是简单地通过它,底部栏完全按照它应该的那样工作,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) 

是否有这个解决方案的任何?谢谢。

回答

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不知道你想要哪个纹理,但是你应该使用相同的纹理来创建精灵和物理体。

希望这会让你指出正确的方向。

+0

这听起来像是一个合理的解决方案。我已经考虑将它们分成两个精灵,但是,正如你所说的,这个位置可能会在其他框架尺寸的英雄节点上出现奇怪的现象。我会接受你的答案,如果你能告诉我一些代码,将它添加到父母的样子。 (我是初学者)谢谢 – TerranceW

+0

@ TerranceW更新我的答案,希望这是有道理的。 –

+0

这很有道理,我很欣赏它。 – TerranceW