Фон - программирование движения.
Сколько времени занимает прохождение уровня?
С какой скоростью движется пейзаж?
Предпологается что экран монитора показвает просчитанное изображение стоя
на месте - сдвигается фон справа налево. Плоскость где находится фон многослойна:
- Самый дальний - фон;
- Слой ближе содержит предметы, скорость движения которых
привязана к скорости движения фона;
- Более ближний слой - персонаж - он стоит на месте имитируя
движение по двигающемуся фону;
- Самый ближний слой - маска растений и камней. Этот слой
создает иллюзию псевдообьема.
Рассчитаем ширину фона.
Если на прохождение уровня отводится 180 сек, а экран должен
проходить за 9 сек, то фирина фона должна превосходить ширину экрана в
20 раз. Так как ширина экрана при разрешение 800х600 (рабочее разрешение
экрана игры) состовляет 800 писелей, то ширина фона будет составлять 800х20=16000
пикселей, а высота фон совпадает с высотой экрана - 600 пикселей.
Чтобы практически проверить это предположение нарисуем эскиз
фона и напишем программу сдвига экрана справа налево.
Внимание Эскиз кусочка фона 1600х600 в формате
bmp "весит" 2.8 мбт. Полный кусок будет около 28 мбт. Надо искать
решение уменьшающее рамер графики.
В Blitz Basic началом координат является верхний правый
угол изображения или спрайта, также как и у экрана монитора.
Перемещение спрайтов производится изменением координат опорной точки.
Опорная точка имеет координаты (X,Y). Уменьшением занчения X спрайт перемещается
влево, увеличением значения - вправо. Усли увеличить Y - спрайт начнет
двигаться вниз, уменьшение приведет к подьему спрайта вверх. Когда основы
движения двухмерных спрайтов стали понятны разберем програмный код.
Для перемещения фона надо:
- Очистить экран;
- Рассчитать новые значения опорной точки;
- Переместить спрайт в соответствии с новыми координатами
опорной точки;
- Просчитать изображение;
- Поменять местами текущий кадр с просчитанным.
Режим вывода экранами - при этом: Один кадр выводится на
экран - он видимый.
Второй невидимый, пока он невидим в него просчитываются спрайты. Когда
информация просчитана кадры меняются местами. В этом случае не видно как
прорисовываются спрайты в кадре - обмен идет экранами.
; Установка разрешения экрана 800х600 пикселов, 16 битный
цвет
Graphics 800,600,16
; Установка режима видеобуфера оюмен информации экранами
SetBuffer BackBuffer()
;Задаем значение переменных
x=0
; Загрузка изображения и назначение значения переменной
gfxPlayer
gfxPlayer=LoadImage("images\fon.jpg")
; Цикл отображения экрана
; Выход если нажать Esc
While Not KeyHit(1)
Cls ; Очистка экрана
If x=-800 Then x=1 ; Когда фон сместится на один экран влево, начинается
повтор фона,
ситуация которая нужна для уменьшения размеров фона.
x=x-1 ; Уменьшение переменной для сдвига влево
DrawImage gfxPlayer,x,0 ; Прорисовка рисунка с координатами (х,0)
Flip ; Обмен изобажениями экрана и буфера
Wend ; Переход на начало цикла
End
Имитация обьема фона (02.12.2002)
Если присмотреться в хорошую погоду на небо - облака почти
не двигаются.
Двигаясь по дороге, замечаешь, как деревья вдали двигаются медленно, а
кустарник, расположенный ближе - двигается быстрее. Для реализации псевдообьема
сделаем четыре слоя.
1. Небо - стоит неподвижно;
2. Деревья - 1 писель за цикл;
3. Персонажы - состоит из некольких спрайтов;
4. Кустарник - 1 пиксель за цикл. Кустарники движутся вместе с фоном
иначе они отрываются от фона и живут своей жизнью...
|