我创建了一个SKShapeNode
我已经分配了一个physicsBody
到它。然而,当有接触时它不会被触发。
的制作SKShapeNode
code:
-(SKShapeNode*)gravityline{
//SKSpriteNode *lolo=[[SKSpriteNode alloc]init];
SKShapeNode *lolo = [[SKShapeNode alloc] init];
CGPoint fff=CGPointMake(ray1.position.x, ray1.position.y);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, fff.x, fff.y);
CGPathAddLineToPoint(path, 0,rayoriginpoint.x,rayoriginpoint.y );
CGPathCloseSubpath(path);
lolo.path = path;
lolo.name=@"gravityline";
lolo.strokeColor=[SKColor greenColor];
lolo.glowWidth=.1;
CGPathRelease(path);
lolo.physicsBody=[SKPhysicsBody bodyWithEdgeFromPoint:fff toPoint:rayoriginpoint];
//lolo.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromPath:path];
//lolo.physicsBody=[SKPhysicsBody bodyWithPolygonFromPath:path];
lolo.physicsBody.categoryBitMask=raylightCategory;
lolo.physicsBody.collisionBitMask=batCategory;
lolo.physicsBody.contactTestBitMask=batCategory;
lolo.physicsBody.usesPreciseCollisionDetection=YES;
lolo.physicsBody.linearDamping=0;
lolo.physicsBody.restitution=1.0;
lolo.physicsBody.dynamic=NO;
return lolo;
}
这是触发代码:
- (void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
{
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}
else
{
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
if (firstBody.categoryBitMask == raylightCategory && secondBody.categoryBitMask==batCategory)
{
NSLog(@"Contact with bat have been made");
[secondBody.node removeFromParent];
}
}
如果有人知道我做错了什么,为什么SKShapeNode
没有激活物理主体,请告诉我。
这肯定行不通:
lolo.physicsBody=[SKPhysicsBody bodyWithEdgeFromPoint:fff toPoint:rayoriginpoint];
如果有的话,这将返回一个已经分配给不同节点的主体。但我猜它只是返回零。
此注释行也不起作用:
//lolo.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromPath:path];
边缘形状将创建静态(如:不可移动)物体。因此,这个节点不会在物理中移动,如果我没有弄错的话,你也不会从与静态物体的接触中得到接触响应,而只能从动态物体中得到接触响应。
这个应该可以工作:
//lolo.physicsBody=[SKPhysicsBody bodyWithPolygonFromPath:path];
但是,您可以在此处将主体设置为静态主体:
lolo.physicsBody.dynamic=NO;
因此,应用相同的规则,就好像您正在创建带有边缘循环的实体一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)