Показать сообщение отдельно
Старый 03.12.2007, 22:08   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Плохо Скроллинг в 2д мире.

Скроллинг в 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. =) (за что ему респект )
В итоге ко мне постучалса чел, и попросил помочь. А я тутор написал, хотя, это не тутор - а нечто меньшее =)))


Мож кому-нибудь потребуется...
(Offline)
 
Ответить с цитированием