2011-03-23 44 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