#iphone #cocos2d-iphone
#iPhone #cocos2d-iphone
Вопрос:
Я пытаюсь создать игру в Cocos 2D и Box 2D
но когда я пытаюсь ввести «setAsEdge», он просто сказал мне, что функция не существует
мой код:
// Define the ground body.
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
// Call the body factory which allocates memory for the ground body
// from a pool and creates the ground box shape (also from a pool).
// The body is also added to the world.
groundBody = world->CreateBody(amp;groundBodyDef);
// Define the ground box shape.
b2PolygonShape groundBox;
// bottom
groundBox.SetAsEdge(b2Vec2(0,FLOOR_HEIGTH/PTM_RATIO), b2Vec2(screenSize.width*2.0f/PTM_RATIO,FLOOR_HEIGTH/PTM_RATIO));
groundBody->CreateFixture(amp;groundBox,0);
// top
groundBox.SetAsEdge(b2Vec2(0,screenSize.height/PTM_RATIO), b2Vec2(screenSize.width*2.0f/PTM_RATIO,screenSize.height/PTM_RATIO));
groundBody->CreateFixture(amp;groundBox,0);
// left
groundBox.SetAsEdge(b2Vec2(0,screenSize.height/PTM_RATIO), b2Vec2(0,0));
groundBody->CreateFixture(amp;groundBox,0);
// right
groundBox.SetAsEdge(b2Vec2(screenSize.width*2.0f/PTM_RATIO,screenSize.height/PTM_RATIO), b2Vec2(screenSize.width*2.0f/PTM_RATIO,0));
groundBody->CreateFixture(amp;groundBox,0);
Ошибка: нет элемента с именем ‘SetAsEdge’ в ‘b2PolygonShape’. Я использую Cocos 2D 1.0.1 Стабильный
Спасибо всем
Ответ №1:
Вы работаете с Box2D 2.2.1, API которого изменился по сравнению с версией Box2D в Cocos2D версии v1.0.1 (используется Box2D версии v2.1.2). Я так понимаю, вы используете Cocos2D 2.0 alpha? Если это так, предположительно, он поставляется с обновленными шаблонами проекта Xcode, поэтому вы можете установить их и создать проект на основе новых шаблонов.
Вот как я устанавливаю ограничительную рамку границы, используя тело с прикрепленными к нему 4 фигурами:
// for the screenBorder body we'll need these values
CGSize screenSize = [CCDirector sharedDirector].winSize;
float widthInMeters = screenSize.width / PTM_RATIO;
float heightInMeters = screenSize.height / PTM_RATIO;
b2Vec2 lowerLeftCorner = b2Vec2(0, 0);
b2Vec2 lowerRightCorner = b2Vec2(widthInMeters, 0);
b2Vec2 upperLeftCorner = b2Vec2(0, heightInMeters);
b2Vec2 upperRightCorner = b2Vec2(widthInMeters, heightInMeters);
// Define the static container body, which will provide the collisions at screen borders.
b2BodyDef screenBorderDef;
screenBorderDef.position.Set(0, 0);
b2Body* screenBorderBody = world->CreateBody(amp;screenBorderDef);
b2EdgeShape screenBorderShape;
// Create fixtures for the four borders (the border shape is re-used)
screenBorderShape.Set(lowerLeftCorner, lowerRightCorner);
screenBorderBody->CreateFixture(amp;screenBorderShape, 0);
screenBorderShape.Set(lowerRightCorner, upperRightCorner);
screenBorderBody->CreateFixture(amp;screenBorderShape, 0);
screenBorderShape.Set(upperRightCorner, upperLeftCorner);
screenBorderBody->CreateFixture(amp;screenBorderShape, 0);
screenBorderShape.Set(upperLeftCorner, lowerLeftCorner);
screenBorderBody->CreateFixture(amp;screenBorderShape, 0);
В качестве альтернативы, получите Kobold2D Preview 5 (доступен к завтрашнему дню) и взгляните на проект шаблона Physics-Box2D. Я внес все необходимые изменения для запуска приложения Box2D версии 2.2.1, включая изменения, необходимые для класса рисования Box2D debug. Я также размещаю последнюю ссылку на Box2D API.
Ответ №2:
Например, используйте b2EdgeShape вместо b2PolygonShape:
b2EdgeShape groundBox;
groundBox.Set( b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO,0));
Ответ №3:
использование
setAsBox(0,0,b2vec2(0,0),0);