Графика в Delphi - примеры задач на построение графиков, а также компоненты для графики

Создание кнопок (не спрайтовых) для использования в игре

Вторая статья по игре “В ОСАДЕ” поясняющая, каким образом в игре появились кнопки!
Итак, компонент Игровой Кнопки (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;

Вот в принципе и всё.

Powered WP Ъ скачать delphi, delphi 7, скачать delphi 7, delphi файлы, delphi, компоненты, delphi 2009, delphi программы, delphi бесплатно, delphi скачать, бесплатно работа delphi, delphi создание, delphi строки, программирования delphi, borland delphi, delphi формы