Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

jede position einer line mit der player pos vergleichen

  Alt 3. Okt 2004, 08:59
Hallo,
ich habe eine line(moveTo, LineTo) und möchte nun jede pos mit der Player Position vergleichen, ich habe mir dazu folgenden qullcode überlegt:
Delphi-Quellcode:
for i:=0 to High(Leser) do begin
    with Leser[i] do begin
      if m = 0 then TimeLeser(i); // für einen zeitgesteuerten Leser
      if Typ = 0 then begin
        GFL.DrawLine(x*16,(y+1)*16,(x)*16,(y+w)*16);
        GFL.DrawLine((x+1)*16,(y+1)*16,(x+1)*16,(y+w)*16);
      end;

      if Typ = 1 then begin
// Hier die colisions abfrage für den player und der line w ist die länge, die ändert sich alle paar sekunden
        if (Player.X = X) and (Player.Y =Y) and (Player.X=X+W) and (Player.y =y+w ) then Player.is_C:=True;
        GFL.DrawLine(x*16,(y+1)*16,(x+w)*16,(y+w)*16);
        GFL.DrawLine((x+1)*16,(y+1)*16,((x+1)+w)*16,(y+w)*16);
      end;
      if Typ = 2 then GFL.DrawLine(x*16,(y+1)*16,(x-w)*16,(y+w)*16);
    end;
  end;

procedure TLeser.CheckKey(Key:Word;Vaule:Boolean);
var
  px,py,i:Integer;
  C,ismove:Boolean;
begin
  c:=False; ismove:=False;
  Tasten[Key]:=Vaule;

  px:=player.x; py:=player.y;

  if Tasten[VK_LEFT] = True then begin ismove:=True; px:=px-1; end;
  if Tasten[VK_RIGHT] = True then begin ismove:=True; px:=px+1; end;
  if Tasten[VK_UP] = True then begin ismove:=True; py:=py-1; end;
  if Tasten[VK_DOWN] = True then begin ismove:=True; py:=py+1; end;

  if Map[px,py].typ <> None then c:=True;
  if (px < 0 ) or (py < 0 ) then c:=True;

  if isMove = True then begin
    for i:=0 to High(Leser) do begin
      with Leser[i] do begin
        
        if TYP = 0 then begin
          if (PX >= X) and (PY >=Y) and (PX <=X) and (PY <= Y+w) then begin
            c:=True;
            Player.x:=1;
            Player.y:=3;
            break;
          end;
        end;
        // hier wird nachgeschaut ob eine collisions stattgefunden hat
        if TYP = 1 then c:=player.is_C;
      end;
    end;
  end;

  // und nur wenn es keine collisions gegeben hat, werden die neuen positions angaben gesetzt !
  if c = False then begin
    player.x:=px;
    player.y:=py;
  end;


end;
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat