2011-03-23 43 views
0

嘿,即時編程爲iPhone使用box2d和cocos2d框架。box2d iterations

目前,我有3個類CCSprite的所有子類。
它們是:DynamicBlock1,DynamicBlock2和DynamicEgg1

基本上我的問題是,我想迭代打鉤方法分離,這樣我可以遍歷某些類,而不是別人。

當前Tick(迭代)方法分爲兩個部分,isMoving == YES/NO .. 這將切換b2body(主)-sprite(從屬)和b2body(從屬)-sprite(主)之間的迭代。 。 這樣我可以委派誰控制誰。它工作得很好。

問題是,下面的代碼將再次遍歷GetBodyList()中所有類中的所有我的實體。當我只是想迭代發生在一個類(DynamicBlock1)...

有沒有辦法做到這一點?隔離迭代?

一千如果你想,你必須保持不同類別自己單獨的列表(或陣列)的迭代分開謝謝你的
奧利弗

-(void) tick:(ccTime)dt 
{ 
int32 velocityIterations = 8; 
int32 positionIterations = 1; 
world->Step(dt, velocityIterations, positionIterations); 

for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
{ 
    DynamicBlock1 *block1 = (DynamicBlock1*)b->GetUserData(); 
      if (block1.isMoving == NO){ 
        block1.position = CGPointMake(b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO); 
        block1.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle()); 
      } 
      if (block1.isMoving == YES){ 
        b2Vec2 b2Position = b2Vec2(block1.position.x/PTM_RATIO, block1.position.y/PTM_RATIO); 
        float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(block1.rotation); 
        b->SetTransform(b2Position,b2Angle); 
      } 
    } 
} 

回答

1

。而且,無論何時創建主體,都可以在相應列表中添加對該主體的引用。 例如,你有像

這樣的列表NSArray * DynamicBlocksList; NSArray * DynamicEgssList;

現在,當您創建DynamicBlock主體時,您還將其添加到「DynamicBlocksList」中,並且當該主體被銷燬時,可以將其從列表中刪除。而在Tick()函數中,您可以僅迭代所需的列表。

但在我個人看來,這可能不是一個好主意。它很好地遍歷「world-> GetBodyList()」,然後你可以委託不同的主體處理不同的類或函數。

+0

謝謝,這幾乎是我決定要做的。 – Ospho 2011-03-24 11:01:21