Войти
Box2DФорумОбщее

Изменение положения объекта

#0
13:08, 26 авг. 2013

Доброго времени суток. Есть объект rec = Rect(oldmouseX, oldmouseY, 20, 20, dynflag); это кубик. При нажатии мыши он создается в соответствующих координатах, сначала он статичный. Хочу сделать чтобы при перемещении мыши он передвигался за ней, тоесть нужно изменять его координаты oldmouseX, oldmouseY, а при отпускании мыши он становился статичным. В общем то все понятно кроме того как изменять координаты его....
Такой функции как rec->SetPosition к сожалению в библиотеке нету.


#1
13:14, 26 авг. 2013

FilosAf, в Box2D есть функция rec->SetTransform(b2Vec2 &position,float angle);то есть первый аргумент - это позиция объекта, куда его нужно переместить, а angle - это угол поворота объекта(0.0f чтобы не поворачивать)

#2
10:23, 27 авг. 2013

Благодарю.

#3
10:31, 27 авг. 2013

Вот еще, создаю шарик но почему то он статичный хотя задаю ему динамику.

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();
    }}
Вроде бы все должно работать. Но шарик статичен

Box2DФорумОбщее

Тема в архиве.