Показать сообщение отдельно
Старый 02.06.2014, 21:10   #3
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: простой ray casting 2d array hit

Ну типо камера обзора 2д


Const RotateSpeed# = 5 , MoveSpeed# = 1
Global angleViewX# , angleViewY#

ttt = CreateTimer(120)
;SeedRnd(MilliSecs())
Const numT=10 , sizeT = 20
Dim AA(numT*numT,numT*numT)

Graphics 800,600,32,2
SetBuffer BackBuffer()


camPosX#=300
camPosY#=200
angleView#= 180

For b =0 To numT
	For a =0 To numT
	 AA(a,b) = Rnd (1 ) 
		
	Next
Next
While Not KeyHit(1)
Cls 
;x2 =MouseX() : y2=MouseY()

If KeyDown(205) Then angleView#  = angleView# +RotateSpeed  ; RIGHT
If KeyDown(203) Then angleView#  = angleView# -RotateSpeed   ; LEFT
If KeyDown(200) Then camPosX#  = camPosX# +MoveSpeed*angleViewX :  camPosY#  = camPosY# +MoveSpeed*angleViewY  ; DOWN
If KeyDown(208) Then camPosY#  = camPosY# +MoveSpeed* -angleViewY  :  camPosX#  = camPosX# +MoveSpeed* -angleViewX  ; UP

WaitTimer(ttt)

View2D(camPosX#,camPosY#,angleView#,offset=4)

For b =0 To numT
	For a =0 To numT
		If AA(a,b) = 1 Then Rect a*sizeT ,b*sizeT ,sizeT  ,sizeT  ,0
		If AA(a,b) = 2 Then Rect a*sizeT ,b*sizeT ,sizeT  ,sizeT  ,1
		If AA(a,b) = 2 Then AA(a,b) = 1
	Next
Next

text 500,50,"Управляем стрелками клавитуры "

Flip 
Wend
FreeTimer(tttt)
End 


Function View2D#(camPosX#,camPosY#,angleView#,direction = 100)
	IangleView =angleView  Mod 360
	newDirection# =  direction *0.6
	angleViewX# =Cos(angleView )
	angleViewY#= Sin(angleView )
		
	For CV# = 30 To -30 Step -1
	camDirX# =camPosX
	camDirY# =camPosY	
		vd	=0
		While vd < (direction)
				angleViewX1# =Cos(angleView-CV )
				angleViewY1#= Sin(angleView-CV )
				
				x =  Floor(camDirX/sizeT) : y= Floor(camDirY/sizeT)
				If  ( x   <=numT And y    <=numT  And x   >=0 And y  >=0)
					If AA(x,y) =1 Or AA(x,y) =2 Then 
					AA(x,y) =2 
					StopLine = 1 
					 Exit 
					EndIf
				EndIf	
				
				WritePixel camDirX ,camDirY,$666600
				camDirX# =camDirX+offset*angleViewX1
				camDirY# =camDirY+offset*angleViewY1	
			vd = vd +offset			
		Wend 
	Next  
	Line camPosX,camPosY,camPosX+direction*Cos(angleView ),camPosY+direction*Sin(angleView )
	Line camPosX,camPosY,camPosX+direction*Cos(angleView-30 ),camPosY+direction*Sin(angleView-30 )
	Line camPosX,camPosY,camPosX+direction*Cos(angleView- -30 ),camPosY+direction*Sin(angleView- -30 )
End Function
__________________
Мой проект здесь

Последний раз редактировалось polopok, 02.06.2014 в 21:17. Причина: дополнение
(Offline)
 
Ответить с цитированием