Нуждающийся
Регистрация: 16.01.2010
Сообщений: 68
Написано 4 полезных сообщений (для 5 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Сообщение от cancel
Работаю тут потихонку (когда настроение) над свойм GTA2 и проблема человеками.
В GTA2 они просто ходят по своей дороги и когда уже им навстречу идет стена дома например, тогда они уже об этом знают и плавно переворачиваются.
Не доходя до стенки.
А у меня если с стеной или чем угодно "collision" тогда реско поворот на 360 градусов.
Вообще не реально, ходят как столбы.
Как сделать плавный поворот и предсказать что вот уже стенка или конец дороги идет и пора переворачивать??
|
В примерах физикса есть пример :
вот посмотри может поможет

Graphics3D 640,480,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs ()
;Lights
light01=CreateLight()
PositionEntity light01,15,66,15
;Plane
plane=CreatePlane()
text01=LoadTexture("..\media\tile.jpg")
ScaleTexture Text01,2,2
EntityTexture plane,text01
;Camera
cam=CreateCamera()
PositionEntity cam,20,60,-40
RotateEntity cam,60,20,0
;PX
PxCreateWorld(1, "key")
pxSetGravity(0,-10,0)
;--------------Wall-----------
cu1=CreateCube();
ScaleEntity cu1,50,2,1
PositionEntity cu1,0,1,50
cu1_body = pxBodyCreateCube(50,2,1,0)
pxBodySetPosition (cu1_body,0,1,50)
cu2=CreateCube();
ScaleEntity cu2,50,2,1
PositionEntity cu2,0,1,-50
cu2_body = pxBodyCreateCube(50,2,1,0)
pxBodySetPosition (cu2_body,0,1,-50)
cu3=CreateCube();
ScaleEntity cu3,1,2,50
PositionEntity cu3,-50,1,0
cu3_body = pxBodyCreateCube(1,2,50,0)
pxBodySetPosition (cu3_body,-50,1,0)
cu4=CreateCube();
ScaleEntity cu4,1,2,50
PositionEntity cu4,50,1,0
cu4_body = pxBodyCreateCube(1,2,50,0)
pxBodySetPosition (cu4_body,50,1,0)
For i=0 To 30
Create_Px_Cube()
Next
;-------------Trigger---------------
Create_Px_AICube()
;--------------- speed-----------
ang_speed% = Rand(0,1)
ang_speed = 1- 2*ang_speed
;-------------Main Loop-------
Repeat
If KeyHit(57) Create_Px_AICube()
time=MilliSecs ()
pxRenderPhysic(30,0)
Update_Px_Cube()
Update_Px_AICube()
pxUpdateTriggers()
New_time=MilliSecs ()-time
UpdateWorld()
RenderWorld()
frames=frames+1
If MilliSecs()-render_time=>1000 fps1=frames : frames=0 : render_time=MilliSecs()
Text 10,50,"FPS: "+fps1+" dll time: "+New_time
Text 10,10,"Space - Add Ai Cube"
Flip
Until KeyHit(1)
End
Type Px_Cube
Field cube_body%
Field cube_mesh%
Field red#, green#, blue#
End Type
Type Px_AICube
Field cube_body%, cube_mesh%
Field trigger%, triger_mesh%
Field ang_speed
End Type
Function Create_Px_AICube()
acu.Px_AICube = New Px_AICube
acu\cube_mesh = CreateCube();
ScaleEntity acu\cube_mesh,2,2,2
acu\cube_body = pxBodyCreateCube(2,2,2,10)
pxBodySetPosition (acu\cube_body,0,1,0)
pxBodySetFrozenRotX(acu\cube_body, 1)
pxBodySetFrozenRotZ(acu\cube_body, 1)
pxBodySetRotation(acu\cube_body, 0, Rand(-180,180), 0)
acu\triger_mesh = CreateCube(acu\cube_mesh)
ScaleEntity acu\triger_mesh,0.7,0.7,3
EntityColor acu\triger_mesh,0,200,0
EntityAlpha acu\triger_mesh,0.5
PositionEntity acu\triger_mesh,0,0,2.5
acu\trigger = pxTriggerCreateCube(1.4,1.4,6)
pxBodySetCollisionGroup(acu\trigger, 1)
pxBodySetCollisionGroupFlag(1, 1, 0)
acu\ang_speed% = Rand(0,1)
acu\ang_speed = 1- 2*acu\ang_speed
End Function
Function Update_Px_AICube()
For acu.Px_AICube = Each Px_AICube
pxBodySetEntity( acu\cube_mesh, acu\cube_body)
pxTriggerSetPosition(acu\trigger, EntityX#(acu\triger_mesh,1), EntityY#(acu\triger_mesh,1), EntityZ#(acu\triger_mesh,1))
pxTriggerSetRotation(acu\trigger, 0, EntityYaw#(acu\triger_mesh,1), 0)
pxBodySetLocalLinearSpeed(acu\cube_body,0, 0, 4)
If (pxTriggerGetBody(acu\trigger, 1))
pxBodySetAngularSpeed(acu\cube_body,0, acu\ang_speed*1, 0)
EntityColor acu\triger_mesh,0,0,200
Else
acu\ang_speed = Rand(0,1)
acu\ang_speed = 1- 2*acu\ang_speed
EntityColor acu\triger_mesh,0,200,0
EndIf
Next
End Function
Function Create_Px_Cube()
ocu.Px_Cube = New Px_Cube
y# = Rnd (1,3)
x# = Rnd (1,3)
z# = Rnd (1,3)
ocu\cube_mesh=CreateCube ()
ScaleMesh ocu\cube_mesh,x,y,z
ocu\red = Rand(0,100)
ocu\green = Rand(0,255)
ocu\blue = Rand(0,255)
EntityColor ocu\cube_mesh, ocu\red#, ocu\green#, ocu\blue#
ocu\cube_body=PxBodyCreateCube(x,y,z, 10)
pxBodySetPosition(ocu\cube_body,Rand(-45,45),30,Rand(-45,45))
End Function
Function Update_Px_Cube()
For ocu.Px_Cube = Each Px_Cube
If pxTriggerGetBodyTrigger(ocu\cube_body)
EntityColor ocu\cube_mesh,255,0,0
Else
EntityColor ocu\cube_mesh, ocu\red#, ocu\green#, ocu\blue#
EndIf
pxBodySetEntity(ocu\cube_mesh, ocu\cube_body)
Next
End Function
__________________
-Я умею общаться с трудными детьми. Моя мама в подвале держала подпольный детский сад! (С) "Теория большого взрыва"
|