Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tischtennisproplem (https://www.delphipraxis.net/93864-tischtennisproplem.html)

Adrian112 12. Jun 2007 14:17


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:
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.
Und noch eine Frage:
Was sind Die VX Bezeiner der Buchstaben?

Tormentor32 12. Jun 2007 14:23

Re: Tischtennisproplem
 
Delphi-Quellcode:
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.
VX ist die Geschwindigkeit auf der X-Achse

Verstehst du den Code überhaupt? Selbst geschrieben hast du ihn jeednfalls nicht :warn: :wink:

Adrian112 12. Jun 2007 14:25

Re: Tischtennisproplem
 
Oh, selbs geschrieben schon, hab mich vertippt, meine nicht VX sondern VK

luka 12. Jun 2007 14:27

Re: Tischtennisproplem
 
Könnte eine Hausaufgabe sein!

Ansonsten ist dies nur eine Frage der Positionsbestimmung beider Elemente.

Tormentor32 12. Jun 2007 14:29

Re: Tischtennisproplem
 
http://www.dsdt.info/grundlagen/codes/vks.php

Das sind virtuelle tastencodes! (Suchfunktion; Dauer <1 Minute)

Adrian112 12. Jun 2007 14:32

Re: Tischtennisproplem
 
Hausaufgabe ists nich, wir haben kein Informatikuntericht an der Schule!

Adrian112 12. Jun 2007 14:33

Re: Tischtennisproplem
 
Der Ball ,,Rutscht'' einfach unter dem Panel durch, wie kann ich das verhindern?

Tormentor32 12. Jun 2007 14:35

Re: Tischtennisproplem
 
Prüfe, ob der Ball sich im Panel befindet! Wenn das so ist, dann kehre die Richtung um.

Adrian112 12. Jun 2007 14:52

Re: Tischtennisproplem
 
Ich hab den Quelltext jetzt so abgeändert:

Delphi-Quellcode:
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;
Der Ball prallt jetzt zwar am Panel ab, aber auch wenn er das Panel verfehlt prallt er gena auf der Höhe
des Panels ab. Das liegt wohl daran das ich die Top Eigenschaft genommen hab, aber wie soll ichs sonst machen?

luka 12. Jun 2007 14:57

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 11:56 Uhr.
Seite 1 von 2  1 2      

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