![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тенис [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]Расчитывать столкновения с ракеткой