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.