Текущий архив: 2007.12.23;
Скачать: CL | DM;
ВнизDelphiX проблема Найти похожие ветки
← →
Daiger (2007-02-11 17:55) [0]Я недавно начал изучать DelphiX...столкнулся с одной проблемкой. Вот представим что нас есть есть что - то типа похожее на игру , вид сверху...класс Стена...то бишь кирпичи из которой сделана карта. К примеру можно представить Танчики....вот и есть игрок...нужно чтобы игрок при столкновении тупо остался на месте..т.е. чтобы не проходил сквозь стену
Procedure TPlayer.DoCollision(Sprite: TSprite; Var Done: Boolean);
begin
if Sprite Is TStena then begin
что нужно прописать???
← →
Vovan # 2 (2007-02-11 18:32) [1]Надо написать, что происходит при столкновении.
http://old.mirgames.ru/article/delphix/collision.html
http://delphigamedev.com/tutorials/dxtut3c.htm
← →
Daiger (2007-02-11 20:20) [2]Ну ты простой парень...я вот и спрашиваю...что..помоги...сам код забацать...там ведь па любому не много нужно написать...мне очень нравиться такая лаконичная команда dead была бы ещё для такого случая подобная..было бы прекрасно..
← →
Vovan # 2 (2007-02-12 00:08) [3]Например, так. В класс TPlayer добавляешь поле FHitWall. В DoMove прежде чем установить новые координаты, запоминаешь старые. Устанавливаешь FHitWall в False. Делаешь тест на столкновение.
procedure TPlayer.DoCollision(Sprite: TSprite; Var Done: Boolean);
begin
if Sprite Is TStena then FHitWall := True;
end;
после теста в DoMove проверяешь: если FHitWall = True, то откатываешь к старым координатам.
← →
Daiger (2007-02-12 00:14) [4]Напиши плиз,как объявить это поле....и вобще как и где координаты записывать...? можно просто код напиши....
← →
Vovan # 2 (2007-02-12 14:35) [5]
class TMyPlayer(TSprite)
...
FHitWall: Boolean;
...
end;
procedure TPlayer.DoMove...
var oldX, oldY: Integer;
begin
...
end;
← →
Daiger (2007-02-12 15:42) [6]Весёлая игра найди ошибку:
TPlayer = class(TImageSprite)
FHitWall: Boolean;
protected
Procedure DoCollision(Sprite: TSprite; Var Done: Boolean); Override;
Procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite); override;
end;
TBlock = Class(TImageSprite)
Procedure DoMove(MoveCount: Integer); Override;
Procedure DoCollision(Sprite: TSprite; Var Done: Boolean); Override;
Public
Constructor Create(AParent: TSprite); Override;
End;
Procedure TBlock.DoCollision(Sprite: TSprite; Var Done: Boolean);
Begin
end;
Procedure Tblock.DoMove(MoveCount: Integer);
Begin
Inherited DoMove(MoveCount);
Collision;
end;
constructor TPlayer.Create(AParent: TSprite);
begin
inherited Create(AParent);
Image := Form2.DXImageList1.Items.Find("player");
X := 512;
Y := 678;
Z := 0;
Width := Image.Width;
Height := Image.Height;
PixelCheck := True;
end;
Procedure TPlayer.domove(MoveCount: Integer);
var oldX, oldY: Integer;
begin
inherited DoMove(MoveCount);
collision;
if FHitWall = True then x:= oldx;
if FHitWall = True then y:= oldy;
if (isLeft in Form2.DXInput1.States) and (x>0) then x:=x-5;
if (isRight in Form2.DXInput1.States) and(x<1024-width) then x:=x+5;
if (isUp in Form2.DXInput1.States) and (y>0) then y:=y-5;
if (isDown in Form2.DXInput1.States) and (y<768-height) then y:=y+5;
end;
Procedure TTarelka.DoCollision(Sprite: TSprite; Var Done: Boolean);
begin
if Sprite Is TBlock then begin
FHitWall := True;
← →
Vovan # 2 (2007-02-12 19:39) [7]
procedure TPlayer.domove(MoveCount: Integer);
var oldX, oldY: Integer;
begin
inherited DoMove(MoveCount);
oldX := X;
oldY := Y;
if (isLeft in Form2.DXInput1.States) and (x>0) then x:=x-5;
if (isRight in Form2.DXInput1.States) and(x<1024-width) then x:=x+5;
if (isUp in Form2.DXInput1.States) and (y>0) then y:=y-5;
if (isDown in Form2.DXInput1.States) and (y<768-height) then y:=y+5;
collision;
if FHitWall = True then x:= oldx;
if FHitWall = True then y:= oldy;
end;
← →
Daiger (2007-02-12 19:56) [8]терь ему не нравиться
[Error] Unit2.pas(174): E2010 Incompatible types: "Integer" and "Double"
← →
Vovan # 2 (2007-02-12 20:28) [9]var oldX, oldY: Integer; ---> var oldX, oldY: Double;
← →
Daiger (2007-02-12 21:50) [10]ну это ладно я так и сделал....но теперь при столкновении с объектом просто и тупо прилипает к этому объкту и сё...
← →
Vovan # 2 (2007-02-12 23:15) [11]Так, а если перед collision; написать:
FHitWall := False;
...
if (isDown in Form2.DXInput1.States) and (y<768-height) then y:=y+5;
FHitWall := False;
collision;
if FHitWall = True then x:= oldx;
...
???
← →
Daiger (2007-02-12 23:58) [12]Ну спасибо тебе огромное, За то что возился тут со мной....всё заработало..
Страницы: 1 вся ветка
Текущий архив: 2007.12.23;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.045 c