如何设置场景物理主体的边界以正确反弹?

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。

以上是关于如何设置场景物理主体的边界以正确反弹?的主要内容,如果未能解决你的问题,请参考以下文章

如何让海龟在 netlogo 中从世界边界反弹

UIKit Dynamics UICollisionBehavior 无反弹的碰撞

iscroll.js 如何禁用左右边界的反弹

从圆形边界反弹球

SpriteKit 节点粘在场景边缘/不反弹

SceneKit - 如何在另一个节点内反弹一个节点(鱼缸里的鱼)