Показать сообщение отдельно
Старый 23.02.2012, 22:03   #113
Krep_Kospit
Оператор ЭВМ
 
Регистрация: 16.01.2012
Сообщений: 30
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Вопросы про Xors3D

такой вопрос... создаю машинки:

;;;;FIRST CAR
first_car=xLoadAnimMesh("models\first_car.fbx")
xhideentity first_car
Global logoTexture = xLoadTexture("\textures\first_car_tex.jpg")
CreateTank(first_car,  logoTexture, Rand(-200,300),40,Rand(-200,300), 1, 10, 2500, 20, 40,10)
For i=0 To 5
	CreateTank(first_car,  logoTexture, Rand(-200,300),40,Rand(-200,300), 0, 10, 2500, 20, 40,10)
Next
;;;;FIRST CAR
сама функция:

Function CreateTank(model, textureT,x#,y#,z#, is_player, hp,  max_speed, step_speed, max_rotate_wheels,steer_step)
	
;create tank
	;[Block]
	tank.tank= New tank
	tank\model = model
	xEntityTexture tank\model, textureT
	xPositionEntity(tank\model, x,y,z, True)
	xEntityAddBoxShape tank\model,	300, 20,21,49
	tank\is_player=is_player 
	tank\hp=hp
	
;VEHICLE
	xEntityCreateVehicle(tank\model)
	xEntityDisableSleeping(tank\model)
	tank\max_speed = max_speed
	tank\step_speed = step_speed
	tank\cur_speed = 0
	tank\max_rotate_wheels = max_rotate_wheels
	tank\steer_step = steer_step
;VEHICLE end
	
	
	;0 - pivot for hand
	;1 - hand
	;2 - pivot for weapon
	;3 - weapon
	;LEFT_HAND START
	tank\left_weapon[0] = xFindChild(tank\model, "pivot2")
	tank\left_weapon[1] = xLoadAnimMesh("models\hand.fbx") 
	
	xExtractAnimSeq tank\left_weapon[1], 0,100
	xExtractAnimSeq tank\left_weapon[1], 100,200
	
	;weapon
	tank\left_weapon[3] = xLoadAnimMesh("models\axe.fbx") 
	tank\left_weapon[2] = xFindChild(tank\left_weapon[1], "Box001")
	xPositionEntity (tank\left_weapon[3], xentityx(tank\left_weapon[2]), xentityy(tank\left_weapon[2]),xentityz(tank\left_weapon[2]))
	xentityparent (tank\left_weapon[3], tank\left_weapon[2])
	;weapon end
	xScaleEntity tank\left_weapon[0], 1,1,1
	xEntityParent (tank\left_weapon[2],xFindChild(tank\left_weapon[1], "bone004"))
	xEntityParent (tank\left_weapon[1], tank\left_weapon[0], False)
	xEntityTexture tank\left_weapon[0], logoTexture
	;LEFT_HAND End
	
	;Right_HAND START
	tank\Right_weapon[0] = xFindChild(tank\model, "pivot1")
	tank\Right_weapon[1] = xLoadAnimMesh("models\hand.fbx") 
	
	xExtractAnimSeq tank\right_weapon[1], 0,100
	xExtractAnimSeq tank\right_weapon[1], 200,300
	
	
	;weapon
	tank\Right_weapon[3] = xLoadAnimMesh("models\axe.fbx") 
	tank\Right_weapon[2] = xFindChild(tank\Right_weapon[1], "Box001")
	xPositionEntity (tank\Right_weapon[3], xentityx(tank\Right_weapon[2]), xentityy(tank\Right_weapon[2]),xentityz(tank\Right_weapon[2]))
	xentityparent (tank\Right_weapon[3], tank\Right_weapon[2])
	;weapon end
	xScaleEntity tank\Right_weapon[0], 1,1,1
	xEntityParent (tank\Right_weapon[2],xFindChild(tank\Right_weapon[1], "bone004"))
	xEntityParent (tank\Right_weapon[1], tank\Right_weapon[0], False)
	xEntityTexture tank\Right_weapon[0], logoTexture
	;Right_HAND End
	
	
	
	tank\target=0
	number=number+1
	tank\cur_number = number
	
	;CUBE
	;[Block]
	;0 - left
	;1 - right
	;2 - center
	;3 - first
	tank\cube[2]=xcreatecube()
	xEntityParent (tank\cube[2],tank\model, False)
	xPositionEntity (tank\cube[2], xentityx(tank\model), xentityy(tank\model),xentityz(tank\model)-35, True)
	xscaleentity tank\cube[2], 1,1,1
	xentityalpha tank\cube[2],0;.3
	
	tank\cube[0]=xcreatecube()
	xPositionEntity tank\cube[0], xentityx(tank\model)+20, xentityy(tank\model),xentityz(tank\model)-35
	xEntityParent tank\cube[0],tank\model
	xscaleentity tank\cube[0], 1,1,1
	xentityalpha tank\cube[0],0;.3
	
	tank\cube[1]=xcreatecube()
	xPositionEntity tank\cube[1], xentityx(tank\model)-20, xentityy(tank\model),xentityz(tank\model)-35
	xEntityParent tank\cube[1],tank\model
	xscaleentity tank\cube[1], 1,1,1
	xentityalpha tank\cube[1],0;.3
	
	tank\cube[3]=xcreatecube()
	xPositionEntity tank\cube[3], xentityx(tank\model), xentityy(tank\model),xentityz(tank\model)-55
	xEntityParent tank\cube[3],tank\model
	xscaleentity tank\cube[3], 1,1,1
	xentityalpha tank\cube[3],0;.3
	
	;[End Block]
	
	tank\b=xcreatecube();pick
	xscaleentity tank\b, 12,6,17;12,6,25
	xEntityParent tank\b,tank\model,False
	xPositionEntity (tank\b, xentityx(tank\model), xentityy(tank\model),xentityz(tank\model), True)
	xentityalpha tank\b,0;.3
	xEntityPickMode tank\b,3
	
	;[End Block]
;CREATE WHEELS
	;[Block]
	
	For l = 0 To 5
		wheel.wheel = New wheel
		
		If l=5 Then wheel\entity = xFindChild(tank\model, "wheel5")
		If l=3 Then wheel\entity = xFindChild(tank\model, "wheel3")
		If l=1 Then wheel\entity = xFindChild(tank\model, "wheel1")
		If l=4 Then wheel\entity = xFindChild(tank\model, "wheel4")
		If l=2 Then wheel\entity = xFindChild(tank\model, "wheel2")
		If l=0 Then wheel\entity = xFindChild(tank\model, "wheel0")
		
		xEntityParent wheel\entity, tank\model
		
		xEntityTexture wheel\entity, wheelT
	    wheel\max_Rotation = 15000
		xEntityAddWheel(tank\model, wheel\entity)
		xEntityWheelSetConnectionPoint(tank\model, l, xEntityX(wheel\entity), xEntityY(wheel\entity), xEntityZ(wheel\entity))
		xEntityWheelSetAxle(tank\model, l, -1.0, 0.0, 0.0)
		xEntityWheelSetRadius(tank\model, l, 1.0)
		xEntityWheelSetMaxSuspensionForce(tank\model, l, wheel\max_Rotation)
		xEntityWheelSetSuspensionLength(tank\model, l, 1.5)
		xEntityWheelSetSuspensionStiffness(tank\model, l, 3.8)
		xEntityWheelSetSuspensionDamping(tank\model, l,2.22)
		xEntityWheelSetSuspensionCompression(tank\model,l, 0.3)
		xEntityWheelSetFriction(tank\model, l, 300)
		xEntityWheelSetRollInfluence(tank\model, l, 0.18);
	Next
	;[End Block]
;CREATE WHEELS END
; tank creation end
	SeedRnd xmillisecs()
End Function
получаю в итоге: все создаваемые машины появляются в одной и той же точке. Это решается, если вместо tank\model = model пишу tank\model = xCopyEntity(model). Но мне кажется, что в этом случае программа загружается дольше, чем должна. Можно как-то оптимизировать код?
(Offline)
 
Ответить с цитированием