Тема: Игрострой
Показать сообщение отдельно
Старый 01.12.2008, 16:19      #20
DarKLorD
Новичок
По умолчанию

#include "GameQuit.h"

CGameQuit::CGameQuit()
{
// Инициализируем класс и грузим текстуру:
Texture = new CTexture();
Texture->LoadTexture("Pictures/menu/bg.bmp",&textures[0]);

// Цвета кнопок, активный и неактивный цвет
CVector3 BColor1, BColor2;
// Позиция кнопки
CVector2 BPos;

// Устанавливаем цвета
BColor1.x = 0.5f; BColor1.y = 0.7f; BColor1.z = 0.6f;
BColor2.x = 0.5f; BColor2.y = 0.6f; BColor2.z = 0.5f;

// Изменяем позицию кнопки 1 yes
BPos.x = SCREEN_WIDTH/2 - 180; BPos.y = SCREEN_HEIGHT/2 - 80;
ButtonYes = new CButton(BColor1, BColor2, BPos, 180, 40, "Yes");

// Изменяем позицию кнопки 2 no
BPos.x = SCREEN_WIDTH/2 + 10; BPos.y = SCREEN_HEIGHT/2 - 80;
ButtonNo = new CButton(BColor1, BColor2, BPos, 180, 40, "No");

this->ButtonYes->active = true; // И делаем активной кнопку yes
}

CGameQuit::~CGameQuit()
{
}

void CGameQuit::Render()
{
// Переходим в 2D режим:
OrthoMode(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);

// Рисуем текстурированный квадратик (фон)
glColor3f(1,1,1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,textures[0].texID);
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex2f(0, 0);
glTexCoord2f(1,1); glVertex2f(SCREEN_WIDTH, 0);
glTexCoord2f(1,0); glVertex2f(SCREEN_WIDTH, SCREEN_HEIGHT);
glTexCoord2f(0,0); glVertex2f(0, SCREEN_HEIGHT);
glEnd();


// Теперь нам нужно нарисовать кнопки.
ButtonYes->Render();
ButtonNo->Render();

//возвращаемся в 3D:
PerspectiveMode();
}

void CGameQuit:rocessClick(CVector2 mpos)
{
// Был совершен клик. Проверим, была ли мышь на кнопке:
if(ButtonYes->MouseOver(mpos))
DeInit();

if(ButtonNo->MouseOver(mpos))
g_State = GAME_MENU; // Если на no - изменяем состояние игры
}

// Эта функция обрабатывает нажатия клавиш.
void CGameQuit::KeyDown(unsigned int key)
{
switch(key)
{
case VK_LEFT:
case VK_RIGHT:
case VK_TAB:
if(this->ButtonYes->active)
{
this->ButtonYes->active=false;
this->ButtonNo->active=true;
break;
}
if(this->ButtonNo->active)
{
this->ButtonNo->active=false;
this->ButtonYes->active=true;
break;
}
break;

case VK_RETURN:
if(this->ButtonYes->active)
DeInit();

if(this->ButtonNo->active)
g_State = GAME_MENU;
break;
}
}


Вот так у меня выглядит выход из программы, 2D режим две кнопочки, всё просто. (а в 3D появиться ещё одна координата)
(да, ещё класс текстур и класс кнопок тоже описан, это лишь один из... вроде 23 файлов исходников меню.)

Так же я могу описать в отдельный класс инициализацию, и рендер моделей, и потом рисовать их перейдя в 3D режим как то например так: Model[0].Render();

Так же можно вместо фона на "квадратик" наложить текстуру домов например, И создать ещё два квадратика с такиме же текстурами слева и справа за пределами экрана. И каждый раз при рендере (void CGameQuit::Render()) сдвигать позициюквадратиков в сторону, а когда позиция центрального достигнет края экрана, то тот квадратик которого теперь уже совсем не видно удалить, а с противоположной стороны создать. И должен получиться эфект что наша модель(машина, танк) движется по городу.(вместо текстурированных квадратиков для большго эффекта можно тоже модели использовать(домов, бочек и стоящих машин и т.п.)) Это прям как в NFS Undeground. Там ведь тоже на заднем фоне меню машина едет. )))
DarKLorD вне форума   Ответить с цитированием Вверх
Благодарности: 1
BAD BOY ALEX (01.12.2008)