Показать сообщение отдельно
Старый 29.04.2014, 19:11   #16
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Учебник по PhysX Wrapper для Blitz3D

Простой пример физической двери (при нажатии на "E" вертится вокруг своей петли):
форум в некоторых местах кода вставил лишние пробелы

pxCreateWorld(1,"key")
...


;============== create compound mesh ===============
door_mesh = xCreateCube()
xScaleMesh door_mesh,0.5,1,0.1
xPositionMesh door_mesh, -0.5,0,0

;============== create compound body ===============
door_desc = pxCreateCompoundDesc()

door_cube_shape = pxCompoundAddCubeShape(door_desc,0.5,1,0.1)
pxCompoundSetShapePos (door_cube_shape, -0.5,0,0)

door_body = pxCreateCompound(door_desc, 1000)
pxBodySetPosition(door_body ,10,7,0)

pxBodySetFrozen(door_body,1)

xPositionEntity door_mesh,pxBodyGetPositionX#(door_body),pxBodyGet PositionY#(door_body),pxBodyGetPositionZ#(door_bod y)
xRotateEntity door_mesh,pxBodyGetRotationPitch#(door_body),pxBod yGetRotationYaw#(door_body),pxBodyGetRotationRoll# (door_body)
;============== END ===============


While Not xKeyHit(1)
...


If KeyHit( 18 )=True Then pxBodySetRotation(door_body,0,pxBodyGetRotationYaw #(door_body)+15,0)
;xPositionEntity door_mesh,pxBodyGetPositionX#(door_body),pxBodyGet PositionY#(door_body),pxBodyGetPositionZ#(door_bod y)
xRotateEntity door_mesh,0,pxBodyGetRotationYaw#(door_body),0


...
UpdateWorld()
RenderWorld()
Wend
Для продолжения, так же можно проверить дистанцию до двери, когда рядом - тогда она активна.
If KeyHit( 18 )=True and EntityDistance(player,door_mesh)<2 then

(так же не зубадьте "пикнуть" дверь)

кстати основная загвоздка бывает в разнице использования PositionEntity ScaleEntity или PositionMesh ScaleMesh
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо LLI.T.A.L.K.E.R. за это полезное сообщение:
KCEPOKC (26.08.2014), St_AnGer (29.04.2014), tirarex (22.05.2014)