Форум: "Игры";
Текущий архив: 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.054 c