2016-11-28 48 views
0
SKSpriteNode * test = [[SKSpriteNode alloc] initWithColor:[UIColor redColor] size:CGSizeMake(100, 100)]; 
[self addChild:test]; 
[test setPosition:CGPointMake(300, 300)]; 

// bottom 
CGSize textureSize = CGSizeMake(100, 100); 
SKPhysicsBody *physicsBottom = [SKPhysicsBody bodyWithRectangleOfSize:textureSize]; 
physicsBottom.categoryBitMask = ColliderBottom; 
physicsBottom.contactTestBitMask = ColliderBottom | ColliderObstacle; 

// working... 
// test.physicsBody = physicsBottom; 

// not working... this line is problem. 
test.physicsBody = [SKPhysicsBody bodyWithBodies:@[physicsBottom]]; 

didEndContact未能通过此代码工作。ios sprite kit bodyWithBody not working

test.physicsBody = [SKPhysicsBody bodyWithBodies:@[physicsBottom]]; 

什么问题????

typedef enum { 
ColliderObstacle = 1 << 0, 
ColliderCharacter = 1 << 2, 
ColliderLeft  = 1 << 3, 
ColliderRight  = 1 << 4, 
ColliderBottom  = 1 << 5,}ColliderType; 

//没有开口......这条线......我不明白。 为什么EndContact事件不起作用???????

+0

我无法看到任何地方如何创建physicsComponentBottom.physicsBody(有physicsBottom节点,但我想这是另一个节点) – Whirlwind

+0

更改我的代码为简单。 –

回答

1

我试过在我的项目中设置physicsBody的方法,无法重现您的问题。 但是,通过比较你和我的代码,我认为你的问题是你创建一个physicsBody并将其设置为你创建的每个“collider”,这与复制问题有关。 也许这可以是固定的,加入copy方法:

renderComponent.node.physicsBody = [SKPhysicsBody bodyWithBodies:@[[physicsComponentBottom.physicsBody copy] 
                    ]]; 

我读了以后documentation并找到方法的限制,它只能支持volume-based physicsBody.This可能是你的问题。

Sprite Kit支持两种物理体,基于体的体和基于边的体。当你创建一个物理体时,它的种类,大小和形状是由你调用的构造函数方法决定的。基于边缘的物体不具有质量或体积,并且不受系统中的力或冲击影响。基于边缘的物体用于表示物理模拟中的无体积边界或空心空间。相反,基于体积的物体用于表示具有质量和体积的物体。

+0

不适用于我..ㅜ_ㅜ –

+0

您是否阅读文档?我发送参考4u –

+0

工作!谢谢你的好意。我再读一遍,我发现。我想念self.physicsBody.density = 1 ;.我会研究如何设定价值。再次感谢你亲切的人。 –