Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Тенис   Найти похожие ветки 

 
rsy   (2005-05-31 13:15) [0]

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


 
XProger ©   (2005-05-31 16:43) [1]

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


 
OSokin ©   (2005-05-31 17:53) [2]

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


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

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


 
XProger ©   (2005-06-01 06:39) [4]

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


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


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

А что это ?


 
Zak3D[@Tm] ©   (2005-06-01 09:37) [6]

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


 
XProger ©   (2005-06-01 14:34) [7]

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


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


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

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


 
rsy   (2005-06-02 16:16) [9]

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

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


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

------------------------------------------------------
Я поставил в процедуру 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.


 
Zak3D[@Tm] ©   (2005-06-04 09:59) [11]

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


 
Zer0 ©   (2005-06-04 16:29) [12]

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

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


 
OSokin ©   (2005-06-07 20:16) [13]

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


 
Grief ©   (2005-06-07 20:34) [14]

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
3-1125647332
Леди
2005-09-02 11:48
2005.10.16
Программное создание DSN


14-1127580199
Иван Шихалев
2005-09-24 20:43
2005.10.16
Дейкстра и Вирт в электронном виде


1-1127382668
Ega23
2005-09-22 13:51
2005.10.16
Генерация GUID


1-1127739413
MakedoneZ
2005-09-26 16:56
2005.10.16
Работа с реестром,запуск проги при старте OC


3-1125557050
magnus
2005-09-01 10:44
2005.10.16
кодировка БД