DiNGS – программирование игр в домашних условиях. Часть 4.
АрхивПрограммазм (архив)Продолжаем практиковаться и двигать объекты.
В двух словах это можно сказать так:
1. Вывести спрайт в координаты x и у.
2. Изменить значение координаты х для движения по горизонтали, y – для движения по вертикали и оба, если хотим получить движение по диагонали.
То же самое на языке DiNGS: SPRITE 0, x,350,0 //выводим спрайт x=x+1 //изменяем координату х для движения по горизонтали
Но если мы все просто впишем в наше предыдущее приложение (программу), то никакого движения не увидим. В чем же дело? Необходимо чтобы все выполнялось в повторяющемся цикле. То есть х не один раз увеличилась на единицу, а увеличивалась постоянно.
Метка: Вывести спрайт Увеличить координату Х Перейти на метку Метка
Для цикла используем оператор While ... Wend. Что аналогично меткам, но более удобно. Многие программисты, почему-то избегают пользоваться оператором GOTO – им кажется, что это несерьезный оператор для начинающих, который профессионалу не подойдет (пользоваться им зазорно, это для ламеров и т.д.). Мне кажется пользоваться нужно и можно любыми операторами, если они облегчают программирование. Иногда проще использовать одну метку и оператор GOTO, чем писать кучу ненужного кода. Не могу, не согласится с утверждением, что частое, неумеренное использование меток и GOTO ведет к загромождению и запутанности кода, но совет один – пользоваться всем нужно в меру – и от сахара зубы болеть могут. В качестве условия выхода зададим клавишу ESC (код 1 - выяснить это можно запустив утилиту keycodes и нажав клавишу ESC). Конструкция выглядит так:
While KEY(1)=0 //продолжать пока не нажата клавиша ESC Вывод спрайтов Изменение координат и т.д. WEND
Заставим двигаться картинку шара по экрану. Полный текст игры:
LOADSPRITE "bita.bmp", 0 // загрузить картинку биты в ячейку № 0 X=100 //присвоим значение переменной Х WHILE KEY(1)=0 //начало цикла игры – ее сердце SPRITE 0, Х,350,0 // вывести спрайт биты в координаты X=X+1 // увеличение координаты Х на 1 SHOWSCREEN // Показать все на экране монитора WEND // переход в начало цикла к оператору WHILE END // Конец программы
Здесь хотелось бы обратить внимание на новую операцию, которую до этого момента мы не применяли – присвоение значений переменным – инициализацию переменных. В данном случае переменной Х мы присвоили значение 100 прежде чем она была использована в программе оператором SPRITE.
Что произойдет если этого не сделать?
Переменная Х пока не инициализирована, может содержать любые числа.
Что бы наша бита, оказалась при отображении на экране именно в координате по Х равной 100, мы и инициализировали заблаговременно Х значением 100.
Инициализацию – присвоение значений переменным – желательно всегда производить в начале программы.
Настало время сохранить программу на диск. Скомпилировать по F8 и запустить по F5.
Бита движется! Впрочем, ничего удивительного в этом нет.
А как заставить ее двигаться быстрее?
Вопрос простой, но не все знают ответ.
Увеличивать переменную Х не на 1 , а не большее значение.
Например:
X=X+5
Увеличиваем значение сразу на 5!
А как замедлить движение?
Даже когда приращение переменной осуществляется всего на единицу, скорость может для какого-то объекта в игре (например, облака) оказаться слишком высокой.
Что может быть медленнее единицы?
Единица деленная на 2, на 3, на 4 и т.д.!!!
Х=Х+1/2
А если нужно еще медленнее? Об этом я расскажу ниже, когда мы затронет вопрос тригеров и счетчиков в игре. Но можете не волноваться – замедлить игровой объект можно до любой степени!
Запустив программу, мы некоторое время наблюдаем движущуюся биту, которая неспешно исчезает за экраном. Занавес.
А вспомните лифты, движущиеся вверх-вниз платформочки в таких замечательных приставочных играх, как Super Mario, Contra, Duck Tales? Вам интересно как это сделать? Тогда настало время рассказать о триггерах в игре (терминология автора). Триггер – выключатель содержит несколько положений, в простейшем случае 2 – включено-выключено. Или 0 и 1.
Эксперименты продолжим на нашей проверенной бите. Или можете нарисовать лифт, если захотите прочувствовать всю важность момента.
(Продолжение следует.)