2012-02-14 2 views
0

ОК, IM следующий учебник RW на Box2D, я попал в ту часть, добавив тело спрайтов, хорошо Херес проблемы,я не могу добавить тело в мой спрайт Box2D Обновлен

я могу добавьте тело спрайта в «cat» спрайт, но когда я пытаюсь добавить тело в «автомобиль» спрайту, он просто падает. он отлично работает, если я добавляю тело только к «cat» спрайту, но почему не могу я добавить тело к «машине»? они оба используют тот же метод, чтобы добавить тело!

Heres метод добавления тела:

- (void)addBoxBodyForSprite:(CCSprite *)sprite { 

b2BodyDef spriteBodyDef; 
spriteBodyDef.type = b2_dynamicBody; 
spriteBodyDef.position.Set(sprite.position.x/PTM_RATIO, 
          sprite.position.y/PTM_RATIO); 
spriteBodyDef.userData = sprite; 
b2Body *spriteBody = _world->CreateBody(&spriteBodyDef); 

b2PolygonShape spriteShape; 
spriteShape.SetAsBox(sprite.contentSize.width/PTM_RATIO/2, 
        sprite.contentSize.height/PTM_RATIO/2); 
b2FixtureDef spriteShapeDef; 
spriteShapeDef.shape = &spriteShape; 
spriteShapeDef.density = 10.0; 
spriteShapeDef.isSensor = true; 
spriteBody->CreateFixture(&spriteShapeDef); 

}

вот код для 'кошки'

- (void)spawnCat { 

CGSize winSize = [CCDirector sharedDirector].winSize; 

CCSprite *cat = [CCSprite spriteWithSpriteFrameName:@"cat.jpg"]; 

//code here....... 


[self addBoxBodyForSprite:cat]; 
[_spriteSheet addChild:cat]; 

}

ЭРВО код для 'автомобиль'

- (void)spawnCar { 

CCSprite *car = [CCSprite spriteWithSpriteFrameName:@"car.jpg"]; 
car.position = ccp(100, 100); 
car.tag = 2; 

[self addBoxBodyForSprite:car]; 
[_spriteSheet addChild:car]; 

}

нормально с кодом выше он выходит из строя, но если я удалить [self addBoxBodyForSprite:car]; из метода spawnCar, то оно не крах, и только «кошки» есть тело, а не «машина» ... .need помочь им очень смущен в данный момент. спасибо

+0

К слову, вы добавляете игрока в качестве ребенка дважды. –

+0

Весь ваш код хорош ... Я предлагаю вам проверить спрайты, есть ли у него изображения или кадр спрайта или нет .... Я загрузил тот же код, и он полностью работает ... – Marine

ответ

0

Можете ли вы установить точку останова в начале метода addBoxBodyForSprite и пройти через код, чтобы определить, в какой момент на самом деле происходит сбой? Важно точно определить, что вызывает проблему ... все в вашем методе выглядит отлично, поэтому вам нужно убедиться, что он здесь, что ошибка на самом деле происходит.

Поиск Xcode Debugging, если вы не знаете, как это сделать.

Смежные вопросы