2014-04-09 62 views
1

所以我希望我的英雄与屏幕边缘碰撞,但只是右侧和左侧墙壁不与底部或顶部碰撞。只有左右屏幕边缘的Sprite Kit冲突检测

到现在为止我已经建立了这个在我-(id)initWithSize:(CGSize)size

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

我的英雄都有这在他的方法:

hero.physicsBody.collisionBitMask = SceneEdgeCategory; 

一切伟大的工程,到目前为止,但作为整个屏幕是物理身体我的英雄与所有的边缘碰撞。任何想法如何让他与墙壁碰撞?

感谢您的帮助球员

回答

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; 
+0

我将leftPhysicsBody和rightPhysicsBody添加到了我的属性列表中,并将上面的代码添加到了我的initWithSize方法以及点的定义中,但它不会以某种方式实现。点的定义是正确的,我检查了。有什么特别的我需要知道如何设置leftPhysicsBody/rightPhysicsBody? – Vincent

+0

你确定你正确定义了所有的点吗? [这是一个文档](https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Nodes/Nodes.html),介绍sprite套件使用的坐标系统。我认为正确的观点是0,0(左下); 0,1(左上角); 1,0(右下)和1,1(右上)。 – 68cherries

+0

您是否可以在-didBeginContact中检测联系人?我试图检测身体和我在屏幕上创建的边缘矩形之间的接触,但它根本不起作用! –

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

那是我怎么看,但我检查,他们工作得很好。我添加了:@property (nonatomic) SKPhysicsBody* leftPhysicsBody; @property (nonatomic) SKPhysicsBody* rightPhysicsBody;然后在我的initWithSize方法中有你的部分。我是否也可以在我的场景中添加两个physicBody?就像我试图初始化和分配它们,但它没有帮助。

相关问题