Показать сообщение отдельно
Старый 15.01.2015, 02:48   #1
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Передвижение по сетке

Этот код что я написал работает криво, вернее движение дерганое из-за позиционирования но без него никак, нужно же как-то привязаться к виртуальной сетке. Помогите пожалуйста.

Function MoveToGrid(Entity=0,camera=0,A=17,B=31,C=30,D=32)
	
	Local SpeedMove#=.04
	Local SizeGrid=1
	Local DX#,DZ#
	
	;Обработка клавиш
	If KeyHit(A) And movez=0 Then movez=1:EZM= EntityZ(Entity)+SizeGrid:	timeout=1
	If KeyHit(B) And movez=0 Then movez=2:EZM=  EntityZ(Entity)-SizeGrid:	timeout=1
	If KeyHit(C) And movez=0 Then movez=3:EXM= EntityX(Entity)-SizeGrid:	timeout=1
	If KeyHit(D) And movez=0 Then movez=4:EXM=EntityX(Entity)+SizeGrid:	timeout=1
	
	If KeyDown(A) And movez=0 Then movez=1:EZM= EntityZ(Entity)+SizeGrid:	timeout=1
	If KeyDown(B) And movez=0 Then movez=2:EZM=  EntityZ(Entity)-SizeGrid:	timeout=1
	If KeyDown(C) And movez=0 Then movez=3:EXM= EntityX(Entity)-SizeGrid:	timeout=1
	If KeyDown(D) And movez=0 Then movez=4:EXM=EntityX(Entity)+SizeGrid:	timeout=1
	
	;Перемещение тела по сетке 
	If movez=1
		EZ=EntityZ(Entity)
		MoveEntity Entity,0,0,SpeedMove
		If EZ>=EZM
			PositionEntity Entity,EntityX(Entity),EntityY(Entity),EZM
			movez=0
		EndIf	
	EndIf
	;-----------------------------------------------------------------------------------------------
	If movez=2
		
		EZ=EntityZ(Entity)
		MoveEntity Entity,0,0,-SpeedMove
		If EZ<=EZM
			PositionEntity Entity,EntityX(Entity),EntityY(Entity),EZM
			movez=0
		EndIf	
	EndIf
	;-----------------------------------------------------------------------------------------------
	If movez=3
		
		EX=EntityX(Entity)
		MoveEntity Entity,-SpeedMove,0,0
		If EX<=EXM
			PositionEntity Entity,EXM,EntityY(Entity),EntityZ(Entity)
			movez=0
		EndIf	
	EndIf
	;-----------------------------------------------------------------------------------------------
	If movez=4
		
		EX=EntityX(Entity)
		MoveEntity Entity,SpeedMove,0,0
		If EX>=EXM
			PositionEntity Entity,EXM,EntityY(Entity),EntityZ(Entity)
			movez=0
		EndIf	
	EndIf
	timeout=timeout-0.01
	
	If timeout<0
		movez=0
		timeout=0
	EndIf
	;-----------------------------------------------------------------------------------------------
	;Смякчение движения камеры
	DX#=EntityX(Entity,True)-EntityX(camera,True)
	DZ#=EntityZ(Entity,True)-EntityZ(camera,True)
	TranslateEntity camera,DX*.05,0,DZ*.05
	
End Function
(Offline)
 
Ответить с цитированием