AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Ruckeln" bei bewegten Shapes abstellen

Ein Thema von Delphi-Narr · begonnen am 20. Okt 2009 · letzter Beitrag vom 21. Dez 2010
 
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, 17: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz