Изменение вершин многоугольника в динамическом многоугольнике в cocos2d - PullRequest
1 голос
/ 31 января 2012

Я новичок в cocos2d, и сначала я узнал, как сделать круг, а затем квадрат, и теперь я научился создавать многоугольник с количеством вершин, которые я выбираю с помощью "многоугольника b2polygonshape", и вот мой код для этого

-(void) createDynamicPoly:(CGPoint)p;
{

b2BodyDef bodyDefPoly;
bodyDefPoly.type = b2_dynamicBody; 
bodyDefPoly.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
b2Body *polyBody = world->CreateBody(&bodyDefPoly);

int count = 8;
b2Vec2 vertices[8];

vertices[0].Set(10.0f/PTM_RATIO,0.0/PTM_RATIO);
vertices[1].Set(20.0f/PTM_RATIO,0.0f/PTM_RATIO);
vertices[2].Set(30.0f/PTM_RATIO,10.0f/PTM_RATIO);
vertices[3].Set(30.0f/PTM_RATIO,20.0f/PTM_RATIO); 
vertices[4].Set(20.0f/PTM_RATIO,30.0f/PTM_RATIO);
vertices[5].Set(10.0f/PTM_RATIO,30.0f/PTM_RATIO); 
vertices[6].Set(00.0f/PTM_RATIO,20.0f/PTM_RATIO);
vertices[7].Set(0.0f/PTM_RATIO,10.0f/PTM_RATIO);

b2PolygonShape polygon; 
polygon.Set(vertices, count);

b2FixtureDef fixtureDefPoly;
fixtureDefPoly.shape = &polygon;
fixtureDefPoly.density = 1.0f;
fixtureDefPoly.friction = 0.3f;
polyBody->CreateFixture(&fixtureDefPoly);


}

Мой вопрос заключается в том, как я могу активно изменять вершины этого многоугольника и изменять его форму на моем экране, не рисуя новую форму.Моя главная цель - создать свободно распространяющуюся каплю.

Спасибо

1 Ответ

2 голосов
/ 31 января 2012

Измените ваш последний оператор, чтобы он возвращал указатель на результирующий объект b2Fixture. Это можно сохранить как переменную класса (т. Е. B2Fixture * fixture в интерфейсе вашего класса).

fixture = polyBody->CreateFixture(&fixtureDefPoly);

Затем, где бы вы ни захотели изменить вершины многоугольной формы, возьмите указатель на объект формы, связанный с вашим прибором:

b2PolygonShape* shape = (b2PolygonShape*) fixture->GetShape();

И измените вершины соответствующим образом:

shape->m_vertices[0].Set(new_x0/PTM_RATIO,new_y0/PTM_RATIO); 
shape->m_vertices[1].Set(new_x1/PTM_RATIO,new_y1/PTM_RATIO); 
shape->m_vertices[2].Set(new_x2/PTM_RATIO,new_y2/PTM_RATIO); 
...
shape->m_vertices[7].Set(new_x7/PTM_RATIO,new_y7/PTM_RATIO); 

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...