AGB  ·  Datenschutz  ·  Impressum  







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

Tischtennisproplem

Ein Thema von Adrian112 · begonnen am 12. Jun 2007 · letzter Beitrag vom 12. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Adrian112
(Gast)

n/a Beiträge
 
#1

Tischtennisproplem

  Alt 12. Jun 2007, 15:17
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?
Angehängte Grafiken
Dateityp: jpg tabletennis_133.jpg (1,01 MB, 41x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:23
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
Richard Mahr
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#3

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:25
Oh, selbs geschrieben schon, hab mich vertippt, meine nicht VX sondern VK
  Mit Zitat antworten Zitat
luka

Registriert seit: 10. Aug 2006
Ort: Cottbus
33 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:27
Könnte eine Hausaufgabe sein!

Ansonsten ist dies nur eine Frage der Positionsbestimmung beider Elemente.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:29
http://www.dsdt.info/grundlagen/codes/vks.php

Das sind virtuelle tastencodes! (Suchfunktion; Dauer <1 Minute)
Richard Mahr
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#6

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:32
Hausaufgabe ists nich, wir haben kein Informatikuntericht an der Schule!
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#7

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:33
Der Ball ,,Rutscht'' einfach unter dem Panel durch, wie kann ich das verhindern?
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:35
Prüfe, ob der Ball sich im Panel befindet! Wenn das so ist, dann kehre die Richtung um.
Richard Mahr
  Mit Zitat antworten Zitat
Adrian112
(Gast)

n/a Beiträge
 
#9

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:52
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?
  Mit Zitat antworten Zitat
luka

Registriert seit: 10. Aug 2006
Ort: Cottbus
33 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Tischtennisproplem

  Alt 12. Jun 2007, 15:57
Du musst mit zwei verschiedenen Ebenen rechnen. Einmal des Panels und falls der Ball neben dem Panel ist die untere Kante des Spielfeldes.
  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 18:17 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