AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ballspiel(Pongähnlich)

Ein Thema von karrax · begonnen am 6. Nov 2013 · letzter Beitrag vom 7. Nov 2013
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#11

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 18:21
Prima, das ist schon der erste Schritt. Wie sieht Dein Code derzeit aus (nur das OnTimer)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
karrax

Registriert seit: 6. Nov 2013
Ort: Volkmarsen
10 Beiträge
 
Delphi 7 Personal
 
#12

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 18:50
procedure TForm1.FormCreate(Sender: TObject);
begin
Shape1.Left:= Shape1.Left+5;
Shape1.Top:= Shape1.Top+5;
end;

end.

wenn du das meinst
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#13

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 18:54
OK, mich wundert zwar, dass die Methode FormCreate heißt, aber wenn Du sie dem Timer zugewiesen hast, ist das auch OK. Als Nächstes brauchst Du die 2 Variablen, nennen wir sie mal VersatzX und VersatzY. Die müssen unbedingt global sein (normalerweise würde ich sie zwar nicht als globale Variablen deklarieren, aber der Einfachheit halber machen wir das hier mal).
Delphi-Quellcode:
implementation

{$R *.dfm}

var
  VersatzX: integer = 5;
  VersatzY: integer = 5;
Und in Deinem Code ersetzt Du nun jeweils die 5 durch VersatzX für den Versatz auf der X-Achse(also Left) und VersatzY auf der Y-Achse(also Top).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
karrax

Registriert seit: 6. Nov 2013
Ort: Volkmarsen
10 Beiträge
 
Delphi 7 Personal
 
#14

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 19:03
Hab ich gemacht, funktioniert auch.
Habe mich auch schon gewundert warum das so heist, irgendwie unlogisch für mich aber egal.
Was muss ich als nächstes machen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#15

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 19:06
Nun kommt die Kollisionskontrolle. Eine Kollision auf der X-Achse liegt ja dann vor, wenn
- die linke Seite des Shapes kleiner oder gleich 0 oder
- die rechte Seite des Shapes (ergibt sich aus Left + Width des Shapes) größer oder gleich ClientWidth des Formulars ist.

Das solltest Du also zuerst prüfen. Liegt eine Kollision vor, dann drehst Du das Vorzeichen für VersatzX um, also
VersatzX := -VersatzX; Wenn das klappt, lässt sich das ja recht einfach auf die Y-Achse übertragen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
karrax

Registriert seit: 6. Nov 2013
Ort: Volkmarsen
10 Beiträge
 
Delphi 7 Personal
 
#16

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 19:12
Es funktioniert nur der Ball ist schonzu einem Drittel aus dem Feld wieder raus. Wie kann ich das beheben?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#17

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 19:18
Entweder Du tolerierst das oder Du lässt den Ball noch einen "Zwischenschritt" machen. In dem Fall versetzt Du ihn nicht um VersatzX, sondern um -Shape.Left bzw. die Differenz zwischen rechter Shapeseite und Clientbreite des Formulars.

[edit] Das war wahrscheinlich jetzt nicht so richtig verständlich, daher ein Beispiel mit einer lokalen Variablen (wieder nur die X-Achse, etwas Arbeit sollst Du ja noch haben *g*), das macht es leichter:
Delphi-Quellcode:
var
  X: integer;
begin
  X := VersatzX;
  if X < 0 then //Ball bewegt sich nach links
    begin
      if Shape1.Left < -X then
        X := -Shape1.Left;
    end
  else //Ball bewegt sich nach rechts
    begin
      if ClientWidth < (Shape1.Left + Shape1.Width + X) then
        X := ClientWidth - (Shape1.Left + Shape1.Width);
    end;
  Shape1.Left:= Shape1.Left + X;
  (* Hier dann noch dasselbe für die Y-Achse, die Kollisionskontrolle und ggf. das Umdrehen des Vorzeichens *)  
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 6. Nov 2013 um 19:42 Uhr)
  Mit Zitat antworten Zitat
karrax

Registriert seit: 6. Nov 2013
Ort: Volkmarsen
10 Beiträge
 
Delphi 7 Personal
 
#18

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 20:13
wenn ich den code nun einfüge haut er mir leider jedemenge fehlermeldungen raus.
undefinierter bezeichner: Shape1 (kp wieso so heist es ja hier)
undefinierter bezeichner: clientwidth
´)´erwartet aber left gefunden
anweisung erwartet aber datei ende gefunden
verwendete unit`unit1´kann nicht compiliert werden
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#19

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 21:33
Wo hast Du ihn denn eingefügt? Der Code gehört mit in den Timer-Code.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
karrax

Registriert seit: 6. Nov 2013
Ort: Volkmarsen
10 Beiträge
 
Delphi 7 Personal
 
#20

AW: Ballspiel(Pongähnlich)

  Alt 6. Nov 2013, 21:51
Da habe ich es auch gemacht, so sieht es aus
begin
Shape1.Left:= Shape1.Left+VersatzX;
Shape1.Top:= Shape1.Top+VersatzY;
if (0 >= self.Shape1.Left) or
(self.Shape1.Left >= self.Width - self.Shape1.width) then
VersatzX := -VersatzX
end;

var
X: integer;
begin
X := VersatzX;
if X < 0 then //Ball bewegt sich nach links
begin
if Shape1.Left < -X then
X := - Shape1.Left;
end
else //Ball bewegt sich nach rechts
begin
if ClientWidth < (Shape1.Left + Shape1.Width + X) then
X := ClientWidth - (Shape1.Left + Shape1.Width);
end;
Shape1.Left:= Shape1.Left + X;
(* Hier dann noch dasselbe für die Y-Achse, die Kollisionskontrolle und ggf. das Umdrehen des Vorzeichens *)
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      

 

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 22:41 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