(NO.00003)iOS游戏简单的机器人投射游戏成形记(二十一)

时间:2021-06-19 19:43:52

回到Xcode中,在MainScene.h接口中添加碰撞协议:

@interface MainScene : CCNode <CCPhysicsCollisionDelegate>
//...
@end

然后在MainScene.m初始化方法中打开碰撞代理:

_physicWorld = (CCPhysicsNode*)[self getChildByName:@"physicWorld" recursively:YES];
    NSAssert(_physicWorld, @"physicWorld must not nil");
    _physicWorld.collisionDelegate = self;

因为我们要处理的是子弹和传感器的碰撞,所以需要添加对应的碰撞回调方法:

-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair bullet:(CCNode *)bullet sensor:(CCNode *)sensor{
    CCPhysicsBody *phyBullet = bullet.physicsBody;
    phyBullet.collisionType = @"null";

    [self scheduleBlock:^(CCTimer *timer){
        bullet.visible = NO;
        bullet.position= ccp(0, 0);
    } delay:5];

    _score++;
    _scoreLabel.string = [NSString stringWithFormat:@"Score:%d",_score];
    return NO;
}

首先取得子弹的物理对象,然后将碰撞类型改为@”null”;这是因为可能发生以下这种情况:

子弹先进入篮框接触到感应器,但是可能会碰到篮框内壁从而向上反弹离开传感器,接着就下落碰到传感器,造成一颗子弹进入篮框多次计分.

将其碰撞模型设为@”null”之后,该已经碰到传感器的子弹,不再会与传感器发生碰撞了.当然这只是一种解决办法.

接下来我们等到5秒之后,将该子弹设为不可见,并将其从篮框中移出,一来不影响其它射入的子弹,二来可以重用该子弹.

最后计分,并且更新Hud层中的分数标签.

编译运行游戏,最后效果如下:

(NO.00003)iOS游戏简单的机器人投射游戏成形记(二十一)

其中略去了制作Hud层的步骤,经过前几篇的锻炼这个应该不再话下了.

这个游戏到这里就暂时告一段落了,接下来的游戏NO.00004将开发一个类似于弹球打砖块的游戏,到时候见 ;)