接著我們先來重寫
contactlistener:
類宣告:
#import "box2d.h"
class contactlistener : public b2contactlistener
;類定義:
#import "contactlistener.h"
#import "cocos2d.h"
#import "gamelayer.h"
void contactlistener::begincontact(b2contact*contact)
int tag = [userdataintvalue];
if (tag == -1)
tag= [userdata intvalue];
if(tag == -2)
}int lastscoredstep =[[gamelayer gamelayer] lastscoredstep];
if (lastscoredstep == -1) else if (lastscoredstep!= tag)
}void contactlistener::presolve(b2contact* contact,const b2manifold* oldmanifold){}
void contactlistener::postsolve(b2contact*contact, const b2contactimpulse* impulse){}
void contactlistener::endcontact(b2contact*contact){}
這裡我們重寫了
begincontact方法,當有剛體之間的碰撞發生時,我們通過判斷兩個剛體的型別來判斷是否得分,剛體型別的判斷就用的是我們前面的tag,注意這裡我們做了判斷,由於我們沒有為牆體指定tag,所以當牆體的userdata轉換為nsnumber指標時為nil,這時候就沒有必要再做判斷了,並且我們為了防止重複記分,例如小球連續兩次碰到當前block(例如小球碰撞之後彈起又碰撞,或者遇到高矮台階的那種block),這時候就通過lastscoredstep來比較,lastscoredstep始終記錄前一次得分的stepblock。
最後我們來定義
ball類:
宣告如下:
#import "ccnode.h"
#import "cocos2d.h"
#import "box2d.h"
@inte***ce ball : ccnode
+ (ball*)ball;
- (void)reset;
- (void)pushleft;
- (void)pushright;
@end
定義:#import "ball.h"
#import "cocos2d.h"
#import "gb2shapecache.h"
#import "tagdefinitions.h"
#import "gamelayer.h"
@implementation ball
+ (ball*)ball
- (id)init
return self;
}- (void)pushleft
- (void)pushright
- (void)reset
- (cgpoint)position
@end
小球的素材:
小球模擬較簡單,通過
這樣我們的遊戲就基本製作完成了,限於篇幅,我們沒有列出各個類的
dealloc方法,請讀者補充完成,釋放資源。此外,還可以新增一些音效,新增開始介面和gameover介面等等。 ~
手把手教你製作乙個Windows服務
也許你認為開發windows服務是件非常困難的事件,需要了解非常多的作業系統原理以及精通windows的各種api。其實沒有這麼誇張,windows服務就像乙個框架一樣,至於你往裡面加些什麼完全在與你自己。好吧,現在我們就往裡面加 helloworld 吧。開學習製作windows服務之前我們先大概...
手把手教你在顯示裝置上製作乙個選單
摘要 程式中選單的種類與選單化程式具有明顯的優勢,程式的實現方式通常有兩種 一種是基於命令列方式,即通過輸入指令驅動程式實現相應的功能 二是基於選單方式,即通過選擇不同的選單實現程式的不同功能。前者的最大缺點是必須精確掌握指令,對操作者而言,它不是十分方便 後者,則只要通過選擇不同的選單項,就可以實...
手把手教你D2C,走向前端智慧型化
這幾年來 ai 來勢洶洶,在部分領域應用也逐漸成熟。前端發展至今,我們也有許多成熟的前端解決方案 有大量的設計稿,我們是否能夠結合智慧型化的能力將乙個 design 變成乙個 code 設計轉 簡稱 d2c 來提效,讓前端從乙個資源型的角色中解放出來將精力投入到前端其他專業領域?d2c 智慧型團隊這...