Подскажите как реализовать удлиняющуюся руку. Я работаю с физическим движком 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 )));
Если ты будешь каждый раз заново создавать объект, то будут теряться накопленные импульсы. + поидее должны рваться джоинты (т.е. при их ресоздании они тоже ничерта не сохраняют) итд итп. Т.е. никакой физики не будет. Зачем тогда воопще физ. движок юзать?
ЗЫ
Спасибо за ностальгию, со школы уже не видел символов ":=" :)
Тема в архиве.