2016-11-19 42 views
1

我正在尝试为Sprite节点创建一个物理主体,该Sprite节点仅适用于Sprite节点的轮廓。为此,我尝试使用edgeLoopF​​romRect。然而,当我尝试这个时,物理体不匹配精灵节点的位置。例如,精灵节点将位于屏幕的中心,其物理主体将位于屏幕的顶部角落(请参阅图片 - 物理主体的轮廓仅显示角落,因为某些屏幕不在屏幕中)。我想用这个来创建一个游戏区域的轮廓,这个区域将作为对象与游戏接触的边界。Swift,SpriteKit:使用edgeLoopF​​romRect时SpriteNode出错的物理体位置

Screen Shot

这里是我的代码:

//Physic Body Outline Test 

    let screenS = SKSpriteNode(imageNamed: "TestImage") 
    screenS.size = CGSize(width: 100, height: 100) 
    screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
    screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
    screenS.physicsBody!.affectedByGravity = false 
    self.addChild(screenS) 

为什么位置,使远吗?我究竟做错了什么?这甚至是为游戏区域设置物理大纲的正确方法吗?

谢谢! :D

+0

您可以发布显示精灵和physicsBody的屏幕截图吗? –

+0

“我想用它来创建一个游戏区域的轮廓,这个区域将作为对象接触的边界” - 你想让精灵的轮廓成为精灵接触的边界吗? Sprtes通常具有基于体积的物理机构;基于边缘的物体用于边界等,但通常使用场景的帧来停止精灵离开屏幕。 –

回答

2

只需将设置精灵位置的行移动到定义physicsBody之后 - SpriteKit中似乎存在一个与此相关的错误。您应该结束了:

screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 

它仍然是一个有点奇怪使用edgeLoop作为physicsBody的精灵 - SK会觉得精灵有没有质量等,并如预期的任何物理相互作用将无法正常工作。

+0

感谢:D和感谢您的意见,我会有一个发挥它:) – HeanMachine

1

如果你删除screenS.position线它应该工作,默认情况下,精灵已经居中在他们的父母中心,通过设置位置之前你添加精灵作为一个孩子我想只移动PhysicsBody而不是从我测试过的精灵本身。

1

创建物理体时,您使用的是精灵框架,物理体是相对于您放置的精灵而言的,这就是它关闭的原因。在移动精灵位置之前添加物理体,并且它应该排队