Einzelnen Beitrag anzeigen

Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

Re: "Ruckeln" bei bewegten Shapes abstellen

  Alt 20. Okt 2009, 18:33
Darum

Ball.Left+10

Das ist die width des Balles durch 2.

Wenn ich es mit Tastatursteuerung mache, ruckelt auch nichts...


Das mit CLientWidth war sehr hilfreich!
Jetzt hat sich noch ein Problem aufgetan:


Delphi-Quellcode:
procedure TPong.BewegungstimerTimer(Sender: TObject);
begin
     if Ball.Left+20>=Pong.CLientWidth then vLR:=2;
     if Ball.Left<=0 then vLR:=1;
     if vLR=1 then
        Ball.left:=Ball.Left+5 else Ball.Left:=Ball.Left-5;
     if vOU=1 then Ball.Top:=Ball.Top+2 else Ball.Top:=Ball.Top-2;
     if Ball.Top=40 then
        begin
              Reaktionstimer.Enabled:=False;//Edit
              Gegnerpruefen;
              Reaktionstimer.Enabled:=True;//Edit
              exit;
        end;
     if Ball.top=680 then
        begin
              Reaktionstimer.Enabled:=False;//Edit
              Paddelpruefen;
              Reaktionstimer.Enabled:=True;//Edit
              exit;
        end;
        
end;


procedure TPong.Gegnerpruefen;
begin
             if Gegner.left<Ball.left+10 then
                if Gegner.Left+150>Ball.Left+10 then
                  begin
                        vOU:=1;
                        exit;
                  end else
        begin
             vpunkte:=vpunkte+1;
             Punkte.Caption:=('Punkte: '+inttostr(vPunkte));
             delay(3000);
             Ball.Top:=Pong.Height-300;
             vOU:=1;
        end;
end;


procedure TPong.Paddelpruefen;
begin
        if Paddel.left<Ball.left+10 then
                if Paddel.Left+150>Ball.Left+10 then
                  begin vOU:=2; exit; end else
        begin
             vOU:=2;
             vpunkte:=0;
             Punkte.Caption:=('Punkte: '+inttostr(vPunkte));
             delay(3000);
             Ball.Top:=Pong.Height-300;
             exit;
        end;
end;
Wenn geprüft wird, ob das Paddel getroffen wurde, passiert alles mögliche... Der Ball springt von einem Ort zum anderen, ich bekomme Punkte, wenn der Gegner trifft und der Ball prallt auf Höhe des Gegners ab, obwohl dieser gar nicht trifft...
Findet jemand den Fehler? Ich habs noch kein zweites Mal durchgesehen und auch nur so kurz runtergeschrieben, aber ich denke, da ist eigentlich alles richtig...

Vielleicht hängt das am zweiten Timer, dass während der Prozedur ein Wert geändert wird... Ich deaktivier den während der Prozedur mal...


Edit: Daran hat's gelegen... Hab oben mal die Änderung eingetragen.
  Mit Zitat antworten Zitat