回到Xcode中,在MainScene.h接口中添加碰撞協議:
@interface MainScene : CCNode
//...
@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層中的分數標簽.
編譯運行游戲,最後效果如下:
其中略去了制作Hud層的步驟,經過前幾篇的鍛煉這個應該不再話下了.
這個游戲到這裡就暫時告一段落了,接下來的游戲NO.00004將開發一個類似於彈球打磚塊的游戲,到時候見 ;)