Показать сообщение отдельно
Старый 04.12.2007, 16:21   #12
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Скроллинг в 2д мире.

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() надо бы протестить какой способ шустрее. Да и ставить графический режим, а потом объявлять переменные это как-то... странно.
__________________
(Offline)
 
Ответить с цитированием