Swift,SpriteKit:使用edgeLoopFromRect时,SpriteNode的物理体位置错误

4
我正在尝试为一个精灵节点创建一个物理体,该物理体仅用于精灵节点的轮廓。为此,我尝试使用edgeLoopFromRect。然而,当我尝试这样做时,物理体与精灵节点的位置不匹配。例如,精灵节点将位于屏幕中心,而其物理体将位于屏幕的顶角(见图片-物理体的轮廓仅显示角落,因为一些内容超出了屏幕)。我想使用这个来创建游戏区域的轮廓,它将作为对象接触的边界,以便在游戏结束时使用。

截图

这是我的代码:
//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

你能发布一张截图展示精灵和物理体吗? - Steve Ives
我想使用这个来创建游戏区域的轮廓,这将作为物体接触的边界。您希望精灵的轮廓成为精灵接触的边框?精灵通常具有基于体积的物理实体;边缘基础体用于边界等,但通常会使用场景的框架来阻止精灵越出屏幕。 - Steve Ives
3个回答

3

只需将设置精灵位置的行移动到定义physicsBody之后 - 在SpriteKit中似乎存在这样的bug。最终代码应该如下:

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

把边缘环作为精灵的物理体仍然有点奇怪 -SpriteKit会认为精灵没有质量等等,任何物理交互都无法按预期工作。


谢谢:D,感谢您的建议,我会试着玩一下它 :) - HeanMachine

1
如果您删除screenS.position行,它应该可以工作。默认情况下,精灵已经在其父级居中,通过在将精灵添加为子级之前设置位置,我认为只会移动PhysicsBody而不是精灵本身,这是我测试过的结果。

1
在创建物理体时,您正在使用精灵帧,物理体与您放置它的精灵相关,这就是为什么它偏离了。在移动精灵位置之前添加物理体,它应该会对齐。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接