AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ball bewegen mit Timer(Ball=Canvas darstellung)
Thema durchsuchen
Ansicht
Themen-Optionen

Ball bewegen mit Timer(Ball=Canvas darstellung)

Ein Thema von Andy1988 · begonnen am 20. Dez 2006 · letzter Beitrag vom 21. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
Andy1988

Registriert seit: 20. Dez 2006
Ort: Langen (Hessen)
7 Beiträge
 
#1

Ball bewegen mit Timer(Ball=Canvas darstellung)

  Alt 20. Dez 2006, 20:02
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?
Lebe so wie du willst und programmiere so wie du willst, aber du trägst die Verantwortung.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 20. Dez 2006, 20:44
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.
  Mit Zitat antworten Zitat
Andy1988

Registriert seit: 20. Dez 2006
Ort: Langen (Hessen)
7 Beiträge
 
#3

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

  Alt 20. Dez 2006, 20:59
Zitat von Cöster:
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:
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
Lebe so wie du willst und programmiere so wie du willst, aber du trägst die Verantwortung.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 20. Dez 2006, 21:19
Was sind denn X2, x3, y2, y3? Die Bezeichner sind nicht besonders vielsagend. Wo speicherst du die Geschwindigkeiten?
  Mit Zitat antworten Zitat
Andy1988

Registriert seit: 20. Dez 2006
Ort: Langen (Hessen)
7 Beiträge
 
#5

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

  Alt 21. Dez 2006, 17:12
X2,y2,x3,y3 das sind die daten der ellipse. Die geschwindigkeit habe ich nirgendswo gespeichert.
Lebe so wie du willst und programmiere so wie du willst, aber du trägst die Verantwortung.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 21. Dez 2006, 17:37
Vorschlag:
Zitat von Cöster:
Die X- und Y-Geschwindigkeiten auch als Variable speichern
Interpretation:
Zitat von Andy1988:
Die geschwindigkeit habe ich nirgendswo gespeichert.
Folge:
Zitat von Andy1988:
Hat leider net geklappt
  Mit Zitat antworten Zitat
Andy1988

Registriert seit: 20. Dez 2006
Ort: Langen (Hessen)
7 Beiträge
 
#7

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

  Alt 21. Dez 2006, 18:10
Zitat von Cöster:
Vorschlag:
Zitat von Cöster:
Die X- und Y-Geschwindigkeiten auch als Variable speichern
Interpretation:
Zitat von Andy1988:
Die geschwindigkeit habe ich nirgendswo gespeichert.
Folge:
Zitat von Andy1988:
Hat leider net geklappt
muss ich dann neue variablen anlegen?
Woher weis das programm dann das es Ellipse bewegen soll wenn ich für die geschwindigkeit Variable anlege?
Lebe so wie du willst und programmiere so wie du willst, aber du trägst die Verantwortung.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 21. Dez 2006, 18:24
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.
  Mit Zitat antworten Zitat
Andy1988

Registriert seit: 20. Dez 2006
Ort: Langen (Hessen)
7 Beiträge
 
#9

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

  Alt 21. Dez 2006, 19:18
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;
Lebe so wie du willst und programmiere so wie du willst, aber du trägst die Verantwortung.
  Mit Zitat antworten Zitat
Andy1988

Registriert seit: 20. Dez 2006
Ort: Langen (Hessen)
7 Beiträge
 
#10

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

  Alt 21. Dez 2006, 19:48
Wenn ihr wollt, dann kann ich eine .exe einfügen damit ihr sehen könnt was passiert.
Lebe so wie du willst und programmiere so wie du willst, aber du trägst die Verantwortung.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz