Ball bewegen mit Canvas
Hallo!
Ich benutze Delphi 7 Ich bin noch Anfänger , habe seit ein paar Wochen in der Schule Informatik.Nun zu meinem Problem: Ich habe einen Ball gezeichnet mit diesem Code:Image1.Canvas.Ellipse(x,y,x+50,y+50).Und diesen Ball habe ich auch schon in Bewegung versetzt:
Delphi-Quellcode:
Nun soll der Ball an allen 4 Wänden apprallen.Wie mache ich das????
y:=100;
Image1.Canvas.Pen.Color:=clgreen; Image1.Canvas.brush.Color:=clyellow; Image1.Canvas.Ellipse(x,y,x+50,y+50); Image1.Canvas.Pen.Color:=clwhite; Image1.Canvas.brush.Color:=clwhite; Image1.Canvas.Ellipse(x,y,x+50,y+50); x:=x+10; Image1.Canvas.Pen.Color:=clgreen; Image1.Canvas.brush.Color:=clyellow; Image1.Canvas.Ellipse(x,y,x+50,y+50); MFG Penelopee [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Ball bewegen mit Canvas
Hallo,
willkommen in der DP Verwende doch bitte die Delphi Tags, um deinen Code zu kennzeichnen... Überprüfe doch einfach die X bzw. die Y Position des Balls, wenn sie >=Höhe,Breit ist, dann einfach das + zu einem - machen. oder bei <=0 halt wieder zu +# Grüße Benjamin |
Re: Ball bewegen mit Canvas
Du speicherst dir die aktuelle x- und y-Bewegungsrichtung. Dann überprüfst du, ob der Ball gerade die Wand berührt, wenn ja, setzt du die Bewegungsrichtung entsprechend um. Als Beispiel (für die x-Richtung):
Delphi-Quellcode:
Das ist jetzt quick and dirty, und für den Programmierstil gehör ich eigentlich auch erschossen, aber ein bisschen Arbeit muss dir ja auch noch bleiben. :wink:
var xMove: integer;
x,y: integer; begin // Initialisieren: xMove := +10; x := 100; y := 100; repeat // alten Ball löschen: Image1.Canvas.Pen.Color:=clwhite; Image1.Canvas.brush.Color:=clwhite; Image1.Canvas.Ellipse(x,y,x+50,y+50); // neuen Ball malen: Image1.Canvas.Pen.Color:=clgreen; Image1.Canvas.brush.Color:=clyellow; Image1.Canvas.Ellipse(x,y,x+50,y+50); if (x = 50) and (xMove < 0) then xMove := +10 else // an der linken Wand abprallen if (x = Image1.Width - 50) and (xMove > 0) then xMove := -10; // an der rechten Wand abprallen x := x + xMove; Delay(500); until <Abbruchbedingung>; end; |
Re: Ball bewegen mit Canvas
danke für die hilfe , ich hab aber noch ein problem.Wenn der Ball die Wand erreicht , prallt er einmal ab , aber dann ist die if Bedingung ja nicht mehr erfüllt und der Ball geht wieder auf die wand zu!!Hier nochmla mein Code:
[xmove:=+50; y:=100; Image1.Canvas.Pen.Color:=clgreen; Image1.Canvas.brush.Color:=clyellow; Image1.Canvas.Ellipse(x,y,x+50,y+50); Image1.Canvas.Pen.Color:=clwhite; Image1.Canvas.brush.Color:=clwhite; Image1.Canvas.Ellipse(x,y,x+50,y+50); x:=x+10; Image1.Canvas.Pen.Color:=clgreen; Image1.Canvas.brush.Color:=clyellow; Image1.Canvas.Ellipse(x,y,x+50,y+50); if (x >759)then x:=x-50; Image1.Canvas.Pen.Color:=clgreen; Image1.Canvas.brush.Color:=clyellow; Image1.Canvas.Ellipse(x,y,x+50,y+50); ] |
Re: Ball bewegen mit Canvas
Du hast da einen grundsätzlichen Fehler drin, du deklarierst zwar xMove, doch benutzt du sie nicht.
Wenn du dir das Bsp. von tigerman anschaust, so ist: Neue_Ball_Position := Alte_Ball_Position + xMove xMove muss dementsprechend für eine Bewegung nach rechts größer 0 sein, für eine Bewegung nach links kleiner 0. d.h. du musst bei
Delphi-Quellcode:
die Variable xMove kleiner 0 setzten und natürlich überhaupt die Position des Balles mit xMove berrechnen. (x := x+xmove)
if (x >759)then
|
Re: Ball bewegen mit Canvas
wann und wo muss ich die Position des Balles berechnen???Vielen Dank für die Hilfe!!
|
Re: Ball bewegen mit Canvas
Du berechnest die Position des Balles in der repeat..until-Schleife. Hattet ihr Schleifen schon im Unterricht? Wenn nicht, sieh dir mal while,repeat,for an. Damit wird der Ball solange bewegt, bis eine von dir vorgegebene Abbruchbedingung eintritt. Die Berechnung der Position (bzw. in meinem Beispiel erst mal ja nur der x-Koordinate) des Balles geschieht in der Zeile
Delphi-Quellcode:
x := x + xMove
|
Re: Ball bewegen mit Canvas
Kannst du bitte nochmal den Text Delphi Text posten , so dass es funktioniert.Wär sehr nett!Und wir hatten in der Schule bisher nur if und for schleifen.
|
Re: Ball bewegen mit Canvas
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hoffe, es hilft....
|
Re: Ball bewegen mit Canvas
Die repeat..until Schleife:
Delphi-Quellcode:
Das wiederholt die Anweisungen solange, bis die Abbruchbedingung erfüllt ist, mindestens jedoch einmal (die Abbruchbedingung wird ja erst am Ende überprüft). Ähnlich funktioniert die while Schleife:
repeat
<Anweisungen> until <Bedingung>
Delphi-Quellcode:
Der Unterschied ist, dass zuerst die Bedingung getestet wird, die Schleife also u.U. gar nicht erst durchlaufen wird.
while <Bedingung> do
Anweisung |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 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