![]() |
Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektieren
Hey Leute,
bin neu hier und hoffe, dass ich hier meine Frage in der richtigen Rubrik stelle. :stupid: Ich bin im Moment dran, ein Spiel zu programmieren, in dem man mit einem Schläger (Shape2) einen Ball (Shape1) wegschlagen muss. Also wenn Shape1 auf Shape2 kommt, sollte die Y-Bewegung von Shape1 umgewandelt werden. Wie stelle ich das an? Achja, und ist es möglich das Brett statt mit seperaten Knöpfen per, MAUS oder Pfeiltasten nacht rechts oder links zu verschieben? Bitte sehr ausführlich und einfach beschreiben, ist mein erstes Spiel! :hello: Vielen Dank :-) |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Hallo und Willkommen in der DP :dp:,
falls es sich wirklich um .NET handelt, kann ich nicht viel dazu sagen. Du könntest aber einmal die DP-Suche nach dem Stichwort ![]() |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Zitat:
Wie genau mach ich das mit der Maus? Kannst du mir vielleicht jeden Schritt erklären? :| |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Delphi 7 ist definitiv Win32. Und zur Mausbewegung: pack Dir ein TShape auf Dein Formular und nenn es shpSchlaeger. Dann klickst Du auf das Formular, wechselst im Objektinspektor auf den Reiter "Ereignisse" und machst einen Doppelklick neben "OnMouseMove". Dort trägst Du nun die Zeile
Delphi-Quellcode:
ein. Im Ganzen sollte das nun so aussehen:
shpSchlaeger.Left := X - shpSchlaeger.Width div 2;
Delphi-Quellcode:
Nun F9 drücken und die Maus auf dem Formular bewegen.
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin shpSchlaeger.Left := X - shpSchlaeger.Width div 2; end; |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Suuper!
Danke dir. Jetzt muss ich es nurnoch hinbekommen, den Ball vom Schläger abprallen zu lassen.. das krieg ich nicht hin.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,mtBall, mTBrett, StdCtrls, Buttons; type TForm1 = class(TForm) Shape1: TShape; Button8: TButton; Button10: TButton; Timer1: TTimer; Button3: TButton; Button12: TButton; Shape2: TShape; BitBtn1: TBitBtn; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Timer1Timer(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Ball:TBall; Brett:TBrett; rechts:Integer; runter:Integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Ball:=TBall.create; Brett:=TBrett.create; Ball.setzex (Shape1.left); Ball.setzey (Shape1.top); Brett.setzea (Shape2.left); Brett.Setzeb (Shape2.top); rechts:=5; runter:=5; end; procedure TForm1.Button8Click(Sender: TObject); //Brett links begin Brett.bewegebrett(-20,0); Shape2.Left:=Brett.GibA; Shape2.Top:=Brett.GibB; end; procedure TForm1.Button10Click(Sender: TObject); //Brett rechts begin Brett.bewegebrett(20,0); Shape2.Left:=Brett.GibA; Shape2.Top:=Brett.GibB; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Ball.free; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Ball.bewege(rechts,runter); Shape1.Left:=Ball.GibX; Shape1.Top:=Ball.GibY; if Ball.gibX>Form1.clientwidth-Shape1.width then begin rechts:=-rechts; Ball.setzeFarbe(clblue); Shape1.brush.color:=Ball.gibFarbe; end else if Ball.gibY>Form1.clientheight-Shape1.height then begin runter:=-runter; timer1.Enabled:=false; showmessage('Game Over Baby!') end else if Ball.gibX<0 then begin rechts:=-rechts; Ball.setzeFarbe(clyellow); Shape1.brush.color:=Ball.gibFarbe; end else if Ball.gibY<0 then begin runter:=-runter; Ball.setzeFarbe(clred); Shape1.brush.color:=Ball.gibFarbe; end else if [b]HIER MUSS ES REIN... ABER WAS?[/b] then runter:=-runter; end; procedure TForm1.Button12Click(Sender: TObject); begin timer1.Enabled:=false; end; procedure TForm1.Button3Click(Sender: TObject); begin timer1.Enabled:=true; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin close; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Shape2.Left := X - Shape2.Width div 2; end; end. |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Überleg doch einmal: die Y-Koordinate (= Ball.Top) des Balls muss ja Schäger.Top - BallHeight sein (ggf. mit einer gewissen Toleranz). Und für X gibt es die folgenden Möglichkeiten:
- die linke Seite des Balls liegt zwischen der linken und der rechten Seite des Schlägers - die rechte Seite des Balls liegt zwischen der linken und der rechten Seite des Schlägers - die linke Seite des Balls ist kleiner als die linke des Schlägers und die rechte größer als die des Schlägers (völlige Überlappung) Versuch das einmal in Code zu formulieren. |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Zitat:
und kann mir unter deiner Beschreibung nichts vorstellen, was ich mir jetzt vorstellen muss. Sorry und danke für deine Mühe |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Dann mach Dir doch einfach eine Zeichnung.
|
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
mit "die Y-Koordinate (= Ball.Top) des Balls muss ja Schäger.Top - BallHeight sein"
und "die linke / rechte Seite vom Schläger / Ball" .. Darüber denke ich die ganze Zeit nach, kannst du mir nicht den Quellext geben? Dann kann ichs ehernachvollziehen, da ich nicht genau weiß was du mir damit sagen willst (habs versucht zu zeichnen). :lol: Danke. |
Re: Frage zu Shapes: Shape2 soll Shape1 abblocken/reflektier
Die untere Kante des Balls entspricht doch Ball.Top + Ball.Height, sind wir uns da einig? Dementsprechend ist dann die rechte Kante des Balls Ball.Left + Ball.Width, das gleiche gilt äquivalent für den Schläger. Nun kann man das ganz einfach ausrechnen, dafür muss ich Dir keinen Quelltext geben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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