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事件不起作用???????
答案 0 :(得分:1)
我试着在我的项目中设置physicsBody
并且无法重现您的问题。
但是,通过比较你和我之间的代码,我认为你的问题是你创建了一个physicsBody
并将其设置为你创建的每个“对撞机”,这与复制问题有关。
也许这可以通过添加copy
方法来解决:
renderComponent.node.physicsBody = [SKPhysicsBody bodyWithBodies:@[[physicsComponentBottom.physicsBody copy]
]];
我稍后阅读documentation并找到方法的限制,它只支持volume-based
physicsBody。这可能是你的问题。
Sprite Kit支持两种物理实体,基于体积的实体和基于边缘的实体。创建物理实体时,其类型,大小和形状由您调用的构造方法确定。基于边缘的主体没有质量或体积,并且不受系统中的力或冲动的影响。基于边的实体用于表示物理模拟中的无体积边界或空心空间。相反,基于体积的物体用于表示具有质量和体积的物体。