【问题标题】:Collision Detection Cocos 2D碰撞检测 Cocos 2D
【发布时间】:2011-06-23 13:48:16
【问题描述】:

我正在尝试制作一个游戏,让球在屏幕上随机反弹,然后如果它击中目标,你就赢得了比赛。因此,我试图在球精灵和目标精灵之间创建碰撞检测。球的实现是在游戏类之外的一个单独的类中完成的,目标被添加到游戏类中,如下所示:

-(void) targetCollision{

    CCSprite *target = [CCSprite spriteWithFile:@"target.png"];
    target.position = ccp(400,50);
    [self addChild:target];


    CCSprite *ball = [[Ball alloc] init];
    [self addChild:ball];

    //CCSprite *ball = [CCSprite spriteWithFile:@"ball2.png"];
    //ball.position = ccp(400,75);
    //id a1 = [CCRotateBy actionWithDuration:1 angle:360];
    //id repAct = [CCRepeatForever actionWithAction:a1];
    //[ball runAction: repAct];
    //[self addChild:ball];

    CGRect ballRect = [ball boundingBox];
    CGRect targetRect =  [target boundingBox];

    if (CGRectIntersectsRect(ballRect, targetRect)) {
        NSLog(@"Target hit! Collision detected"); 
    }  
}

如果我用注释掉的代码添加球,我可以让这个方法工作,但这不是我想要做的。任何帮助将不胜感激!

【问题讨论】:

  • 我可以看到球和目标被添加并且球继续旋转..所以你的问题是球的运动??
  • 好吧,球的运动是在不同的类中定义的,然后通过 CCSprite *ball = [[Ball alloc] init]; 行添加到场景中。 [自我添加孩子:球];本质上是一个在屏幕周围随机弹跳的球和一个静止的目标。当球悬停在目标上或与它发生碰撞时,我希望控制台说检测到碰撞

标签: cocos2d-iphone collision-detection


【解决方案1】:

您应该在计划更新中或直接在计划更新方法中调用您的冲突方法。 像这样的——

在你的初始化方法中

[self scheduleUpdate];

在 scheduleUpdate 方法中可以调用

[self targetCollision];

一旦球碰到另一个球就会确认碰撞

希望能解决你的问题

【讨论】:

    【解决方案2】:

    如何使用 CCScheduler 每微秒检查一次碰撞

    【讨论】:

      猜你喜欢
      • 2012-03-21
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多