Einzelnen Beitrag anzeigen

dustinthewind55

Registriert seit: 18. Okt 2004
3 Beiträge
 
#1

DelphiX kollision und bewegung mit TObjectList

  Alt 20. Jun 2005, 21:46
Hallo leuts,

ich bin grad dabei ein kleines 2d spiel mit hilfe von delphiX zu schreiben.
Nun zu meinen problem:
der player soll in der mitte stehen bleiben und die objekte sollen sich bewegen. bis dahin kein
problem aber wenn ich nun die kollisionskontrolle einbauen will habe ich das probem dass im falle
einer kollision nur das objekt mit dem ich kollidiere stehen bleibt (wegen vererbung)

dann bin ich auf die idee gekommen die bewegung sowie die kollisionskontrolle in meine player move
procedure reinzupacken und die bewegung über eine Tobjectlist mit ner schleife zu machen. die
gegenstände wollen sich nur blöder weise keinen mm bewegen.

Delphi-Quellcode:
var gegen: TObjectList

 Procedure TPlayer.DoMove(MoveCount: Integer);
var i: Integer;
Begin
  Inherited domove(movecount);

  If isup in form1.dxinput1.states
  Then
  Begin
    for i:=0 to gegen.Count-1 do
     TGegenstand(gegen[i]).Y:=TGegenstand(gegen[i]).Y+1;
   if collision>0 then //falls der player mit mehr als nix kollidiert ;)
     for i:=0 to gegen.Count-1 do
       TGegenstand(gegen[i]).Y:=TGegenstand(gegen[i]).Y-1;
  end;

  If isdown in form1.dxinput1.states
  Then
  Begin
     for i:=0 to gegen.Count-1 do
      TGegenstand(gegen[i]).Y:=TGegenstand(gegen[i]).Y-1;
    if collision>0 then
     for i:=0 to gegen.Count-1 do
       TGegenstand(gegen[i]).Y:=TGegenstand(gegen[i]).Y+1;
  end;

  If isleft in form1.dxinput1.states
  Then
  Begin
    for i:=0 to gegen.Count-1 do
     TGegenstand(gegen[i]).X:=TGegenstand(gegen[i]).x+1;
   if collision>0 then
     for i:=0 to gegen.Count-1 do
       TGegenstand(gegen[i]).X:=TGegenstand(gegen[i]).x-1;
  end;

  If isright in form1.dxinput1.states
  Then
  Begin
    for i:=0 to gegen.Count-1 do
     TGegenstand(gegen[i]).X:=TGegenstand(gegen[i]).x-1;
   if collision>0 then
     for i:=0 to gegen.Count-1 do
       TGegenstand(gegen[i]).X:=TGegenstand(gegen[i]).x+1;
  end;
end;
wär echt kewl wenn mir jemand helfen könnt. vielen dank im voraus.
greetz dustin
  Mit Zitat antworten Zitat