Создание кнопок (не спрайтовых) для использования в игреDelphi , Графика и Игры , DirectX и DelphiXСоздание кнопок (не спрайтовых) для использования в игре
Оформил: XVeL Итак, компонент Игровой Кнопки (MGIB) находится в файле Unit2.pas в исходнике игры. Рассматривать его мы не будем, будем рассматривать только то как он работает! Вся игра у нас делится на сцены. Каждая сцена делится на три части: 1.Загрузка сцены (выполняется один раз перед самой сценой) 2.Отрисовка/Обработка сцены (выполняется столько раз в секунду сколько у вас FPS, до тех пор пока не см.3) 3.Завершение сцены (освобождает память, один раз после окончания Отрисовки/Обработки сцены, только в том случае если игрок покинул игру или грузится другая сцена) Подробнее в других статьях. На загрузку сцены пишем: var form1:TForm; ml:Tlist; procedure startsceneMenu; begin ml:=Tlist.Create; //Создаем список (где будут кнопки) {Добавляем кнопки в список} ml.Add(mgib.Create); //Создаем кнопку в списке with mgib(ml[ml.Count-1]) do //С ней делаем begin caption:='Новая игра'; //Рисуемый на ней текст image:=il.Items.Find('btn20'); //Название изображения в DxImageList'е width:=image.Width; //Ширина (нужна чтобы на кнопку можно было нажать) height:=image.Height; //Высота (тоже нужна как и ширина) x:=288; //Координаты левого верхнего угла (ЛВУ) по оси ИКС y:=350; //Координаты ЛВУ по оси ИГРИК end; end;В отрисовку сцены добавляем: ..................... var ..................... I:integer; begin ..................... for i:=0 to ml.items.count-1 do //Просто рисуем кнопки из списка mgib(ml.items[i]).dodraw; ..................... end;Но чтобы кнопки действовали нужно ещё сделать обработчик на Движение/Нажатие/Отжатие мыши и её кнопок. Вот они: procedure Tform1.DXDrawMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var i: integer; begin bk:=255; //Номер нажатой кнопки, чтобы определить какая кнопка была нажатой (255 ставится для того чтобы при нажатии мимо кнопки не нажималась кнопка номер 0) for i:=0 to ml.Count-1 do //Если мышь над кнопкой то выделяем кнопку, и указывем номер выделеной кнопки if mgib(ml[i]).HighLighted then begin mgib(ml[i]).Selected:=true; bk:=i; end; end; procedure Tform1.DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); Var i: integer; MousePoint: TPoint; begin MousePoint:=Point(x,y); for i:=0 to ml.Count-1 do //Если мышинный курсор над кнопкой, то выделяем текст на ней болдом(это в свойствах компонента называется Highlighted) if ptinrect(mgib(ml[i]).BoundsRect,mousepoint) then mgib(ml[i]).HighLighted:=true else mgib(ml[i]).HighLighted:=false; end; procedure Tform1.DXDrawMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i,z:integer; begin case bk of //Если номер нажатой кнопки не равен 255 то, проверяем какая же кнопка была нажата, и выполняем записаные на неё действия. 0:begin //На кнопку 0 (Новая игра) записано: сделать кнопку невыделеной(чтобы не повторять эту процедуру до бесконечности) и начать сцену игры. mgib(ml[0]).selected:=false; startscene(gsgame); end; end; end;И на завершение сцены ставим: ..................... var ..................... I:integer; begin ..................... for i:=0 to ml.items.count-1 do //Просто очищаем список от кнопок mgib(ml.items[i]).free; ml.free; //И убираем вообще этот список ..................... end;Вот в принципе и всё. Статья Создание кнопок (не спрайтовых) для использования в игре раздела Графика и Игры DirectX и DelphiX может быть полезна для разработчиков на Delphi и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: DirectX и DelphiX ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |