cocos2d-iphone - Cocos2d v3 & 花栗鼠碰撞检测问题

标签 cocos2d-iphone chipmunk collision

首先尝试 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/

相关文章:

java - Jmonkey碰撞检测

三.js射线物体交集

ios - 在Cocos2d中画一条线

iphone - cocos2D iPhone 中的 UItextfield 文本对齐问题

ios - Cocos2D 2.0 提高调度精度

iphone - 花栗鼠物理学 : Velocity question

pygame - 更改 pymunk/pygame 中的约束颜色

2d - 什么类型的速度-时间曲线模拟在水平表面上滑动到停止的物体?

c++ - 计算碰撞中两个正​​方形的重叠

cocoa-touch - 第一次点击 UITextField 时发生奇怪的崩溃