Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тенис [Delphi, Windows]


rsy ©   (2005-05-31 13:15:00) 

Я хочу сделать тенис.
сделал ракетку игрока и мячик
Мячик отбивается от стенок.
Как сделать, чтобы мячик отбивался от ракетки.
Напишете пожалуста код или хотябы подскажите...
(Пишу игру на DelphiX)


Grief   (2005-06-07 20:34:00) [1]

хавок ближе максу пейну. В халве он жуууууткоооо модифицирован вэлв.


OSokin   (2005-06-07 20:16:00) [2]

Угу. Полностью согласен. И еще добавить Collision; в процедуры DoMove


Zer0   (2005-06-04 16:29:00) [3]

есть подозрения что DoCollision и вызывается методом Collision. тогда прога уходит в бесконечную рекурсию.

а что если  все сторочки с
Collision; // Включаем столкновение
убрать?


Zak3D[@Tm]   (2005-06-04 09:59:00) [4]

мм..... я наверно не догоняю, а зачем и для мячи идля биты коллизии считать? Если считаешь допустим для мяча, ты же их считаешь относительно биты?! Сл-но и для быты считаешь?!


rsy   (2005-06-04 09:13:00) [5]

------------------------------------------------------
Я поставил в процедуру DoMove (); Мячика и Ракетки
Collision;
Когда мячик касается ракетки программа зависает.
Посмотрите код внизу.

------------------------------------------------------

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DXClass, DXSprite, DXInput, DXDraws, DXSounds, Wave;

type
 TForm1 = class(TDXForm)
   DXImageList1: TDXImageList;
   DXDraw1: TDXDraw;
   DXInput1: TDXInput;
   DXSpriteEngine1: TDXSpriteEngine;
   DXTimer1: TDXTimer;
   DXSound1: TDXSound;
   DXWaveList1: TDXWaveList;
   procedure FormCreate(Sender: TObject);
   procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
   procedure FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 m,G:real;

implementation

{$R *.dfm}
Type
Tplayer = class (Timagesprite)
Protected
 procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
 Procedure DoMove (move:integer);override;
end;

Tball = class (Timagesprite)
Protected
 Procedure DoMove (move:integer);override;
 procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
PUBLIC
 constructor Create (Aparent:tsprite);override;
end;

constructor TBALL.Create(AParent: TSprite);
begin
 inherited Create(AParent);
 Image := form1.DXImageList1.Items.Find('ball');
 Width := Image.Width;
 Height := Image.Height;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
M:=0.5;
g:=0.5;

with TPlayer.Create(Dxspriteengine1.Engine) do
begin
PixelCheck := True;
 Image := form1.dxImageList1.Items.Find('PL');
 x:=150;
 y:=450;
 Width := Image.Width;
 Height := Image.Height;
end;

with Tball.Create(Dxspriteengine1.Engine) do
begin
 PixelCheck := True;
 Image := form1.dxImageList1.Items.Find('ball');
 x:=10;
 y:=20;
 Width := Image.Width;
 Height := Image.Height;

end;
end;

Procedure Tplayer.DoMove(move:integer);
begin
inherited DoMove (move);
if isleft in form1.DXInput1.States then x:=x-1;
if isright in form1.DXInput1.States then x:=x+1;

if x <= 0 then  x:=0;
if x >= 530 then x:=530;

end;

Procedure Tball.DoMove(move:integer);
begin
inherited DoMove (move);
x:=x+m;
y:=y+G;
IF isup in form1.DXInput1.States then y:=y+1;
if x <= 0   then begin x:=0;     m:=+0.5;  end;
if x >= 600 then begin x:=600;   m:=-0.5;  end;

if Y <= 0   then begin   Y:=0;   G:=+0.5;  end;
if Y >= 460 then begin   Y:=460; G:=-0.5;  end;
Collision;

end;

Procedure Tplayer.DoCollision (Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Tball then
 begin
  M:= +0.5;
  G:= -0.5;
 Collision; // Включаем столкновение
end;
end;

Procedure Tball.DoCollision (Sprite: TSprite; var Done: Boolean);
begin
if Sprite is Tplayer then
 begin
  M:= +0.5;
  G:= -0.5;
 Collision; // Включаем столкновение
end;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw1.CanDraw then exit; // Если нет DirectX выходим
 DXInput1.Update;
 DXSpriteEngine1.Move(LagCount);
 DXSpriteEngine1.Dead;
 DXDraw1.Surface.Fill(0);
 DXSpriteEngine1.Draw;
 DXDraw1.Flip;

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if key = Vk_escape then application.Terminate;

end;

end.


rsy   (2005-06-02 16:16:00) [6]

Приведите пожалуйста код.

Мячик
---------------
DoMove
X,Y + 0.5
---------------
Столкновение с ракеткой ?
---------------
Collison ??????????????????


Да Ру   (2005-06-02 01:52:00) [7]


> XProger ©   (01.06.05 14:34) [7]
> Да Ру, это такой физичский движок на основе которого построена
> физика игры Half-Life 2

А-а-а. Понял. За его использование надо платить кучу бабок.


XProger   (2005-06-01 14:34:00) [8]

Да Ру, это такой физичский движок на основе которого построена физика игры Half-Life 2


Zak3D[@Tm]   (2005-06-01 09:37:00) [9]

Удалено модератором


Да Ру   (2005-06-01 07:37:00) [10]


> Давай уж сразу Havok

А что это ?


XProger   (2005-06-01 06:39:00) [11]

Да Ру, да зачем ODE? Давай уж сразу Havok ;)


Да Ру   (2005-06-01 06:26:00) [12]

Берёшь ODE делаешь ракетку как параллелепипед, мячик как шар, стенки как фриформ. В общем всё эллементарно.


OSokin   (2005-05-31 17:53:00) [13]

У меня арканоид (на code.rpro.ru) написан с DelphiX, там можно взять ракетку (остальное не бери, говорят что тормоз)


XProger   (2005-05-31 16:43:00) [14]

Расчитывать столкновения с ракеткой


Наверх

Титульная страница Поиск, карта сайта Написать письмо