Скроллинг в 2д мире.
Во многих играх есть передвижение по карте... В очень многих
Сейчас я вам расскажу, как это реализовано...
А реализовано это у нас очень просто
Имеем две переменных - координаты камеры.
Допустим, CameraX и CameraY.
И имеем еще две координаты - координаты домика.
Допустим, X и Y.
Надо нам сделать так, чтобы при перемещение камеры домик двигался как положено. То есть, двигаем камеру влево - домик вправо, и в итоге выходил за пределы....
Ну а что делать, если координаты камеры 5000, а координаты домика - 5500 ?)
Думаю, редко у кого такое расширение стоит ^^
Правильно это выщитывается по простейшей формуле - X - CameraX.
то есть, если у нас положение камеры - 5000, а положение домика 5500, то координаты домика на экране 5500 - 5000 = 500 пх.
Graphics 640,480
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 Draw ()
SetRotation Ang
SetColor R,G,B
DrawRect X-CameraX , Y-CameraY,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)
ListAddLast (ListHouse , House)
End Function
For i = 0 To 500
CreateHouse()
Next
While Not KeyDown (Key_escape)
Cls
SetRotation 0
SetColor 50,150,50
DrawRect 0 , 0 , 640,480
For Local House:THouse= EachIn ListHouse
House.Draw
Next
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
Flip
Wend
Пример. Здесь у нас большая куча прямоугольников аля домиков и перемещение по карте. =)
DrawRect X-CameraX , Y-CameraY,W,H а эта типо самый главный код, выщитывающий положение домика на экране
Вначале мну не дошло, пока не объяснил JohnK. =) (за что ему респект )
В итоге ко мне постучалса чел, и попросил помочь. А я тутор написал, хотя, это не тутор - а нечто меньшее =)))
Мож кому-нибудь потребуется...