2012-01-31 3 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).

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

그리고 적절한 정점 수정 :

당신이, 다각형 모양의 정점을 변경하려면 고정과 관련된 형상 개체에 대한 포인터를 잡아 원하는 목적지 그런

fixture = polyBody->CreateFixture(&fixtureDefPoly); 

,

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"와 같은 메서드가 없다고 말합니다. –

관련 문제