ПроЭктировщик
Регистрация: 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.
Причина: дополнение
|