29.04.2014, 19:11
|
#16
|
Мастер
Регистрация: 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)
|
|