如何设置场景物理主体的边界以正确反弹?
Posted
技术标签:
【中文标题】如何设置场景物理主体的边界以正确反弹?【英文标题】:How to set bounds to Scene physics body to bounce properly? 【发布时间】:2015-12-02 17:15:38 【问题描述】:我实现了一个简单的物理来反弹sprite node
,除了节点在顶部和底部从屏幕反弹之外,一切正常。对于侧面来说很好,但它在顶部和底部视图中脱离了屏幕.
这里是视图:
如您所见,我的球从底部的屏幕上飞出,完美地接触到其他三个侧面。
这是因为,我对以下内容进行了更改:
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)];
【问题讨论】:
你改变了球的锚点吗? 不,我没有改变锚点。我什至没有碰它。默认锚点是什么? 【参考方案1】:这是因为场景的大小和视图的大小不一样。
在 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等)。
【讨论】:
当我用 aspectfill 添加scene.size=skView.bounds.size 时,球会超出屏幕并反弹回来!!!!我确实删除了添加的+100。以上是关于如何设置场景物理主体的边界以正确反弹?的主要内容,如果未能解决你的问题,请参考以下文章