首先尝试 Chipmunk。
问题是没有注册碰撞检测。
我的代码:
@implementation MainPlayScene
{
CCPhysicsNode *_physics;
CCNode *MyPhysicsBody;
CCNode *bottomBody;
}
+ (instancetype)scene
{
return [[self alloc] init];
}
- (instancetype)init
{
// Apple recommend assigning self with supers return value, and handling self not created
self = [super init];
if (!self) return(nil);
_physics = [CCPhysicsNode node];
_physics.debugDraw = YES;
[self addChild:_physics z:1];
/// BOTTOM
CGRect bottomRect = CGRectMake(0, 0, [CCDirector sharedDirector].viewSize.width, 10);
bottomBody = [CCNode node];
bottomBody.physicsBody = [CCPhysicsBody bodyWithPolylineFromRect:bottomRect cornerRadius:0];
bottomBody.physicsBody.collisionCategories = @[@"Bottom"];
bottomBody.physicsBody.type = CCPhysicsBodyTypeStatic;
[_physics addChild:bottomBody];
/// MyBody to bounce around
MyPhysicsBody = [CCSprite spriteWithImageNamed:@"MyBody-64x64-24.png"];
MyPhysicsBody.position = ccp((self.contentSize.width/2),(self.contentSize.height/2));
MyPhysicsBody = [CCNode node];
MyPhysicsBody.physicsBody = [CCPhysicsBody bodyWithRect:(CGRect){CGPointZero, MyPhysicsBody.contentSize.height,MyPhysicsBody.contentSize.width} cornerRadius:0];
MyPhysicsBody.physicsBody.collisionCategories = @[@"MyBody"];
[_physics addChild:MyPhysicsBody z:150];
self.userInteractionEnabled = YES;
return self;
}
检测触摸事件并对物理体施加力使其在底部物体上上下弹跳
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CCLOG(@"Touch Detected");
[MyPhysicsBody.physicsBody applyImpulse:ccp(0, 300.f)];
}
现在我尝试检测“Bottom”上的碰撞,但即使我看到 2 个对象的调试线接触,也没有注册任何东西。
/// try onCollisionEnter first ... nothing
-(void)onCollisionEnter:(CCNode *)entity collisionPair:(CCPhysicsCollisionPair *)pair
{
if ([entity.physicsBody.collisionCategories isEqual: @"Bottom"]) {
CCLOG(@"Hit bottomBody");
}
}
/// try ccPhysicsCollisionBegin pair ... nothing
-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair MyBody:(CCNode *) MyBody Botton:(CCNode *)Bottom
{
CCLOG(@"Hit bottomBody");
return TRUE;
}
显然我在这里遗漏了一些关键的东西......
非常感谢任何帮助!
谢谢
最佳答案
我发现很难看到您发布的所有内容的相关代码。
我会给你一个2个CCSprite
对象碰撞检测的例子。一个叫做 _arrow
,另一个叫做 _obstacle
。
第一步是像这样定义碰撞类型:
_arrow.physicsBody.collisionType = @"arrow";
_obstacle.physicsBody.collisionType = @"obstacle";
第二步是定义回调
-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair arrow:(CCNode *)arrow obstacle:(CCNode *)obstacle
{
// Do some cool stuff
return TRUE;
}
注意根据这些 Sprite 的碰撞类型命名、箭头和障碍物。
第三,您忘记做的是设置委托(delegate),这样您实际上就可以在physicsNode 对象上调用这些方法
_physics.collisionDelegate = self;
self
(通常只是您的场景)应该实现 CCPhysicsCollisionDelegate
协议(protocol)。
关于cocos2d-iphone - Cocos2d v3 & 花栗鼠碰撞检测问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493126/