ПрограммированиеФорумФизика

Удлиняющаяся рука. Как реализовать?

#0
13:13, 27 авг 2011

Подскажите как реализовать удлиняющуюся руку. Я работаю с физическим движком Chipmunk, поэтому возникают трудности.
Я сейчас реализовываю так: сначала удаляю объект, а потом создаю новый, с новой длиной. Проблема в том, что получается, что либо рука с обеих сторон удлиняется, либо вообще не удлиняется.
Вот с какими параметрами я сначала создаю руку:

     
   handVerts[0] := cpv(-handWidth/2.0, -handHeight/2.0);  //это вершины прямоугольника 
   handVerts[1] := cpv(-handWidth/2.0, handHeight/2.0); 
   handVerts[2] := cpv(handWidth/2.0, handHeight/2.0 ); 
   handVerts[3] := cpv(handWidth/2.0, -handHeight/2.0 ); 
   handBody.p := cpv( x + w/2.0 - 4, y + h/2.0 + 4);  //позиция прямоугольника(x, y - начальные координаты, w, h - размеры самого человека) 
   constraintBodyHand := cpSpaceAddConstraint(space, cpPivotJointNew(body, handBody, cpv(x + 8, y )));  //точка соединения тела и руки

Как я создаю объекты при удлинении руки

   handHeight := handHeight + 5; 
   handVerts[0] := cpv(-handWidth/2.0, -handHeight/2.0); 
   handVerts[1] := cpv(-handWidth/2.0, handHeight/2.0); 
   handVerts[2] := cpv(handWidth/2.0, handHeight/2.0 ); 
   handVerts[3] := cpv(handWidth/2.0, -handHeight/2.0 ); 
   handBody.p := cpv( body.p.x + w/2.0 - 4, body.p.y + h/2.0 + 4);  //body.p - координаты самого человечка
   constraintBodyHand := cpSpaceAddConstraint(space, cpPivotJointNew(body, handBody, cpv(body.p.x + 8, body.p.y ))); 
#1
14:09, 29 авг 2011

Если ты будешь каждый раз заново создавать объект, то будут теряться накопленные импульсы. + поидее должны рваться джоинты (т.е. при их ресоздании они тоже ничерта не сохраняют) итд итп. Т.е. никакой физики не будет. Зачем тогда воопще физ. движок юзать?

ЗЫ
Спасибо за ностальгию, со школы уже не видел символов ":=" :)

ПрограммированиеФорумФизика

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