Категории раздела
Программирования [69]
разные языки программирования
Создания игр [10]
Статьи о создании игр
Движки [0]
Статьи о программах для создания игр
Игры [1]
Статьи об играх
Приложения (софт) [0]
Програми в помощь игроделу
Главная » Статьи » Создания игр

Своя игра за день (часть 3)
В этом уроке я покажу маленький пример ввода с клавиатуры. 

За основу будем использовать текст из прошлого урока. 


Code

#include <windows.h>   
#include <gege.h>   
#include <esprite.h>   

#pragma comment(lib,"gege.lib")   
#pragma comment(lib,"gegeh.lib")   

GEGE* g;   
ETEXTURE t;   
ESprite *spr;   

bool MyRenderFunc(float dt)   
{   
g->Render_BeginScene();   
g->Render_ClearScene(100,100,100);   
spr->Render(0,0);   
g->Render_EndScene();   
return 0;   
}   

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) 

g=nGEGE(); 

g->Engine_Init("Lesson 2: Render!",800,600,0); 
t=g->Texture_Load("texture.png"); 
spr=new ESprite(t,0,0,64,32); 
g->Engine_Start(MyRenderFunc); 
g->Engine_Release(); 

return 0; 



Скажу сразу, что исходный код нужно немного переделать: 
1) Изменить размеры спрайта на 32,32 
2) Объявить определение "speed" 


Code

#define speed 300 
... 
spr=new ESprite(t,0,0,32,32); 



У движка пока что есть 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). 

    Всё работает! Наш спрайтик бегает по экрану и не вылазит за его границы! 

    Исходный код прилагается..

  • Категория: Создания игр | Добавил: graimp (17.11.2011)
    Просмотров: 520 | Комментарии: 1 | Рейтинг: 0.0/0
    Всего комментариев: 1
    1 Kennnethgync  
    0
    Участвуйте в нашей акции Iphone 6 - 2015. Мы проводим акцию для пользователей нашего сайта и даём им шанс победить. Ваш приз: Apple iPhone 6. Подробнее на http://moveer.ru/iphone6

    Имя *:
    Email *:
    Код *:
    Наш опрос
    На каком языке лучше программировать
    Всего ответов: 38
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0