box2d iterations
问题描述:
嘿,即时编程为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);
}
}
}
答
。而且,无论何时创建主体,都可以在相应列表中添加对该主体的引用。 例如,你有像
这样的列表NSArray * DynamicBlocksList; NSArray * DynamicEgssList;
现在,当您创建DynamicBlock主体时,您还将其添加到“DynamicBlocksList”中,并且当该主体被销毁时,可以将其从列表中删除。而在Tick()函数中,您可以仅迭代所需的列表。
但在我个人看来,这可能不是一个好主意。它很好地遍历“world-> GetBodyList()”,然后你可以委托不同的主体处理不同的类或函数。
谢谢,这几乎是我决定要做的。 – Ospho 2011-03-24 11:01:21