Delphi уроки - преврашаем shape в мяч

Опубиковано: 09.09.2008 г., автор: , просмотров: 49623

Delphi уроки: Работаем с компонентом Shape

В этом уроке я покажу вам как с легкостью сделать летающий шарик у себя на форме. Ну что открываем Delphi, создаем новый проект. Нам понадобиться компонент Shape с закладки Additional и компонент Timer с закладки System. Кидаем их на форму, щелкаем по компоненту shape и меняем свойство shape на ctCircle теперь вместо квадрата компонент примет форму круга. Все на этом предварительные приготовления завершены начинаем кодить.

После ключевого слова var обьявлем 4 глобальные переменные типа single

PosX, Posy, VelX, Vely: single;

Создаем обработчик событий на форме (OnCreate) прост щелкнув по ней 2 раза мышкой. Между begin end; пишем:

Posx:=3;
PosY:=5;
VelX:=2;
VelY:=2;

На данном этапе мы присваиваем ранее объявленным переменным нужные значения.

Далее нам понадобиться создать одну не большую процедуру. После ключевого слова private пишем

procedure shar();

Нажимаем сочетание клавиш Ctrl+Shift+C и Delphi автоматически сгенерирует заготовку для нашей будущей процедуры. Забегая вперед открою вам не большой секрет, именно эта процедура и будет отвечать за полет шарика. Ладно немного отвлеклись, вставляем ниже приведенный код между словами begin end в нашей процедуре.

// Текущая координата шарика + скорость
PosX:= PosX+VelX;
PosY:= PosY+VelY;

// Что бы шарик не вылетал за границы поля по ширине
// Если X координата шарика больше ширины формы - ширины самого //шарика то
if PosX > ClientWidth - Shape1.Width then
begin
//X координата шарика присвоит значение ширина формы - ширина //шарика
PosX:= ClientWidth - Shape1.Width;
// Включаем заднюю скорость) или меняем значение скорости на минус
VelX:= - VelX;
end
else if PosX < 0 then
begin
POsX:= 0;
VelX:= - VelX;
end;

// Здесь по аналогии только работаем с Y координатой
if PosY > ClientHeight - Shape1.Width then
begin
POsY:= ClientHeight - Shape1.Width;
VelY:= - VelY;
end
else if PosY < 0 then
begin
POsY:= 0;
VelY:= - VelY;
end;
// Перемещаем шарик в пространстве
Shape1.Left:= Round(PosX);
Shape1.Top:= Round(PosY);

Сейчас не стоит пугаться процедура не такая уж сложная как кажется на первый взгляд. Если кто не понял что в ней происходит читайте комментарии в коде. Кратко поясню что-же за переменные использованы в процедуре

Переменные PosX и PosY хранят координаты положение шарика в пространстве, VelX и VelY отвечают за скорость его перемещения. ClientWidth, ClientHeight - ширина и высота формы. Shape1.Width ширина шарика.

Ну что справились с процедурой ?! Ладно едим дальше свойство Interval у таймера ставим 10, а свойство Enabled = true. Кликаем по компоненту timer два раза и в обработчике событий пишем имя нашей процедуры

shar;

На этом все, запускаем проект и наслаждаемся результатом. А вот что получилось у меня:

delphi компоненты shape

P.S. Не забываем подписываться на бесплатную мультимедийную рассылку.
Форма для подписки расположена с права и с лева.

До встречи DelphiExpert.ru !!!



Похожие материалы

Последние из рубрики

Виталий 04 Мар 2018 в 22:52 #
Как поставить регулировку скорости движения шара?
S.G. 10 Май 2013 в 00:00 #
vot kod arkanoida
var
Form1: TForm1;
PosX, Posy, VelX, Vely: single;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.shar;
begin
PosX:= PosX+VelX;
PosY:= PosY+VelY;
if PosX > ClientWidth - Shape1.Width then
begin
PosX:= ClientWidth - Shape1.Width;
VelX:= - VelX;
end
else if PosX < 0 then
begin
POsX:= 0;
VelX:= - VelX;
end;
if posx>shape2.Left then
if posx<shape2.Left+shape2.Width then
if PosY+shape1.Height>Shape2.top then
begin
VelY:= - VelY;
end;
if PosY < 0 then
S.G. 10 Май 2013 в 00:00 #
begin
POsY:= 0;
VelY:= - VelY;
end;
Shape1.Left:= Round(PosX);
Shape1.Top:= Round(PosY);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Posx:=3;
PosY:=5;
VelX:=2;
VelY:=2;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
shar;
end;
procedure TForm1.Shape2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var p:integer;
begin
p:=2;
Shape2.Left:=x+200;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=′a′ then
if Shape2.Left+3>0 then
Shape2.Left:=Shape2.Left-12;
if key=′d′ then
if Shape2.Left+Shape2.Width<ClientWidth+3 then
Shape2.Left:=Shape2.Left+12 else exit;
end;end.
S.G. 10 Май 2013 в 00:00 #
menja 15 goda
06mk@bk.ru 19 Янв 2013 в 00:00 #
С ускорением:
VelY:=VelY+1;

ОтменитьДобавить комментарий