Создание кнопок (не спрайтовых) для использования в игре
Оформил: 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;
Вот в принципе и всё.
|