我正在尝试为精灵节点创建一个物理体,该节点仅用于精灵节点的轮廓。为此,我尝试使用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
答案 0 :(得分:2)
只需将精灵的位置设置为定义physicsBody之后的位置 - SpriteKit中似乎有一个关于此的错误。你最终应该:
screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame)
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
使用edgeLoop作为sprite的physicsBody仍然有点奇怪 - SK会认为精灵没有质量等,任何物理交互都不会按预期工作。
答案 1 :(得分:1)
如果你移除了screenS.position行它应该有效,默认情况下,精灵已经在父母中心居中,通过在你将精灵添加为孩子之前设置位置我认为只移动PhysicsBody而不是精灵本身从我测试过。
答案 2 :(得分:1)
你在创建一个物理体时正在使用精灵框架,物理体与你所用的精灵有关,这就是它关闭的原因。在移动精灵位置之前添加物理体,它应该排成一行