![]() |
Tischtennisproplem
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin gerade dabei eine 2D Tischtennistsimulation zu proggen. Wie kann ich (Siehe Bild) dafür sorgen, das der Ball nicht von der ober und unterkante des Formulars abprallt sondern nur von den Seiten und Schlägern (2 Panels)? Mein Quelltext
Delphi-Quellcode:
Und noch eine Frage:
unit Tabletest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Shape1: TShape; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; vx, vy: Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Randomize; vx := -10 + Random(20); vy := -10 + Random(20); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Shape1.Left := Shape1.Left + vx; Shape1.Top := Shape1.Top + vy; if (Shape1.Left > ClientWidth - Shape1.Width - 1) or (Shape1.Left < 1) then vx := vx * -1; if (Shape1.Top > ClientHeight - Shape1.Height - 1) or (Shape1.Top < 1) then vy := vy * -1; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_LEFT: begin Panel2.Left := Panel2.Left - 5; Key := 0; end; VK_RIGHT: begin Panel2.Left := Panel2.Left + 5; Key := 0; end; end; end; end. Was sind Die VX Bezeiner der Buchstaben? |
Re: Tischtennisproplem
Delphi-Quellcode:
VX ist die Geschwindigkeit auf der X-Achse
unit Tabletest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Shape1: TShape; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; vx, vy: Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Randomize; vx := -10 + Random(20); vy := -10 + Random(20); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Shape1.Left := Shape1.Left + vx; Shape1.Top := Shape1.Top + vy; if (Shape1.Left > ClientWidth - Shape1.Width - 1) or (Shape1.Left < 1) then vx := vx * -1; {if (Shape1.Top > ClientHeight - Shape1.Height - 1) or (Shape1.Top < 1) then vy := vy * -1;} //Hier prallt der Ball oben und unten ab end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_LEFT: begin Panel2.Left := Panel2.Left - 5; Key := 0; end; VK_RIGHT: begin Panel2.Left := Panel2.Left + 5; Key := 0; end; end; end; end. Verstehst du den Code überhaupt? Selbst geschrieben hast du ihn jeednfalls nicht :warn: :wink: |
Re: Tischtennisproplem
Oh, selbs geschrieben schon, hab mich vertippt, meine nicht VX sondern VK
|
Re: Tischtennisproplem
Könnte eine Hausaufgabe sein!
Ansonsten ist dies nur eine Frage der Positionsbestimmung beider Elemente. |
Re: Tischtennisproplem
![]() Das sind virtuelle tastencodes! (Suchfunktion; Dauer <1 Minute) |
Re: Tischtennisproplem
Hausaufgabe ists nich, wir haben kein Informatikuntericht an der Schule!
|
Re: Tischtennisproplem
Der Ball ,,Rutscht'' einfach unter dem Panel durch, wie kann ich das verhindern?
|
Re: Tischtennisproplem
Prüfe, ob der Ball sich im Panel befindet! Wenn das so ist, dann kehre die Richtung um.
|
Re: Tischtennisproplem
Ich hab den Quelltext jetzt so abgeändert:
Delphi-Quellcode:
Der Ball prallt jetzt zwar am Panel ab, aber auch wenn er das Panel verfehlt prallt er gena auf der Höhe
procedure TForm1.Timer1Timer(Sender: TObject);
begin Shape1.Left := Shape1.Left + vx; Shape1.Top := Shape1.Top + vy; if (Shape1.Left > ClientWidth - Shape1.Width - 1) or (Shape1.Left < 1) then vx := vx * -1; if (Shape1.Top > Panel2.Top - Shape1.Height - 1) or (Shape1.Top < 1) then vy := vy * -1; end; des Panels ab. Das liegt wohl daran das ich die Top Eigenschaft genommen hab, aber wie soll ichs sonst machen? |
Re: Tischtennisproplem
Du musst mit zwei verschiedenen Ebenen rechnen. Einmal des Panels und falls der Ball neben dem Panel ist die untere Kante des Spielfeldes.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
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-2025 by Thomas Breitkreuz