![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Меню [Delphi, Windows]
Crazy_kill © (2003-09-11 01:31:00)Народ подкиньте мыслей как сделать меню для игры (Как главное меню в играх Сохранить, Загрузить, Настройки и т.д. и т.п). Заранее спасибо.
NailMan (2003-09-29 10:43:00) [1]Ну ка, а так:
http://nailman.narod.ru/Zakroma/UT_GUI_DEMO.exe
Andrey5 (2003-09-29 05:15:00) [2]Ссылка не работает
Crazy_kill (2003-09-15 00:31:00) [3]Большое спасибо за советы!!!!!!!!!!
NailMan (2003-09-11 14:46:00) [4]Ну это от тебя зависит. Какую архитектуру GUI придумаешь делать, такую и сделалешь. Главное здесь удобство использования и желание повозиться. Если хочешь получить хорошее впечатление пользователей твоей игры, надо делать красивый и удобный интерфейс(я на этом собаку уже съел).
Сразу скажу можно юзать кем-то написанные элементы меню(про стандартные GDI-шные сразу забудь), но они могут быть не вполне гармонировать с архитектурой игры, поэтому предпочтительно(и сложнее ессно) написать свои элементы.
Я уже тут кидал ссылку на демку моего интерфейса, вот она:
http://nailman.narod.ru/Zakroma/UT_GUI_Demo.exe
Это уже скомпиленный интерфейс, но его можно менять(с количеством элементов лучше не баловаться), тоесть изменять некоторые параметры элементов(координаты, названия и т.д.).
Собсно я не далеко отошел от Дельфи - конфигурация меню расположена в обычном CFG файле, так что все очень просто.
Сам же алгоритм работы GUI довольно большой по содержанию(2 больших модуля), в котором жестко связаны все элементы меню в единую работу.
Каждое меню у меня выполнено отдельной процедурой, в которой по единому шаблону грузится нужная секция конфига, создаются в единых массивах элементы меню (label, button, checkbox, trackbar, panel, progressbar, listbox), а затем уже идет цикл меню, в котором рендерится само меню, опрашиваются устройства ввода и обрабатываются. На результат фенкции опроса/обработки быстрых событий(селектирование баттонов, строки листбокса, клик по баттону и д.р.) у меня выводится с некую переменную(с одновременным выводо всех стейтов меню) и далее я произвожу пост-обработку уже этих событий с case. Тут обрабатываются уже менюшные вещи(до этого обработка событий не конкретно меню, а класса GUI). Вобщем слегка запутанно на первый взгляд, но довольно четко в реализации.
Переход между менюхами я делаю через главный статус программы: присваиваю ему нужное значение и выхожу из менюхи, а далее в главном селекторе процессов запускается нужная процедура меню.
cyborg (2003-09-11 08:23:00) [5]
Var
CurrentMenu : Integer = 1;
...
case НажатаяКлавиша of
КлавишаВверх : if CurrentMenu>1 then Dec(CurentMenu);
КлавишаВниз : if CurrentMenu<MaxNumMenu then Inc(CurrentMenu);
end;
...
Var
i : Integer;
...
for i:=1 to MaxNumMenu do if i=CurrentMenu then РисуемАктивныйПунктМеню else РисуемНеактивныйПунктМеню;