Swift,SpriteKit:使用 edgeLoopFromRect 时 SpriteNode 的物理位置 Body 错误
Swift, SpriteKit: Position Of Physic Body Wrong For SpriteNode When Using edgeLoopFromRect
我正在尝试为 sprite 节点创建一个物理 body,它仅用于 sprite 节点的轮廓。为此,我尝试使用 edgeLoopFromRect。但是,当我尝试这样做时,物理 body 与精灵节点的位置不匹配。例如,精灵节点将位于屏幕中央,其物理 body 将位于屏幕的上角(参见图片 - 物理 body 的轮廓仅显示角,因为有些不在屏幕上)。我想用它来创建一个游戏区域的轮廓,它将作为 object 的边界,以便在游戏结束时与之联系。
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)
为什么位置差这么远?我究竟做错了什么?这甚至是为游戏区域设置物理 body 轮廓的正确方法吗?
谢谢! :D
如果你删除 screenS.position 行它应该工作,默认情况下,精灵已经居中在他们的 parents 中心,通过在你添加精灵之前设置位置作为 child 我认为只移动 PhysicsBody 而不是我测试过的精灵本身。
只需在定义 physicsBody 之后移动设置 sprite 位置的行 - SpriteKit 中似乎存在与此相关的错误。你最终应该得到:
screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame)
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
使用 edgeLoop 作为 sprite 的 physicsBody 仍然有点奇怪 - SK 会认为 sprite 没有质量等,任何物理交互都不会按预期工作。
您在创建物理体时使用了 sprites 框架,物理体是相对于您放置它的 sprite 的,这就是它关闭的原因。在移动精灵位置之前添加物理体,它应该排成一行
我正在尝试为 sprite 节点创建一个物理 body,它仅用于 sprite 节点的轮廓。为此,我尝试使用 edgeLoopFromRect。但是,当我尝试这样做时,物理 body 与精灵节点的位置不匹配。例如,精灵节点将位于屏幕中央,其物理 body 将位于屏幕的上角(参见图片 - 物理 body 的轮廓仅显示角,因为有些不在屏幕上)。我想用它来创建一个游戏区域的轮廓,它将作为 object 的边界,以便在游戏结束时与之联系。
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)
为什么位置差这么远?我究竟做错了什么?这甚至是为游戏区域设置物理 body 轮廓的正确方法吗?
谢谢! :D
如果你删除 screenS.position 行它应该工作,默认情况下,精灵已经居中在他们的 parents 中心,通过在你添加精灵之前设置位置作为 child 我认为只移动 PhysicsBody 而不是我测试过的精灵本身。
只需在定义 physicsBody 之后移动设置 sprite 位置的行 - SpriteKit 中似乎存在与此相关的错误。你最终应该得到:
screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame)
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
使用 edgeLoop 作为 sprite 的 physicsBody 仍然有点奇怪 - SK 会认为 sprite 没有质量等,任何物理交互都不会按预期工作。
您在创建物理体时使用了 sprites 框架,物理体是相对于您放置它的 sprite 的,这就是它关闭的原因。在移动精灵位置之前添加物理体,它应该排成一行