ios精灵套件bodyWithBodies无法正常工作

时间:2016-11-28 08:07:26

标签: ios

    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无法使用此代码。

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

什么问题????

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

//不要唠叨......这句话......我不明白。 为什么EndContact事件不起作用???????

1 个答案:

答案 0 :(得分:1)

我试着在我的项目中设置physicsBody并且无法重现您的问题。 但是,通过比较你和我之间的代码,我认为你的问题是你创建了一个physicsBody并将其设置为你创建的每个“对撞机”,这与复制问题有关。 也许这可以通过添加copy方法来解决:

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

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

  

Sprite Kit支持两种物理实体,基于体积的实体和基于边缘的实体。创建物理实体时,其类型,大小和形状由您调用的构造方法确定。基于边缘的主体没有质量或体积,并且不受系统中的力或冲动的影响。基于边的实体用于表示物理模拟中的无体积边界或空心空间。相反,基于体积的物体用于表示具有质量和体积的物体。