Привет, я программирую для iphone, используя фреймворки box2d и cocos2d.
В настоящее время у меня есть 3 класса, все подклассы CCSprite.
Это: DynamicBlock1, DynamicBlock2 и DynamicEgg1.
В основном моя проблема заключается в том, что я хочу разделить итерации в методе тика, чтобы я мог перебирать определенные классы, а не другие.
В настоящее время метод Tick (итерация) разделен на две части: isMoving == YES/NO.. Это переключает итерацию между b2body(Master)-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);
}
}
}