Через луч будет глючить. Не всегда находит пол под собой. Вот мой код, он конечно тоже не оч хороший, но работает по крайней мере всегда =)
If xKeyHit(key_jump) Then
If pxGetContacts(body)>0 Then
For i=0 To pxGetContacts(body)-1
x# = pxContactGetPointX(body,i)
y# = pxContactGetPointY(body,i)
z# = pxContactGetPointZ(body,i)
Next
If x#>pxBodyGetPositionX(body)-.5 And x#<pxBodyGetPositionX(body)+.5 And y#>pxBodyGetPositionY(body)-2.6 And y#<pxBodyGetPositionY(body)-0 And z#>pxBodyGetPositionZ(body)-.4 And z#<pxBodyGetPositionZ(body)+.4 Then
pxBodyAddLocalForce body,0,pxBodyGetMass(body)/13,0,2
End If
End If
End If
Body - тело игрока. Цифры рядом с координатами pxBodyGetPositionX,Y,Z означают размеры игрока (по оси X и Z +- радиус капсулы игрока, по оси Y позиция капсулы и её нижняя точка). Вообщем координаты в пределах от [-радиус;радиус],[0;-высота капсулы],[-радиус;радиус]
Радиус капсулы желательно указывать несколько меньший, чем есть (если радиус 1, то написать +-.9).
Нижнюю точку чуть чуть ниже (то есть если размер капсулы 2, то нижняя точка должна быть -2.1)
Если что то не понял - пиши