Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 1
Всего онлайн: 1
Зарегистрировано юзеров: 6619
Комментариев на сайте: 650
Новый юзер: Dysonetn



Последние комментарии
c
dealrattKi прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
Это действительно радует меня. --- Бесподобное сообщение скачать fifa, скачать фифа а также [url=http://15fifa.ru/novosti-fifa-15]fifa 15 последние новости[/url] скачать фифа
intatryadebra прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
Revival RO is best free ro populair ragnarok online private server founded in 2017 2018. Revival pvp big free Ragnarok server is an online exciting free MMORPG called ragnarok online, it a fun server for MMORPG gamers in ASIA. This is a top 10 ragnarok online private server thats high on the list and top ranking with massive players online. We have many players from Asia like Malaysia, Indonesia, Philippines, Thailand, Singapore, China, Hong Kong All these players are here to play free private ragnarok online server and battle players all around the world. They want to collect the best items and gear to be strongest in War of Emperium, War of Emperium are guild wars in this free RO Server. You can play this game on android phone or tablet or pc client. Enjoy And have fun. ragnarok online server http://bit.ly/2tKyawS

Урок 27 - Создаем игру Ping-pong - часть(2/3)

  Продолжаем писать игру Пинг-Понг. В этом уроке мы займемся реализацией игрока.

   Вытащим еще один Shape и сделаем ему синий цвет. Вот собственно этим мы и будем отбивать шарик. Перемещать его мы будем мышкой.

шарик


   Для этого создадим событие Form1 OnMouseMove:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Shape2.Top:= Mouse.CursorPos.Y - Form1.ClientOrigin.Y;
end;
   Shape2 - это наш прямоугольник, Mouse.CursorPos - позиции курсора, Form1.ClientOrigin - экранные координаты формы. После компиляции прямоугольник двигается вместе с мышкой, но шарик не отбивается.

   В Delphi есть такая функция:
function InterSectRect(var Dst: TRect; const Src1: TRect; const Src2: TRect);
   Она определяет пересекаются ли Rect'ы, в нашем случае Shape1 и Shape2. Модифицируем код таймера добавив в конец процедуры вот это:

  if InterSectRect(Overlay, Shape2.BoundsRect, Shape1.BoundsRect) then  //если есть пересечение между прямоугольником
  begin                                                                 //и кружком то кружок отправляем обратно 
    VelX:= -VelX;
    VelY:= -VelY;
  end;

   И здесь нам понадобится локальная переменная Overlay: TRect. Вот что должно получится у вас:
procedure TForm1.Timer1Timer(Sender: TObject);
var
	Overlay: TRect;
begin
  PosX:= PosX + VelX;	// Изменяем 
  PosY:= PosY + VelY;	//  позицию

  if PosX > ClientWidth - Shape1.Width then  
    VelX:= -VelX;

  if PosY > ClientHeight - Shape1.Height then 
    VelY:= -VelY;

  if PosX < 0 then		
    VelX:= -VelX;

  if PosY < 0 then		
    VelY:= -VelY;


  Shape1.Left:= Round(PosX);  // Обновляем
  Shape1.Top:=  Round(PosY);  // положение шарика 
  
  if InterSectRect(Overlay, Shape2.BoundsRect, Shape1.BoundsRect) then  
  begin                                                                 
    VelX:= -VelX;	//если есть пересечение между прямоугольником
    VelY:= -VelY;	//и кружком то кружок отправляем обратно 
  end;

end;
   Теперь при столкновении шарик отскакивает! Но он движется по одному и тому же пути, избавимся от этого добавив немного случайности. В FormCreate допишем событие, добавим в конец слово Randomize, тем самым мы говорим Delphi, что будем использовать улучшенный алгоритм генерации случайных чисел и измени проверку пересечения 2 объектов:
  if InterSectRect(Overlay, Shape2.BoundsRect, Shape1.BoundsRect) then  
  begin                                                                 
    VelX:= -VelX - Random(5);
    VelY:= -VelY - Random(5);
  end;
   Теперь будет лучше.

   В следующем уроке мы будем делать искусственный интеллект.

Удачи!
Встретимся в следующем уроке!


Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 21 Апреля 2013
Просмотров: 39030

Урок 26 - Создаем игру Ping-pong - часть(1/3) Урок 28 - Создаем игру Ping-pong - часть(3/3)

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.



аватар Добавил(а): mikkylovejoe [Новичок] Дата: 2013-06-17
if InterSectRect(Overlay, Shape2.BoundsRect, Shape1.BoundsRect) Что за Overlay? Вы по нее не ранее не писали, и теперь delphi ругается.




аватар Добавил: RinDproramer [Новичок] Дата: 2013-10-30
У меня нечего не ругается. Наверное, ты не объявил эту переменную.




аватар Добавил: Timosha_45 [Новичок] Дата: 2014-05-09
вопрос, при наведении мыши на "ракетку", она за ней не следует а двигается вниз, что делать?




аватар Добавил(а): eltgm [Новичок] Дата: 2014-07-31
что с функцией-то делать?Объявили,а дальше?У меня шарик просто проскакивает ракетку




аватар Добавил(а): darkshark1231 [Новичок] Дата: 2014-10-16
ничего не понял что куда прописывать. Не понятно написано




аватар Добавил: McDias [Новичок] Дата: 2015-02-03
выаыаф




аватар Добавил: McDias [Новичок] Дата: 2015-02-03
Не обязательно писать имя переменной Overlay, можно присвоить и любую другую букву




аватар Добавил(а): Bek1996 [Новичок] Дата: 2016-02-10
Кстати не забудтье написать в раздел var overlay:trect;




аватар Добавил(а): pronin106 [Новичок] Дата: 2017-05-29
Все получилось! Спасибо за урок. У кого не получилось читайте внимательнее! Не делайте тупо копипаст