Привет, я программирую для iphone с использованием каркасов box2d и cocos2d.
В настоящее время у меня есть 3 класса всех подклассов CCSprite.
Это: DynamicBlock1, DynamicBlock2 и DynamicEgg1
В основном моя проблема заключается в том, что я хочу разделить итерации в методе tick, чтобы я мог выполнять итерации определенных классов, а не других.
В настоящее время метод 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);
}
}
}