![]() |
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
![]() ![]() ![]()
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 07:08 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