Re[5]: кто знает как плавно скроллить игровое поле(VC)?
От: PavZ  
Дата: 06.09.03 06:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>Cпокадровым все понятно, если объект ушел за эекран, можно следущий экран загружать, а вот как быть с плавной прокруткой, тут какой принцип? Буду благодарен если знающие люди помогут в этом вопросе. Опыта в разработке игр у мен почти никакого, поэтому постарайтесь не обижаться на подобные вопросы, они обусловлены пробелами в знаниях по теме. Всем спасибо.



Делаешь "экран" в памяти нужного размера например = 10 экранам, заполняешь его перед началом игры. Потом копируешь прямоугольник с координатами (X,0) (X+ширина 1 экрана, Высота Экрана) на экран ( в точку с x=0,y=0). чтобы сдвинуть прибавляешь к X некоторую величину, например 1. и снова копируешь ... и т.д.

Для экономии памяти можно сделать 2 экрана ( взять принцип из покадрового ). Т.е. когда юзер в 1-м экране — грузануть 2-й ... когда во 2-м грузануть в 1-й следующий. Только алгоритм придется немного усложнить. т.е. сделать эти 2 экрана зациклеными...

Xloc — тек. локальная координата . меняется от 0 до 2*Щирина_Экрана...

Xloc = X mod (2*Ширина Экрана) // т.е. локальная координата получается как остаток от деления X глоб. на 2 ширины экрана.

ScrN = (X/Ширина Экрана); // номер глоб. экрана ( по игровой карте );

ScrNloc = (ScrN mod 2)+1; // номер лок.экрана либо 1-й либо 2-й , при его изменении нужно соотв. загрузить
в локальный экран с номером (3-ScrNloc) глобальный ( по карте ) с номером (ScrN+1)



соотв. когда X<Ширина одного экрана , то делаем по предыдущему алгоритму
когда X >= Ширина одного экрана ( нужно отображать часть 2-го и за ней часть 1-го экрана ).

Scr1Width = (X-Ширина одного Экрана) // — получаем необходимую ширину куска от 1-го экрана
Scr2Width = (Ширина одного Экрана — Scr1Width) // — получаем необходимую ширину куска от 2-го экрана

и копируем прямоугольник 2 и 1 в точки на видимом экране (0,0) — кусок 2-го экрана и (Scr2Width,0) — кусок 1-го экрана.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.