Я работаю над игрой и реализую физику с помощью бурундука. Все шло хорошо на части cocos2d до интеграции с бурундуком. Немного фона:
Игра представляет собой игру с блоками. Уровни определяются в списке свойств, где позиции, размеры блоков, гравитационные силы и т. Д. Определяются для каждого блока, отображаемого на уровне.
Проблема в том, что блоки появляются. У меня есть метод в классе BlockLayer, который является частью основной сцены моей игры. После создания слоя список свойств читается, и все блоки создаются. Для создания блоков вызывается следующий метод:
- (void)createBlock:(Block*)block withAssets:(NSBundle*)assets
{
Sprite* sprite;
switch(block.blockColour)
{
case kBlockColourGreen:
sprite = [Sprite spriteWithFile:[assets pathForResource:@"green" ofType:@"png" inDirectory:@"Blocks"]];
break;
case kBlockColourOrange:
sprite = [Sprite spriteWithFile:[assets pathForResource:@"orange" ofType:@"png" inDirectory:@"Blocks"]];
break;
case kBlockColourRed:
sprite = [Sprite spriteWithFile:[assets pathForResource:@"red" ofType:@"png" inDirectory:@"Blocks"]];
break;
case kBlockColourBlue:
sprite = [Sprite spriteWithFile:[assets pathForResource:@"blue" ofType:@"png" inDirectory:@"Blocks"]];
break;
}
sprite.position = block.bounds.origin;
[self addChild:sprite];
if(block.blockColour == kBlockColourGreen || block.blockColour == kBlockColourRed)
space->gravity = cpvmult(cpv(0, 10), 1000);
cpVect verts[] = {
cpv(-block.bounds.size.width, -block.bounds.size.height),
cpv(-block.bounds.size.width, block.bounds.size.height),
cpv(block.bounds.size.width, block.bounds.size.height),
cpv(block.bounds.size.width, -block.bounds.size.height)
};
cpBody* blockBody = cpBodyNew([block.mass floatValue], INFINITY);
blockBody->p = cpv(block.bounds.origin.x, block.bounds.origin.y);
blockBody->v = cpvzero;
cpSpaceAddBody(space, blockBody);
cpShape* blockShape = cpPolyShapeNew(blockBody, 4, verts, cpvzero);
blockShape->e = 0.9f;
blockShape->u = 0.9f;
blockShape->data = sprite;
cpSpaceAddShape(space, blockShape);
}
При использовании приведенного выше кода спрайты никогда не появляются. Однако, если я закомментирую «cpSpaceAddBody (space, blockBody);» линия, спрайты появляются.
Положение и размер блоков хранятся в свойстве "bounds" экземпляров класса Block, которое является CGRect.
Не уверен, что это важно, но ориентация приложения находится в левом горизонтальном положении, и все координаты основаны на этой ориентации.
Любая помощь будет принята с благодарностью.