Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.065 c
14-1117982374
Хинт
2005-06-05 18:39
2005.06.29
Помогите выбрать цветовое оформление сайта


14-1117204178
Сатир
2005-05-27 18:29
2005.06.29
У кого есть фотка команды Microsoft 78-го года ?


6-1111926043
Mylen Farmer
2005-03-27 16:20
2005.06.29
Проверка состояния соединения


10-1093680682
Николай
2004-08-28 12:11
2005.06.29
Delphi + MSAccess


3-1115969620
pc-hunter
2005-05-13 11:33
2005.06.29
Печать базы даных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский