Показать сообщение отдельно
Старый 20.01.2010, 20:46   #502
Blender
Нуждающийся
 
Аватар для Blender
 
Регистрация: 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
__________________

-Я умею общаться с трудными детьми. Моя мама в подвале держала подпольный детский сад! (С) "Теория большого взрыва"
(Offline)
 
Ответить с цитированием