AW: Ball vom Paddle abprallen
Oder erstell mal ein neues Projekt, benenne das Formular frmDemo und die Unit uDemoMain. Die überschreibst Du dann komplett mit dem folgenden Code und weist im Objektinspektor dem OnCreate-Ereignis die FormCreate-Methode zu.
Delphi-Quellcode:
unit uDemoMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TfrmDemo = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } FPaddle: TPanel; FBall: TImage; FTimer: TTimer; procedure DoOnTimer(Sender: TObject); function Collision(FirstRect, SecondRect: TRect): Boolean; public { Public-Deklarationen } end; var frmDemo: TfrmDemo; implementation {$R *.dfm} const STEP = 2; { TfrmDemo } function TfrmDemo.Collision(FirstRect, SecondRect: TRect): Boolean; var OutRect: TRect; begin Result := IntersectRect(OutRect, FirstRect, SecondRect); end; procedure TfrmDemo.DoOnTimer(Sender: TObject); var PaddleRect, BallRect: TRect; begin FBall.Top := FBall.Top + STEP; PaddleRect := Rect(FPaddle.Left, FPaddle.Top, FPaddle.Left + FPaddle.Width, FPaddle.Top + FPaddle.Height); BallRect := Rect(FBall.Left, FBall.Top, FBall.Left + FBall.Width, FBall.Top + FBall.Height); if Collision(PaddleRect, BallRect) then begin FTimer.Enabled := false; ShowMessage('Kollision'); end; end; procedure TfrmDemo.FormCreate(Sender: TObject); const EDGELENGTH = 20; var FBitmap: TBitmap; begin //Paddel erzeugen FPaddle := TPanel.Create(self); FPaddle.Parent := self; FPaddle.Top := ClientHeight - FPaddle.Height; FPaddle.Left := (ClientWidth - FPaddle.Width) div 2; //Ball erzeugen FBall := TImage.Create(self); FBall.Parent := self; FBall.Width := EDGELENGTH; FBall.Height := EDGELENGTH; FBall.Top := 0; FBall.Left := (ClientWidth - FBall.Width) div 2; //Ball malen und darstellen FBitmap := TBitmap.Create; try FBitmap.Width := EDGELENGTH; FBitmap.Height := EDGELENGTH; FBitmap.Canvas.Brush.Color := clRed; FBitmap.Canvas.Ellipse(0, 0, FBitmap.Width, FBitmap.Height); FBall.Picture.Assign(FBitmap); finally FBitmap.Free; end; //Timer erzeugen FTimer := TTimer.Create(self); FTimer.Interval := 20; FTimer.OnTimer := DoOnTimer; end; end. |
AW: Ball vom Paddle abprallen
Ich könnte vielleicht die Lösung gefunden haben aber jetzt habe ich ein weiteres Problem...
Ich möchte ja die Richtung des Balls ändern wenn er das Paddle berührt. Das mache ich mit FRichtungX := -FRichtungX. Ich wollte FRichtungX := -FRichtungX in eine function einpacken damit es dann so aussieht: result := FRichtungX := -FRichtungX; Dann kriege ich jedoch eine Fehlermeldung -.- wollte dann einfach diese function dann aufrufen wenn Paddle und Ball kollidieren. |
AW: Ball vom Paddle abprallen
Ich verstehe gerade nicht, wie eine Funktion da weiterhelfen bzw. was die zurückgeben soll.
|
AW: Ball vom Paddle abprallen
Ich habe 2 Units und der Richtungswechsel soll bei der erste Unit passieren. Da FRichtungX jedoch in der 2 Unit im privat Teil steht, kann ich da nicht zugreifen und wollte es ganz einfach über diese function machen. Die function einfach in der 2ten unit im public teil schreiben und dann in der ersten unit verwenden um die Richtung zu wechseln. Ob Paddle und Ball kolliedieren hab ich auch in der ersten unit gemacht.
|
AW: Ball vom Paddle abprallen
Wie soll diese Funktion denn aussehen? Und wenn Du schon auf 2 Units verteilst (was ja an sich nicht schlimm ist), dann verteile das doch auch richtig nach Kontext (eine Unit für die Logik und eine für die Darstellung), dann treten solche Probleme eigentlich gar nicht erst auf.
|
AW: Ball vom Paddle abprallen
function TBall.Richtung: Boolean;
begin result := FRichtungX := -FRichtungX; end; so sollte sie aussehen. Und dann einfach in der ersten Unit verwenden, wenn Kollision (paddle und ball) dann TBall.Richtung... Jedoch kriege ich diese Fehlermeldung beim starten: [Fehler] mBall.pas(98): Inkompatible Typen: 'Boolean' und 'Integer' |
AW: Ball vom Paddle abprallen
Liegt es vllt dadrann das FRichtung mit Integer deklariert sind und die function Boolean sein soll?
Falls ja, wie sollte ich das lösen? |
AW: Ball vom Paddle abprallen
Zitat:
Und da Boolean und Integer nicht kompatibel sind gibt es die Fehlermeldung. Ohne das Du das Projekt hochlädst ist das hier das reinste Rätselraten. |
AW: Ball vom Paddle abprallen
Code:
Was ist denn das für eine Zuweisung?
result := FRichtungX := -FRichtungX;
Geht sowas neuerdings? Vielleicht sollte ich mich mal wieder belesen... lg Caps |
AW: Ball vom Paddle abprallen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 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