Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - wie erstellt man Pong
Delphi-Zone - Mo 20.09.10 20:37
Titel: wie erstellt man Pong
Hallo,
Ich hab mich mal gefragt, wenn man jetzt z.b Pong proggen möchte.
Wie sag ich dem ball den das er wenn er so eine scheibe berührt , die richtung ändern soll?
und wie erstell ich so ein ball? kann das ein image sein oder durch canvas.moveto(x)(y)
canvas.lineTo(x)(y)???
Danke im Vorraus!
Gruß Tom
Tilman - Mo 20.09.10 22:15
Es kann ein Image sein, oder du kannst es mit Canvas selbst malen, beides ist möglich :)
Und das mit der Richtung würde ich etwa so machen:
-> du definierst eine bzw. zwei Variablen für die Bewegung, z.B. BewegungX und BewegungY. Beide werden mit einem Wert, etwa 1, belegt.
-> Durch einen Timer lässt du den Ball bewegen, z.B. ball.left := ball.left + BewegungX;
-> ausserdem musst du prüfen ob der Ball schon zu weit geflogen ist: if ball.left > 300 then...
-> wenn der Ball zu weit geflogen ist, dann muss die Bewegung umgekehrt werden. Das erreichst du mit BewegungX := -BewegungX;, damit wird der positive Wert negativ, oder wenn er negativ ist dann wird er damit positiv.
Natürlich musst du auch abfragen ob der Ball dann zuweit nach links geflogen ist, und die Y-Koordinate berücksichtigen. Und die Breite vom Ball musst du auch noch mit reinrechnen, aber das kannst du vielleicht alles selbst :)
Hidden - Di 21.09.10 01:51
Abend :)
1.: Auf den Editieren-Button oben an deinem ersten Posting klicken, und einen vielsagenderen Titel geben. :P
2.: Weiterlesen ;)
Ich würde ganz langsam, einen Schritt nach dem anderen machen: Zuerst einmal ein Bild zeichnen, und es zum Bewegen bringen.
Dazu: Wir ziehen einen Timer und eine Paintbox auf das Formular. Unter den Ereignissen im Object Inspector links suchen wir bei der Paintbox ein OnPaint - und doppelklicken in das leere Feld rechts davon.
Delphi erstellt die Methode Paintbox1Paint für uns. Die implementieren wir. Auf die gleiche Weise erstellen wir die OnTimer-Methode von Timer1, und stellen Enabled auf true. Deklarieren wir noch zwei Variablen, in denen wir uns die Position des Balls merken, haben wir alles.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| type TForm1 = class(TForm) private FX, FY: Integer; end;
implementation
procedure TForm1.FormCreate(Sender: TObject); begin FX := 10; FY := Paintbox1.Height - 10; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin FX := FX + 1; FY := FY - 1; Paintbox1.Repaint; end;
procedure TForm1.Paintbox1Paint(Sender: TObject); begin Paintbox1.Canvas.Brush.Color := clWhite; Paintbox1.Canvas.FillRect(Paintbox1.ClientRect); Paintbox1.Canvas.Brush.Color := clRed; Paintbox1.Canvas.Pen.Color := clBlue; Paintbox1.Canvas.Ellipse(FX - 10, FY - 10, FX + 10, FY + 10); end; |
thepaine91 - Di 21.09.10 09:07
Ich würde das mit OpenGL realisieren. Dann ist es auch noch performant.
Aber Delphi liefert in seinen Beispielen bereits ein PinBall mit nennt sich glaube ich Earthball da kann man sich das mal abgucken und auf Pong übertragen. (D7 war es zumindest dabei)
Hidden - Di 21.09.10 13:14
Moin!
Ist OpenGL nicht eher etwas für Fortgeschrittene? ;)
Sicherlich kann man damit auch einsteigen, aber den Umgang mit der Default-Zeichenoberfläche Canvas sollte man ihmo dringender beherrschen :)
lg,
Delphi-Zone - Di 21.09.10 13:32
Hiho!
Ich danke für die vielen Antworten!
Ich werde das nachher gleich mal probieren!
Gruß Tom
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!