仅使用左右屏幕边缘进行Sprite Kit碰撞检测

3

我希望我的英雄角色可以与屏幕的边缘发生碰撞,但仅限于右侧和左侧墙壁,而不是顶部或底部。

到目前为止,在我的-(id)initWithSize:(CGSize)size中设置了以下内容:

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
    self.physicsBody.categoryBitMask = SceneEdgeCategory;

我的英雄在他的方法中有这个:

hero.physicsBody.collisionBitMask = SceneEdgeCategory;

目前一切都运作良好,但由于整个屏幕都是物理体,我的英雄会与所有边缘碰撞。有什么办法让他只与墙壁碰撞吗?

谢谢大家的帮助。

2个回答

1
你正在为整个屏幕添加一个物理“盒子”。你需要的是屏幕左右两侧的两堵墙。这应该可以解决问题:
//make sure that you define the topLeftPoint, bottomLeftPoint, topRightPoint and bottomLeftPoint variables 

self.leftPhysicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:topLeftPoint toPoint:bottomLeftPoint];
self.leftPhysicsBody.categoryBitMask = SceneEdgeCategory;

self.rightPhysicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:topRightPoint toPoint:bottomRightPoint];
self.rightPhysicsBody.categoryBitMask = SceneEdgeCategory;

我将leftPhysicsBody和rightPhysicsBody添加到我的属性列表中,并将其与initWithSize方法一起添加到上面,同时定义了这些点,但不知何故它不起作用。这些点被正确定义了,我已经检查过了。关于如何设置leftPhysicsBody/rightPhysicsBody,有什么特殊的事情我需要知道吗? - undefined
你确定你正确定义了所有的点吗?这是一个文档,介绍了Sprite Kit使用的坐标系统。我认为正确的点应该是0,0(左下角);0,1(左上角);1,0(右下角)和1,1(右上角)。 - undefined
你能在 -didBeginContact 中检测到接触吗?我试图检测物体与我在屏幕周围创建的边缘矩形之间的接触,但是它根本不起作用! - undefined

0
CGPoint topRightPoint = CGPointMake(self.frame.size.width, self.frame.size.height);

这是我的代码,但我已经检查过它们的工作情况。我添加了以下内容:@property (nonatomic) SKPhysicsBody* leftPhysicsBody; @property (nonatomic) SKPhysicsBody* rightPhysicsBody;然后在我的initWithSize方法中有你上面提到的部分。我是否可以将这两个物理体添加到我的场景中?我尝试过初始化和分配它们,但没有起到作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接