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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2009, 20:27   #1
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
Восклицание Столкновение

Народ, подскажите, как в делфи обработать столкновение 2х объектов?
У меня есть шар, который движется по форме, и второй, который просто стоит на ней. Мне надо, чтоб при столкновении 2й шар приобрёл скорость первого, а первый остановился...Оба объекта shape.
GaLiof вне форума Ответить с цитированием
Старый 24.11.2009, 22:32   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Чистая математика - при движении проверяем расстояние и, если оно меньше r1+r2, меняем скорости шаров.
TwiX вне форума Ответить с цитированием
Старый 25.11.2009, 06:50   #3
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
По умолчанию

Вот именно то, как проверить расстояние меня и интересует...
GaLiof вне форума Ответить с цитированием
Старый 25.11.2009, 07:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

У тебя центры шаров извесны?
Вот и прекрасно - По теореме пифагора найдешь между ними расстояние sqrt(sqr(x1-x2)+sqr(y1-y2)), а далее как сказано было если оно менее суммы радиусов - то шар столкнулся.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2009, 08:41   #5
GaLiof
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 52
По умолчанию

Всё это конечно прекрасно и легко, но:как узнать координаты ЦЕНТРА объекта Shape? И учитывая, что один из них паостоянно движется...
Вот мой код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Shape1: TShape;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure shar();
    procedure calcmouseval();
  end;

var
  Form1: TForm1;
PosX, PosY, VelX, VelY:single;
lastmouseX, LastmouseY:integer;
mouseVelX,MouseVelY:integer;
mousebutton:boolean;
implementation

{$R *.dfm}

procedure TForm1.shar;
begin
PosX:=PosX+VelX;
PosY:=PosY+VelY;
if PosX>ClientWidth - shape1.width then
begin
velX:=-VelX;
end
else if PosX<0 then
begin
Posx:=0;
velX:=-VelX;
end;
if PosY>ClientHeight - shape1.height then
begin
velY:=-VelY;
end
else if PosY<0 then
begin
PosY:=0;
velY:=-VelY;
end;
shape1.Left:=Round(PosX);
shape1.Top:=Round(PosY);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Color:=clblack;
PosX:=3;
PosY:=7;
VelX:=3;
VelY:=3;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
shar;
calcmouseval;
end;

procedure TForm1.calcmouseval;
var
mouseX, MouseY:integer;
begin
mouseX:=mouse.CursorPos.X-form1.ClientOrigin.X;
MouseY:=mouse.CursorPos.Y-form1.ClientOrigin.Y;
mouseVelX:= mouseX-lastmouseX;
mouseVely:= mousey-lastmousey;
LastmouseX:=mouseX;
lastmousey:=mousey;
if mousebutton=true then
begin
posX:=mouseX-shape1.width/2;
posY:=mouseY-shape1.width/2;
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mousebutton:=true;
velx:=0;
velY:=0;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mousebutton:=false;
velX:=mousevelX;
VelY:=mousevelY;
end;
end.
Смысл в том, что сюда надо добавить ещё один шар, которым я уже не буду управлять(знаю как сделать), и чтоб когда я кидаю 1й во 2й, 2й начал движение, а первый точно также как от краёв формы отрекашетил от него...
GaLiof вне форума Ответить с цитированием
Старый 25.11.2009, 09:42   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
как узнать координаты ЦЕНТРА объекта Shape
Код:
 
with shape do begin
 cx:=left+width div 2;
 cy:=Top+Height div 2;
end;
понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Столкновение пуль с стенами. VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 28 08.09.2009 19:03
Столкновение тел Лубышев Помощь студентам 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