Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 16:18   #1
NikProgrammer
 
Регистрация: 15.10.2011
Сообщений: 3
Вопрос Столкновение картинок

Всем привет! Тут такое делою Я вообще-то новичок по делфи, изучал всего год и то только основные функции. Работать с Image приходилось очень редко, поэтому обещайте не сильно смеяться. Ладно.Ближе к теме. Я захотел создать игрушку про футбол. Смысл таков, что тебе нужно ударить по воротам мячом(Image) с помощью стрелок, в то время как на воротах стоит вратарь(Image) и двигается туда-сюда, вроде всё работает, НО! Мяч при столкновении с вратарём просто пролетает через него и засчитывается гол. Т.е. вратарь не отбивает мяч. Кто-нибудь может подсказать и написать процедуру отталкивания Image друг от друга???
Заранее спасибо!
Если надо, то вот код проги:
Код:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm4 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Timer1: TTimer;
    Timer2: TTimer;
    Label5: TLabel;
    Label6: TLabel;
    Timer3: TTimer;
    Timer4: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Label6Click(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Label5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;
  b:integer;

implementation

{$R *.dfm}

procedure TForm4.Timer1Timer(Sender: TObject);
begin
form4.DoubleBuffered:=true;
if image2.left>=17 then
image2.Left:=image2.Left-5
else
begin
timer1.enabled:=false;
timer2.enabled:=true;
end;
end;

procedure TForm4.Timer2Timer(Sender: TObject);
begin
form4.DoubleBuffered:=true;
if image2.left<=145 then
image2.Left:=image2.Left+5
else
begin
timer2.enabled:=false;
timer1.enabled:=true;
end;
end;

procedure TForm4.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Form4.DoubleBuffered:=true;
if (key = vk_left) and (image3.left>5) then
image3.left:=image3.left-10;
if (key = vk_right) and (image3.left+image3.Width<Image1.Width-6) then
image3.left:=image3.left+10;
if key = vk_up then
timer3.Enabled:=true;
end;

procedure TForm4.Label6Click(Sender: TObject);
begin
form4.visible:=false;;
form1.Visible:=true;
end;

procedure TForm4.Timer3Timer(Sender: TObject);
begin
if image3.top>=0 then
image3.Top:=image3.Top-15
else
begin
image3.Top:=432;
timer3.enabled:=false;
end;
end;

procedure TForm4.Timer4Timer(Sender: TObject);
begin
if (image3.Left>24)and(image3.left<152)and(image3.top<8) then
begin
b:=b+1;
label2.Caption:=inttostr(b);
end;
end;

procedure TForm4.Label5Click(Sender: TObject);
begin
image3.top:=448;
image3.left:=96;
label2.caption:='0';
end;

end.
ОФОРМЛЯЙТЕ КОД, КАК ПОЛОЖЕНО !

Последний раз редактировалось mihali4; 20.10.2011 в 15:45.
NikProgrammer вне форума Ответить с цитированием
Старый 19.10.2011, 17:31   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Смысл будет примерно таким
Пусть Image1 - мяч, Image2 - вратарь. Поле в альбомной ориентации.

Вратарь стоит слева от центра поля.
Положение мяча:
Image1.Left - левая граница
Image1.Left + Image1.Width - правая граница
Image1.Top - верхняя граница
Image1.Top + Image1.Height - нижняя граница

И соответственно для вратаря. Проверять нужно (в простом варианте) левую границу мяча, правую вратаря, верхние и нижние границы мяча и вратаря.
Т.е.
Код:
if (Image1.Left >= (Image2.Left + Image2.Width)) and 
  ((Image1.Top >= Image2.Top) and ((image1.Top + Image1.Heigh) <= (Image2.Top + Image2.Height)))
then
<Мяч попал в вратаря>
P.S. Код не проверял.
psycho-coder вне форума Ответить с цитированием
Старый 20.10.2011, 15:31   #3
NikProgrammer
 
Регистрация: 15.10.2011
Сообщений: 3
Восклицание

Спасиб, но как то не работает. В смысле игра запускается но вратарь не ловит мяч.

Прочитайте правила раздела.
Там вполне доступно расписано, как нужно оформлять код.

Последний раз редактировалось mihali4; 20.10.2011 в 15:45.
NikProgrammer вне форума Ответить с цитированием
Старый 21.10.2011, 12:30   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

А поэксперементировать с кодом нельзя?

Последний раз редактировалось mihali4; 28.10.2011 в 22:42.
psycho-coder вне форума Ответить с цитированием
Старый 21.10.2011, 13:01   #5
Orakul89
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 20
По умолчанию

Вратарь стоит слева от центра поля.
Положение мяча:
Image1.Left - левая граница
Image1.Left + Image1.Width - правая граница
Image1.Top - верхняя граница
Image1.Top + Image1.Height - нижняя граница

И соответственно для вратаря. попробуй так

Код:
if (abs (Image1.Left-(Image2.Left+Image2.Width))<=1) and
(abs((Image1.Top- Image1.Height div 2)-(Image2.Top-(Image2.Height div 2)))<=(Image2.Height div 2 + Image1.Height div 2) + 1) then
<мяч у вратаря>

Последний раз редактировалось Orakul89; 21.10.2011 в 13:06.
Orakul89 вне форума Ответить с цитированием
Старый 28.10.2011, 21:11   #6
NikProgrammer
 
Регистрация: 15.10.2011
Сообщений: 3
Хорошо

Всё, я разобрался!!! Чуть-чуть подправил код. Просто мяч останавливался по-любому если он левее вратаря, я дописал пару строк и всё! Психо-кодер огромное тебе спасибо. Оракул, твой код не проверял, но за идею спасибо. Может как-нибудь попробую.
NikProgrammer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Столкновение GaLiof Помощь студентам 5 25.11.2009 09:42
Столкновение тел Лубышев Помощь студентам 3 08.12.2008 11:07
Столкновение объектов [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 27.09.2008 16:54
Столкновение двух Манжосов Денис :) Помощь студентам 13 10.09.2008 22:01
СТолкновение обектов ZhekON Общие вопросы Delphi 3 19.04.2008 21:25