У движка пока что есть 3 функции отвечающие за ввод с клавиатуры:
Input_isKeyDown
Input_isKeyUp
Input_isKeyPress
1 функция - возвращает 1 (true) когда кнопка была нажата. 2 функция - возвращает 1 (true) когда кнопка была отпущена. 3 функция - возвращает 1 (true) если кнопка в данный момент зажата.
Ну что же, попробуем наши функции в деле! Добавим в начало функции рисования код:
Code
if (g->Input_isKeyDown(EKEY_ESCAPE)) return 1;
В этой строке движок проверяет, нажата ли клавиша Escape (Esc), если да - то возвращает 1 (если в функции кадра вернуть 0 - она просто закончиться, а есть 1 - движок начнет работу со строки после "Engine_Start").
Теперь нужно объявить 2 переменные типа float и хранить в них наши координаты спрайта.
Code
float sx=0,sy=0;
И изменить рисование спрайта на:
Code
spr->Render(sx,sy);
Запускаем проект... Всё как и было, но добавился выход по нажатии клавиши Escape. Теперь можно добавить перемещение спрайта по нажатию стрелок на клавиатуре:
Code
if (g->Input_isKeyPress(EKEY_LEFT)) sx-=speed*dt; if (g->Input_isKeyPress(EKEY_RIGHT)) sx+=speed*dt; if (g->Input_isKeyPress(EKEY_UP)) sy-=speed*dt; if (g->Input_isKeyPress(EKEY_DOWN)) sy+=speed*dt;
Не сложно догадаться что этот код делает. Объясню только один момент насчёт переменно "dt". "dt" была объявлена в функции "MyRenderFunc", эта переменная означает количество времени прошедшее с прошлого кадра в секундах, поэтому умножаю скорость на дельта тайм, что бы на разных машинах скорость движения спрайта была одинаковая. Если попробовать запустить, то всё будет работать, но спрайт вылазит за пределы экрана, а это не хорошо... Исправим это! Добавим следующий код перед самим рисованием спрайта:
Code
if (sx<0) sx=0; if (sy<0) sy=0; if (sx>768) sx=768; if (sy>568) sy=568;
768 - это ширина экрана (800) - ширина спрайта (32). 568 - это высота экрана (600) - высота спрайта (32).
Всё работает! Наш спрайтик бегает по экрану и не вылазит за его границы!
if (g->Input_isKeyPress(EKEY_LEFT)) sx-=speed*dt; if (g->Input_isKeyPress(EKEY_RIGHT)) sx+=speed*dt; if (g->Input_isKeyPress(EKEY_UP)) sy-=speed*dt; if (g->Input_isKeyPress(EKEY_DOWN)) sy+=speed*dt;
if (sx<0) sx=0; if (sy<0) sy=0; if (sx>768) sx=768; if (sy>568) sy=568;
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Своя игра за день (часть 3)», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.