我实现了一个简单的物理操作来反弹sprite node,除了节点在顶部和底部的屏幕上弹跳之外,其他所有东西都起作用,对于侧面来说都很好,但是对于顶部和底部视图则不在屏幕上。

这是视图:

ios - 如何设置场景物理物体的边界以正确弹跳?-LMLPHP

如您所见,我的球正从屏幕底部移出,它正好触碰到其他三个侧面。

这是因为,我将更改为:

   self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height-100)];

如果我使用scene frame,那么球会从屏幕的顶部和底部脱落,但是会反弹。
     self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

我的问题是,为什么self.frame不足以设置scene的边界physicsBody

当我这样设置边界时,唯一的条件对我有用:
   self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(self.frame.origin.x, self.frame.origin.y+100, self.frame.size.width, self.frame.size.height-200)];

最佳答案

这是因为场景的大小和视图的大小不同。

在GameViewController.m文件中添加以下行:
scene.size = skView.bounds.size
它在这里:
/* Set the scale mode to scale to fit the window */ scene.scaleMode = .AspectFill scene.size = skView.bounds.size
当然,您需要正常定位视图(删除添加的+100等)。

关于ios - 如何设置场景物理物体的边界以正确弹跳?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34048916/

10-14 23:42