2012-07-11 110 views
0

我想創建一個聯繫偵聽器,以便我能夠在來自不同類的精靈集合時創建關節。我發現了一個有用的問題和答案,部分幫助了我 - Getting the world's contactListener in Box2D。其中,推薦下面的代碼和insrtuctions:當來自不同類的精靈集合時創建聯繫人偵聽器

std::vector< std::pair<b2Fixture*, b2Fixture*> > thingsThatTouched; 

//in BeginContact 
thingsThatTouched.push_back(make_pair(contact->GetFixtureA(), contact->GetFixtureB())); 

//after the time step 
    for (int i = 0; i < thingsThatTouched.size(); i++) { 
    b2Fixture* fixtureA = thingsThatTouched[i].first; 
    b2Fixture* fixtureB = thingsThatTouched[i].second; 
// ... do something clever ... 
} 
thingsThatTouched.clear(); //important!! 

對於這個工作,你需要做的thingsThatTouched列表從接觸監聽功能可見的,所以既可以是一個全局變量,或者你可以設置一個指向它的聯繫偵聽器類中的指針,或者可能有一個全局函數返回一個指向列表的指針。

我使用的是Cocos2d,不知道多少C++。我該如何「在Cocos2d中的」通過聯繫人偵聽器函數「使事物觸摸列表可見?

std::vector< std::pair<b2Fixture*, b2Fixture*> > thingsThatTouched; 

是否在ContactListener.h文件中?它在Cocos2d中有什麼不同?謝謝。

回答

0

把這個頭文件:

typedef std::pair<b2Fixture*, b2Fixture*> fixturePair; 
typedef std::vector<fixturePair> fixturePairVector; 

extern fixturePairVector g_touchingFixtures; 

然後包括頭,無論你需要使用名單。您還需要有這樣一個源文件(.mm或的.cpp)的地方,只有一次:

fixturePairVector g_touchingFixtures; 

原因,該類型定義是沒有必要的,但他們可能會幫助,如果你不喜歡看太多錯誤的括號。

0

您可以將此列表存儲在單例類中,然後您可以從任何地方訪問它,即使是C++代碼。類似的東西:

NSArray* things = [SomeSingleton sharedSingleton].thingsThatTouched; 
相關問題