Информатика и образование
  Мобильная версия сайта            
               
[Главная] [Новости]
[Статьи]
[Проекты]
[Ссылки]
[Автор]
               
    [Архив новостей]        
               
  [Форум] на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы  
       
  Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...]    
       
  [Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi]    
  [Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX]    
       
  Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!"    
       
  триал-версия, 1,34 Mb   скачайте полную версию игры, зарегистрируйтесь и получите бесплатно полный исходный код игры для компиляции в delphi 7 или 2006 и уроки delphi directx 8.1 содержащие статьи по созданию собственной 2D/3D игры в среде delphi directx    
       
  Урок 2 Создаем и обрабатываем команды меню.    
       
  О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1    
       
  Далее у читателя подразумевается наличие базовых знаний языка Delphi.    
       
  [назад] [страница 1] [далее] [к содержанию]    
       
 

В качестве основы мы возьмем исходный код шаблона стартового приложения Delphi DirectX 8.1 (или сокращенной D3D-приложения), который мы создали в предыдущем уроке

Но помните, что для его компиляции Вам нужна и сама библиотека Delphi DirectX 8.1 (папка с общим кодом)

или исходный код игры "Ну, Погоди!" с включенной обновленной библиотекой Delphi DirectX 8.1 (поддержка русских букв, 2D анимация и некоторые другие возможности).

   
       
  Поскольку наша игра будет простой, работающей в оконном режиме, то для неё подойдет обычное типовое главное меню окна приложения, которое можно создать используя компонент TMainMenu из библиотеки VCL компонентов Delphi 7 или 2006.    
       
  Откройте проект шаблона стартового приложения, пересохраните его в другую папку и под другим именем (если хотите). Откройте модуль Main.pas, переключитесь на форму окна приложения - клавишей [F12] и добавьте на форму компонент TMainMenu -    
       
     
       
  Сразу же переименуйте MainMenu1 в нужное, например просто MainMenu    
       
 

Теперь остается только сформировать главное меню и заняться реализацией работы его пунктов.

Например игра Ну, Погоди! имеет следующее меню - (показано главное меню и все вложенные)

   
       
     
       
     
       
     
       
  Для простоты рассмотрим реализацию двух простейших пунктов меню - Игра > Перезапуск и ? > О игре    
       
  Для того, чтобы сформировать данные пункты меню дважды щелкните иконку компонента TMainMenu в форме окна приложения, которая появилась там, когда Вы добавляли данный компонент на форму. При этом откроется редактор меню, используя который можно создать меню.    
       
 

Делается это следующим образом.

 

   
       
     
       
  В инспекторе объектов находим свойство Name и называем пункт меню, например GameMenuItem    
       
     
       
 

Свойство Name требуется для обращений к данному пункту меню из кода приложения.

Само название пункта меню задается свойством Caption.

Если Вы делаете англоязычную игру, то свойство Caption должно содержать английское наименование, например

Game

   
       
     
       
 

Для создаваемого пункта меню можно сразу же создать горячие клавиши. Например, если в поле Caption в качестве части имени задать символ &

&Game

то первая буква перед которой стоит данный символ становится клавиатурным сокращением [Alt] + [G]

Можно также задать для пункта меню другую клавиатурную комбинацию через инспектор объектов.

   
       
     
       
  Аналогичным образом создаются все остальные необходимые пункты главного меню и пункты вложенных меню. Пункты главного меню, открывающие доступ к вложенным меню не требуют обработчиков. Вложенные меню должны содержать обработчики реализованные в коде, иначе такие пункты меню не будут выполнять никаких полезных действий!    
       
 

Как создать обработчик для пункта вложенного меню?

После того, как Вы создали нужный пункт вложенного меню (подменю или submenu) в инспекторе объектов на вкладке Events найдите для этого пункта меню свойство OnClick и дважды щелкните в пустом поле напротив этого пункта

   
       
     
       
  При этом в коде будет сгенерирован начальный шаблон обработчика события по выбору данного пункта меню мышью или нажатием одной из комбинаций горячих клавиш.    
       
     
       
 

Далее останется лишь добавить в обработчик необходимый код.

Так например, для реализации пункта меню Рестарт код может быть следующим -

   
       
  procedure TMainForm.ReStartGameMenuItemClick(Sender: TObject);
begin
if g_d3dApp <> nil then begin
g_d3dApp.GameMode := gmRestart;
end;
end;
   
       
  То есть всего навсего проверяется действительность наличия объекта d3d-приложения и если он есть, то устанавливается его свойство GameMode в режим gmRestart    
       
 

Для создания обработчика пункта меню ? > О игре (или ? > About в англоязычной версии) нужно создать еще одну форму, добавить на неё необходимые компоненты и добавить код, необходимый для ее отображения.

Сложного в этом ничего нет. Достаточно Вам будет взглянуть на исходный код реализации метода -

procedure TMainForm.AboutGameMenuClick(Sender: TObject);
var
AboutProg: TAboutForm;
begin
AboutProg := TAboutForm.Create(Self);
AboutProg.ShowModal;
end;

в модуле Main.pas с исходным кодом игры "Ну, Погоди!".

В опциях проекта Project > Options в группе Forms

данную форму (AboutForm) нужно перенести из группы авто-создаваемых (auto-create) в группу доступных (available) форм.

   
       
  Если Вы хотите использовать в подменю разделитель на подгруппы в виде полосы, как это сделано в пункте меню Опции -    
       
     
       
 

то в качестве свойства Caption укажите "-" (знак минус)

после нажатия Enter данный пункт меню превратится в разделитель. Остальные свойства для разделителя являются незначащими.

   
       
 

Как реализовать остальные пункты меню?

Ответ на этот вопрос ищите в исходном коде игры "Ну, Погоди!".

Скажу лишь, что обработка нажатий на кнопки "игра А", "игра Б" и прочие, которые не являются пунктами меню VCL, а являются частью отображаемой в рабочей области окна D3D-приложения текстуры выполняется по-другому. О том как это сделано Вы узнаете из следующих уроков или опять же - обратившись к исходному коду игры.

   
       
  [назад] [страница 1] [далее] [к содержанию]    
       
       
       
       
       
  по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме    
       
 

Обновления и новости о развитии Delphi DirectX проекта
смотри на сайтах:

http://www.megainformaticsite.pochta.ru

http://www.megainformatic.boom.ru

http://www.megainformatic.narod.ru

 

   
       
     
 

Cвои пожелания, вопросы или заметки отправляйте на:

megainformatic@mail.ru или пишите на форуме

 
     
   Обмен ссылками  
     
     
             
 
 
         
(с) МЕГА ИНФОРМАТИК 2006-2009
Hosted by uCoz