(NO.00003)iOS遊戲簡單的機器人投射遊戲成形記(二十一)
回到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將開發一個類似於彈球打磚塊的遊戲,到時候見 ;)