Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Создание кнопок (не спрайтовых) для использования в игре

Оформил: XVeL
Автор: Spose
WEB-сайт: http://daddy.mirgames.ru

Вторая статья по игре "В ОСАДЕ" поясняющая, каким образом в игре появились кнопки!
Итак, компонент Игровой Кнопки (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;
Вот в принципе и всё.
Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.