![]() |
Mein Pong Problem
Hallo ich habe das wohl simpleste nicht wirklich seiende Pong in Arbeit.
Es soll ganz einfach erstmal so sein, dass die Kugel von Links nach rechts donnert. Das habe ich mit 2 Timern gemacht, welche sich an bzw. ausschalten sobald die Kugel einen der Balken trifft. Jetzt ist das Problem, dass die Kugel an dem einen Abprallt also auch der 2. Timer aktiviert wurde, jedoch bei Kollision fliegt meine Kugel nicht zurück. Die Timer sind auf 10gestellt.
Delphi-Quellcode:
unit uPong;
{$mode objfpc}{$H+} interface uses Windows, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; // Windows vonnöten damit Tastenabfrage funktioniert (KeyPreview True ist wichtig) type { TfrmPong } TfrmPong = class(TForm) Ball: TShape; btStart: TButton; Spieler1: TShape; Spieler2: TShape; tBall1: TTimer; tBall2: TTimer; procedure btStartClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure tBall1Timer(Sender: TObject); procedure tBall2Timer(Sender: TObject); private { private declarations } public { public declarations } end; var frmPong: TfrmPong; implementation {$R *.lfm} { TfrmPong } procedure TfrmPong.FormKeyDown(Sender: TObject; var Key: Word; // TASTENABFRAGEN Shift: TShiftState); begin if key = vk_up then begin Spieler1.top:=Spieler1.top-7; end else begin if key = vk_down then begin Spieler1.top:=Spieler1.top+7; end // SPIELER 1 else begin if key = ord('W') then begin Spieler2.top:=Spieler2.top-7; end else begin if key = ord('S') then begin Spieler2.top:=Spieler2.top+7; end end end // SPIELER 2 end; end; v TIMER procedure TfrmPong.tBall1Timer(Sender: TObject); begin if Ball.Left=Spieler2.Left then begin tBall2.Enabled:=True; tBall1.Enabled:=False; end else begin Ball.Left:=Ball.Left+3; end; end; procedure TfrmPong.tBall2Timer(Sender: TObject); begin if Ball.Left=Spieler1.Left then begin tBall2.Enabled:=False; tBall1.Enabled:=True; end else begin Ball.Left:=Ball.Left-3; end; end; ^ TIMER procedure TfrmPong.btStartClick(Sender: TObject); begin btStart.Visible:=false; tBall1.Enabled:=true; btStart.Enabled:=false; end; end. |
AW: Mein Pong Problem
Hallo,
ich rate jetzt mal, aber vermutlich ist die Abfrage mit Ball.Left=Spieler2.Left hier das Problem, Wenn der Ball den Left Wert nicht genau trifft, kann es sein, dass er einfach weiter fliegt. Das heisst also, dass du einmal auf <= und auf >= prüfen musst. Das ganze kann man aber auch mit einem Timer prüfen und beim auftreffen auf den Schläger nur den hinzuaddierten Wert ändern, da z.B. C=A+-B C=A-B ist. Also in etwa so:
Delphi-Quellcode:
procedure TfrmPong.tBallTimer(Sender: TObject);
begin if (Ball.Left <= Spieler1.Left) or (Ball.Left >= Spieler2.Left) then FBallSpeed := -FBallSpeed; Ball.Left:=Ball.Left + FBallSpeed; end; |
AW: Mein Pong Problem
Natüürlich :-D So simpel wenn ich -3 bzw. +3 mache ist es doch unmöglich auf den anderen Wert zu kommen.
Ich werde es mir jedoch einfach machen und einfach das Intervall ändern und die Werte auf 5 wechseln so sollte immer der entsprechende Wert kommen. |
AW: Mein Pong Problem
Nein nicht zwingend!
Die Distanz zwischen Ball, Startpunkt und Schlägern ist auschlaggebend. Wenn die Schläger nicht ein Vielfaches von 5 Pixeln auseinander sind, klappt es nicht! |
AW: Mein Pong Problem
Verwende doch das nächste mal bitte das [delphi]-Code-Tag .... mit Syntax-Highlighting sieht das bestimmt übersichtlicher aus.
if Ball.Left = Spieler1.Left then Der Ball springt in 3er-Schritten ... Bist du dir auch ganz sicher, daß der Ball wirklich ganz genau auf diesem Pixel da landet? [edit] Werde wohl langsam alt, ich langsame Schnecke. |
AW: Mein Pong Problem
Funzt alles wunderbar :-D Ist zwar ultra simpel aber für Anschauungszwecke durchaus gut^^
Würde das zwar gerne mit richtiger Kollision machen und dann, dass mein Ball noch in Winkeln und zu rumfliegen kann und das alles aber das ist wohl zuviel für mich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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