Доброго времени суток. Есть объект rec = Rect(oldmouseX, oldmouseY, 20, 20, dynflag); это кубик. При нажатии мыши он создается в соответствующих координатах, сначала он статичный. Хочу сделать чтобы при перемещении мыши он передвигался за ней, тоесть нужно изменять его координаты oldmouseX, oldmouseY, а при отпускании мыши он становился статичным. В общем то все понятно кроме того как изменять координаты его....
Такой функции как rec->SetPosition к сожалению в библиотеке нету.
FilosAf, в Box2D есть функция rec->SetTransform(b2Vec2 &position,float angle);то есть первый аргумент - это позиция объекта, куда его нужно переместить, а angle - это угол поворота объекта(0.0f чтобы не поворачивать)
Благодарю.
Вот еще, создаю шарик но почему то он статичный хотя задаю ему динамику.
b2Body* Circle(int x, int y, int r, bool dyn=true) { b2BodyDef bodydef; bodydef.position.Set(x*P2M, y*P2M); if(dyn) bodydef.type = b2_dynamicBody; b2Body* body = world->CreateBody(&bodydef); b2CircleShape shape; shape.m_radius = r*P2M; shape.m_p.Set(0, 0); b2FixtureDef fixdef; fixdef.shape = &shape; fixdef.density = 1.0f; fixdef.friction = 0.3f; body->CreateFixture(&fixdef); return body; }
void DrawCircle(b2Vec2 center, float r, float angle) { glColor3f(1, 1, 1); glPushMatrix(); glBegin(GL_TRIANGLE_FAN); glTranslatef(center.x*M2P, center.y*M2P,0); //glRotatef(angle*180.0/3.14, 0, 0, 1); glVertex2f(0.0f, 0.0f); for(float i=0.0; i<360; i+=360.0/1000) glVertex2f((cos(i*3.14/180.0)*r)*M2P, (sin(i*3.14/180.0)*r)*M2P); glEnd(); glPopMatrix(); }
b2Body* tmp=world->GetBodyList(); while(tmp) { if(tmp->GetFixtureList()->GetShape()->GetType()==0) { glPushMatrix(); glTranslatef(100, 30, 0); b2CircleShape* c = ((b2CircleShape*)tmp->GetFixtureList()->GetShape()); DrawCircle(tmp->GetWorldCenter(), c->m_radius, tmp->GetAngle()); glPopMatrix(); }}
Тема в архиве.