Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Ball bewegen mit Timer(Ball=Canvas darstellung) (https://www.delphipraxis.net/82856-ball-bewegen-mit-timer-ball%3Dcanvas-darstellung.html)

Andy1988 20. Dez 2006 20:02


Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Hallo Leute,

Erstmal muss ich sagen das ich euer Forum richtig Klasse finde, da ich seit langem hier unterwegs bin mich aber nie regestriert habe.
Ich habe mir mal vorgenommen mal ein Pong Spiel zu programmieren, aber da habe ich gleich auch erste Probleme mit dem Ball. Wie kann ich den das ganze so machen, wenn das Spiel gestartet wird, dann soll ein ball auftauchen der hin und her sich bewegt, also vom rand abprallt und von dem schläger usw. Ich weiss net wie ich das realisieren soll. Erste Ansätze habe ich schon versucht, aber das war schon mal ganz schlecht. Hier ist es:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  x2 := x2 + 10;
  y2 := y2 + 10;
  x3 := x3 + 10;
  y3 := y3 + 10;

  // wenn oben oder unten angekommen dann Richtung wechseln
  if (y2 <= 0) or (y2 >= Form1.ClientHeight)
  or (y3 <= 0) or (y3 >= Form1.ClientHeight) then
  begin
    y2 := y2-30;
    y3 := y3-10;
  end;

  //wenn rechts oder links angekommen dann Richtung wechseln
  if (x2  <= 0) or (x2  >= Form1.ClientWidth)
  or (x3  <= 0) or (x3  >= Form1.ClientWidth) then
  begin
    x2 := x2-20;
    x3 := x3-40;
  end;
end;
Diese x und y werte sind von der Ellipse die ich erstellt habe. so jetzt meine frage, wie kann ich das so programmiere, das wenn er den rand von der Form berührt die richtung wechselt und das gleiche bei den schlägern?

Cöster 20. Dez 2006 20:44

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Zitat:

Zitat von Andy1988
wie kann ich das so programmiere, das wenn er den rand von der Form berührt die richtung wechselt und das gleiche bei den schlägern?

Die X- und Y-Geschwindigkeiten auch als Variable speichern und bei Richtungsänderung die entsprechende Geschwindigkeit mit -1 multiplizieren.

Andy1988 20. Dez 2006 20:59

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Zitat:

Zitat von Cöster
Zitat:

Zitat von Andy1988
wie kann ich das so programmiere, das wenn er den rand von der Form berührt die richtung wechselt und das gleiche bei den schlägern?

Die X- und Y-Geschwindigkeiten auch als Variable speichern und bei Richtungsänderung die entsprechende Geschwindigkeit mit -1 multiplizieren.

Hat leider net geklappt, er geht in die untere rechte ecke und bewegt sich ein schritt nach oben und ein schritt nach unten(wo ich ihn nicht mehr sehen.


Ich habe es so gemacht mit den speichern:
Delphi-Quellcode:
x2,y2,x3,y3: Integer;
Das sind die Variablen, dann habe ich ihm werte zugewiesen, da es ja auch gleichzeitig ne ellipse ist:
Delphi-Quellcode:
x2 := 250;
y2 := 260;
x3 := 270;
y3 := 280;
Timer1.Enabled := True;
Das steht bei mir unter FormCreate.
und dannach kommt halt die Procedur die ich gepostet habe und jetzt verändert habe:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  x2 := x2 + 10;
  y2 := y2 + 10;
  x3 := x3 + 10;
  y3 := y3 + 10;

  // wenn oben oder unten angekommen soll er Richtung wechseln
  if (y2 <= 0) or (y2 >= Form1.ClientHeight)
  or (y3 <= 0) or (y3 >= Form1.ClientHeight) then
  begin
    y2 := -y2;
    y3 := -y3;
  end;

  //wenn rechts oder links angekommen soll er Richtung Richtung wechseln
  if (x2  <= 0) or (x2  >= Form1.ClientWidth)
  or (x3  <= 0) or (x3  >= Form1.ClientWidth) then
  begin
    x2 := -x2;
    x3 := -x3;
  end;
end;
Ich hoffe das die Infos einigermaßen reichen.


Mfg

Andy1988

Cöster 20. Dez 2006 21:19

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Was sind denn X2, x3, y2, y3? Die Bezeichner sind nicht besonders vielsagend. Wo speicherst du die Geschwindigkeiten?

Andy1988 21. Dez 2006 17:12

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
X2,y2,x3,y3 das sind die daten der ellipse. Die geschwindigkeit habe ich nirgendswo gespeichert.

Cöster 21. Dez 2006 17:37

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Vorschlag:
Zitat:

Zitat von Cöster
Die X- und Y-Geschwindigkeiten auch als Variable speichern

Interpretation:
Zitat:

Zitat von Andy1988
Die geschwindigkeit habe ich nirgendswo gespeichert.

Folge:
Zitat:

Zitat von Andy1988
Hat leider net geklappt

:gruebel:

Andy1988 21. Dez 2006 18:10

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Zitat:

Zitat von Cöster
Vorschlag:
Zitat:

Zitat von Cöster
Die X- und Y-Geschwindigkeiten auch als Variable speichern

Interpretation:
Zitat:

Zitat von Andy1988
Die geschwindigkeit habe ich nirgendswo gespeichert.

Folge:
Zitat:

Zitat von Andy1988
Hat leider net geklappt

:gruebel:

muss ich dann neue variablen anlegen?
Woher weis das programm dann das es Ellipse bewegen soll wenn ich für die geschwindigkeit Variable anlege?

Cöster 21. Dez 2006 18:24

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Bei jedem Timeraufruf erhöhst du einfach die X-Position(en) um die X-Geschwindigkeit, mit Y das gleiche. Dazu müssten neben der/den Position(en) natürlich auch noch die X- und Y-Geschwindigkeiten in Variablen gespeichert werden.

Andy1988 21. Dez 2006 19:18

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
ja, aber ich sehe nicht in meinem code wo ich das eintragen soll.


EDIT: Ich habe aber doch die geschwindigkeit schon erhöht.


Siehe Hier:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  x2 := x2 + 10;
  y2 := y2 + 10;
  x3 := x3 + 10;
  y3 := y3 + 10;
Edit2:

Was ich aber auch net verstehen kann, wieso kann ich nur sehen das der ball sich bewegt, wenn ich die schläger bewege? Wenn ich sie net bewege, dann sehe ich net das der ball sich bewegt, aber wenn ich wieder drücke, dann sehe ich das er doch ne zeit lang sich bewegt hat, aber ich das net war genommen habe.

Edit3:

So hab folgendes in mein Code hinzugefügt
Delphi-Quellcode:
if (x2 >= ClientHeight-470) or (x3 >= ClientHeight-470) then begin
    x2:= x2+x4;
    x3:= x3+x4;
    Repaint;
    end;
  if (y2 >= ClientHeight-10) or (y3 >= ClientHeight-10) then begin
    y2:= y2+y4;
    y3:= y3+y4;
    Repaint;
  end;
  end;
LastStep := gettickcount;
end;

Andy1988 21. Dez 2006 19:48

Re: Ball bewegen mit Timer(Ball=Canvas darstellung)
 
Wenn ihr wollt, dann kann ich eine .exe einfügen damit ihr sehen könnt was passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz