Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
Bitmap [50]
Canvas [0]
DirectX и DelphiX [39]
GIF [3]
ICO [24]
JPEG [14]
MetaFile [6]
OpenGL [9]
ScreenSaver и ScreenMate [13]
Векторная графика [2]
Графика [37]
Изображения [0]
Картография [6]
Компоненты и Графика [0]
Создание игр [17]
Цвета и Палитра [0]
Шрифты [0]

Наш опрос
Есть ли у Вас свой сайт?
Всего ответов: 48

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Графика и Игры » DirectX и DelphiX

Создание кнопок (не спрайтовых) для использования в игре
Вторая статья по игре "В ОСАДЕ" поясняющая, каким образом в игре появились кнопки!
Итак, компонент Игровой Кнопки (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 | Добавил: Angel (12.07.2008)
Просмотров: 464 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2025 Хостинг от uCoz