forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=15)
-   -   Учебник по PhysX Wrapper для Blitz3D (http://forum.boolean.name/showthread.php?t=7568)

LLI.T.A.L.K.E.R. 29.04.2014 19:11

Ответ: Учебник по 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


Часовой пояс GMT +4, время: 22:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot