Einzelnen Beitrag anzeigen

Tilo2804

Registriert seit: 26. Feb 2014
3 Beiträge
 
#4

AW: Image ruckelt bei Bewegung

  Alt 27. Feb 2014, 20:03
Ich habe ein Panel, welches den Spieler darstellt. Dies ist nicht sichbar. Darauf lege ich ein Image mit dem Spieler.
Um den Spieler zu bewegen verändere ich den Wert left und top.

Hier der Quelltext des Sprungs:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var j : integer;
    Gegend_Datei : File of TGegend;
    Gegend : TGegend;
    hoch : boolean;
begin
///////hochspringen///////////

  if i <= Sprunghoehe // Sprunghöhe ist derzeitig bei 30
    then
      begin
      AssignFile(Gegend_Datei,'GegendDatei.dat'); { GegendDatei umfasst alle Objekte mit dem der Spieler kolidieren kann} 
      Reset(Gegend_Datei);
      hoch:= true;
        for j:=1 to AnzahlPanels do
          begin
            Read(Gegend_Datei,Gegend);
            if (Gegend.Left <= Panel1.Left + Panel1.Width ) and (Gegend.Left + Gegend.Widht >= Panel1.Left)
        then
            if (Panel1.Top >=Gegend.Top + Gegend.Height - 3) and (Panel1.Top <= Gegend.Top + Gegend.Height +3)
              then hoch := false;
          end;
        if hoch = true
          then
            begin
              Panel1.Top:= Panel1.Top - 2;
              if Form1.VertScrollBar.Position > 6 then
              Form1.VertScrollBar.Position:=Form1.VertScrollBar.Position-2; // Bildausschnitt bewegt sich mit Figur mit
              Inc(i);
            end;
        if hoch = false then i:=Sprunghoehe + 1;
        CloseFile(Gegend_Datei);
      end;

///////Kollisionsabfrage///////////

  AssignFile(Gegend_Datei,'GegendDatei.dat');
  Reset(Gegend_Datei);
  for j:=1 to AnzahlPanels do
    begin
      Read(Gegend_Datei,Gegend);
      if (Gegend.Left + Gegend.Widht >= Panel1.Left ) and (Gegend.Left < Panel1.Left + Panel1.Width)
        then
          if (Panel1.Top + Panel1.Height <= Gegend.Top +3) and (Panel1.Top + Panel1.Height >= Gegend.Top-3)
            then
              begin
                if h = true then i:=0;
                if h = false
                  then
                    begin
                      timer1.Enabled:=false;
                      if i>=450 then showmessage('TOT'); // Spieler stirbt ab bestimmter Falltiefe
                      i:=0;
                    end;
              end;
    end;
  CloseFile(Gegend_Datei);

///////Herunterfallen///////////

  if i > Sprunghoehe
    then
      begin
        if Form1.VertScrollBar.Position <> 1800 then
        Form1.VertScrollBar.Position:=Form1.VertScrollBar.Position+2; // Bildausschnitt bewegt sich mit Figur mit
        Panel1.Top:= Panel1.Top + 2;
        Inc(i);
        if i>=250
          then
            begin
              showmessage('TOT');
              i:=0;
              timer1.Enabled:=false;
            end;
      end;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
  Image15.Left:=Panel1.Left;
  Image15.Top:=Panel1.Top;
end;
Timer1 läuft im Intervall von 1ms

Timer3 setzt das Image im Intervall von 10ms immer wieder auf das Panel.

DoubleBuffered ist auf true

die Variable hoch wird auf false gesetzt, wenn der Spieler nur herunterfallen soll und nicht zuvor hochspringen

die Variable h wird auf true gesetzt wenn man die Sprungtaste (Space) drückt
wenn diese losgelassen wird, dann ist h = false


Es ist mir auch aufgefallen, dass es stärker flackert, wenn sich die Spielfigur wieder nach unten bewegt

Geändert von Tilo2804 (27. Feb 2014 um 20:07 Uhr)
  Mit Zitat antworten Zitat