Autor Beitrag
Delphi-Zone
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45

Win 7
Delphi 7.0 Prof
BeitragVerfasst: Mo 20.09.10 20:37 
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


Zuletzt bearbeitet von Delphi-Zone am Di 21.09.10 13:55, insgesamt 1-mal bearbeitet
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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 :)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)

Für diesen Beitrag haben gedankt: Delphi-Zone
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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.
ausblenden volle Höhe 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
    {private declarations}
    FX, FY: Integer;
  end;

{..}

implementation

{..}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FX := 10;  //Initialisieren: Am Anfang den Ball nach unten links.
  FY := Paintbox1.Height - 10;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  FX := FX + 1;  //Den Ball bewegen
  FY := FY - 1;
  Paintbox1.Repaint;
end;

procedure TForm1.Paintbox1Paint(Sender: TObject);
begin
  Paintbox1.Canvas.Brush.Color := clWhite;  //Hintergrund weiß, hebt sich vom Formularhintergrund ab
  Paintbox1.Canvas.FillRect(Paintbox1.ClientRect);  //Neu zeichnen: Bisheriges auf der PBox weiß übermalen
  Paintbox1.Canvas.Brush.Color := clRed;  //Füllfarbe
  Paintbox1.Canvas.Pen.Color := clBlue;  //Randfarbe
  Paintbox1.Canvas.Ellipse(FX - 10, FY - 10, FX + 10, FY + 10);  //Kreis zeichnen; r=10, M=(FX, FY)
end;

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)

Für diesen Beitrag haben gedankt: Delphi-Zone
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Delphi-Zone Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45

Win 7
Delphi 7.0 Prof
BeitragVerfasst: Di 21.09.10 13:32 
Hiho!

Ich danke für die vielen Antworten!

Ich werde das nachher gleich mal probieren!

Gruß Tom