Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.052 c
14-1127397669
cyborg
2005-09-22 18:01
2005.10.16
Как сейчас обстоят дела к принтерами?


3-1125647332
Леди
2005-09-02 11:48
2005.10.16
Программное создание DSN


14-1127883605
Ega23
2005-09-28 09:00
2005.10.16
С днем рождения! 27 сентября


8-1116755107
MACTEP'oK
2005-05-22 13:45
2005.10.16
DirectSound. Проблема с записью длительного звукового потока .


2-1125667287
SarDoX
2005-09-02 17:21
2005.10.16
С чего начать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский