2012-01-31 123 views
1

我是新来的Cocos2D和第一我学会了如何做一个圆,然后方,现在我学会了如何创建一个多边形,我有选择一个顶点的量“ b2polygonshape多边形”这里是我对于在动态多边形改变多边形顶点在cocos2d

-(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); 


} 

代码我的问题是如何能够积极改变这个多边形的顶点,并改变它的形状我的屏幕上,无需绘制新的形状。我的目标是创造一个自由流动的一滴。

三江源

回答

2

修改你的最后一条语句返回的指针所得到的b2Fixture对象。这可以保持作为一个类变量(即b2Fixture *在你的类接口夹具)。

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); 

祝你好运!

+0

谢谢你这么多只是一个问题...它说,有没有这样的方法“GetShape”你把在第二行代码 – 2012-01-31 23:51:08