Global CameraX:Int , CameraY:Int
Global ListHouse:TList=New TList
Global MX:Int, MY:Int
Type THouse
Field X:Int
Field Y:Int
Field R:Int
Field G:Int
Field B:Int
Field W:Int
Field H:Int
Field ANg:Int
Method New()
ListAddLast (ListHouse , Self)
End Method
Method Draw ()
SetRotation Ang
SetColor R,G,B
DrawRect X , Y,W,H
End Method
End Type
Function CreateHouse()
Local House:THouse=New THouse
House.X = Rand(0,5000)
House.Y = Rand(0,5000)
House.R = Rand(0,255)
House.G = Rand(0,255)
House.B = Rand(0,255)
House.W = Rand(0,200)
House.H = Rand(0,200)
House.Ang = Rand(0,360)
End Function
For i = 0 To 500
CreateHouse()
Next
Graphics 640,480
' отображать только то, что помещается во вьюпорте - а вьюпорт от 0,0 до ширины/высоты окна
SetViewport(0,0,640,480)
While Not KeyDown (Key_escape)
Cls
SetRotation 0
' здесь рисуем то, что не зависит от камеры
SetOrigin(0,0)
SetColor 50,150,50
DrawRect 0 , 0 , 640,480
MX = MouseX()
MY = MouseY()
If MX < 40 Then CameraX:-5
If MX > 600 Then CameraX:+5
If MY < 40 Then CameraY:-5
If MY > 440 Then CameraY:+5
' здесь сдвигаем ориджин в новое место, соответствующее координатам камеры
SetOrigin(-CameraX, -CameraY)
For Local House:THouse= EachIn ListHouse
House.Draw
Next
Flip
Wend
переделал с setOrigin() надо бы протестить какой способ шустрее. Да и ставить графический режим, а потом объявлять переменные это как-то... странно.