Форум: "Игры";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Внизинтерфейс пользователя в игре Найти похожие ветки
← →
ninja © (2005-03-24 09:33) [0]ПРивет мастера!
Сейчас делаю интерфейс. Кнопочки там разные и т.д. Игра в DirectDraw. В начале игры требуется указать нацию, сложность и некоторые другие параметры. Хотел написать функцию, выдающую "диалоговое окно", но не так просто это оказалось. С формами всё было просто: ShowModal и усё. Как реализовать нечто вроде ShowModal?
Можно конечно на закрытие одного "диалогового окна" повесить процедуру открытия следующего, но это не очень красиво. Хотелось бы иметь код вида
Player[i].InputNation;
Player[i].InputStartPoints;
Player[i].Input....
и на экране одно за другим появлялись бы эти штуки.
← →
cyborg © (2005-03-24 11:30) [1]Смотря какая у тебя структура игры, такие и советы нужно давать. Про структуру ты ничего не сказал, как у тебя там всё организовано? Поэтому нормального совета ты не дождёшься!
← →
П7 (2005-03-24 12:41) [2]факт. Но уже сейчас можно сказть, что подход предложенный в нулевом посте - глупость. Делай нормальный GUI. Поищи в сети примеры... Или для каждого "типа ввода" (: напиши отдельную функцию...
← →
ninja © (2005-03-24 21:59) [3]
> Но уже сейчас можно сказть, что подход предложенный в нулевом
> посте - глупость
:(
> cyborg © (24.03.05 11:30) [1]
вот я тоже подумал насчет структуры, наверное, придется всё переделывать, только пока неизвестно как. в общем, оконная функция ловит всякие сообщения, нажатие клавишь и действия с мышью передаются в engine. У engine есть свойство gamescreen класса tgmscreen, оно хранит текущий "экран": для главного меню, например, поверхность-задник и "компоненты".
вот:
TEngine = class
private
window: HWND; //window handle
LMous,
RMous: boolean; //состояние кнопок мышы
Keys: set of Byte; //нажатые клавишы
DD: IDirectDraw7; //графические объекты
Primary: IDirectDrawSurface7;
Buff: IDirectDrawSurface7;
Gamma: IDirectDrawGammaControl;
Gamma1,
Gamma2: TDDGammaRamp;
ScrMode: TScrMode;
.....
public
procedure DoIt;
constructor Create(hWindow: dword; width, height, depth: word);
Mess: TMessageScreen; //текущее сообщение
GameScreen: TGMScreen; //текущий игровой экран
......
end;
в общем TMessageScreen это потомок TGMScreen, практически то же самое. если вылазит сообщение, информация о кнопках идёт в него, а экран который сзади - только перерисовывается.
TGMScreen = class //класс игрового экрана
private
fading: boolean;
bkGround: TSurf;
Controls: array of TControl1; //управляющие элементы
Downed: WORD; //номер прижатого (на к-ром был моусдаун)
PrevLMous: Boolean;
PrevRMous: Boolean;
.......
public
procedure Draw; virtual;
function UnderMouse(x,y: WORD): WORD; //№ элемента под мышью
procedure AddControl(control: TControl1);
procedure Process(Keys: TByteSet; var LMous,RMous: boolean); virtual; //обработка клавиш
......
end;
вот так оно...
← →
П7 (2005-03-25 15:44) [4]на сайте DelphiGFX есть пример реализации GUI под OpenGL, но если переписать процедуры отрисовки, то сами структуры можно передрать полностью (:
← →
Omar2002 © (2005-03-27 11:54) [5]Я делал так:
1) создаешь структуры TBtm, TEdt, TLbl. (Соответственно кнопки, едиты и лабелы).
2)создаешь массивы кнопок, едитов и лабелов этих типов. Ну и все собсно.
3)Выводишь их на экран и обрабатываешь нажатия на них мышью.
Я типы создавал такие:
type TBtn = record
Caption:string[10]; //Текст на кнопке
Pic:integer; //Номер картинки этой кнопки
Pos:TXY; //Положение кнопки
Razmer:TRazmer; //Размеры кнопки
Lay:byte; //на какой поверхности лежит кнопка
Visible:byte; //видна ли кнопка?
end;
Короче говоря. это же уже твоя работа - можешь делать кнопки любых размеров. Очень удобно было сделать не просто Pic, а масив из 4 картинок для 4 состояний кнопки:
- Свободная кнопка
- Кнопка, на которую наведен курсор
- Кнопка, которая нажата в данный момент
- Неактивная кнопка
Учти еще тот факт, что кнопки можно делать любой формы, ну например - круглой. Но сложности возникнут с определением - лежит ли курсор на кнопке. Ну я думаю красивый интерфейс стоит того, чтобы помучиться над такой, впрочм и не такой уж и сложной, задачей.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c