嘿,我正在使用box2d和cocos2d框架为iphone编程。
目前,我有3个类CCSprite的所有子类 它们是:DynamicBlock1,DynamicBlock2和DynamicEgg1
基本上我的问题是我想在tick方法中分离迭代,以便我可以迭代某些类而不是其他类。
目前Tick(迭代)方法分为两部分,isMoving == YES / NO .. 这会在b2body(主) - sprite(Slave)和b2body(Slave)-sprite(Master)之间切换迭代。 这样我可以委托谁控制谁。而且效果很好。
再一次,问题是下面这段代码将遍历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);
}
}
}
答案 0 :(得分:1)
如果要分离迭代,则必须自己为不同的类维护单独的列表(或数组)。无论何时创建主体,都可以在相应列表中添加对该主体的引用。 例如,您有
之类的列表NSArray * DynamicBlocksList; NSArray * DynamicEgssList;
现在,当您创建DynamicBlock主体时,您还将其添加到“DynamicBlocksList”中,当此主体被销毁时,您可以将其从列表中删除。在Tick()函数中,您只能迭代必需的列表。
但在我个人看来,这可能不是一个好主意。可以迭代“world-> GetBodyList()”,然后您可以将不同实体的处理委托给不同的类或函数。