Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Ball bewegen mit Canvas (https://www.delphipraxis.net/54612-ball-bewegen-mit-canvas.html)

Penelopee 7. Okt 2005 15:59


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:
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);
Nun soll der Ball an allen 4 Wänden apprallen.Wie mache ich das????

MFG Penelopee

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

BenjaminH 7. Okt 2005 16:17

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

tigerman33 7. Okt 2005 16:21

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:
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;
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:

Penelopee 7. Okt 2005 17:26

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);

]

Spoon 7. Okt 2005 17:44

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:
if (x >759)then
die Variable xMove kleiner 0 setzten und natürlich überhaupt die Position des Balles mit xMove berrechnen. (x := x+xmove)

Penelopee 7. Okt 2005 18:10

Re: Ball bewegen mit Canvas
 
wann und wo muss ich die Position des Balles berechnen???Vielen Dank für die Hilfe!!

tigerman33 7. Okt 2005 18:59

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-Referenz durchsuchenwhile,Delphi-Referenz durchsuchenrepeat,Delphi-Referenz durchsuchenfor 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

Penelopee 7. Okt 2005 21:01

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.

sniper_w 7. Okt 2005 21:22

Re: Ball bewegen mit Canvas
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hoffe, es hilft....

tigerman33 7. Okt 2005 21:47

Re: Ball bewegen mit Canvas
 
Die repeat..until Schleife:
Delphi-Quellcode:
repeat
  <Anweisungen>
until <Bedingung>
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:
Delphi-Quellcode:
while <Bedingung> do
  Anweisung
Der Unterschied ist, dass zuerst die Bedingung getestet wird, die Schleife also u.U. gar nicht erst durchlaufen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 Uhr.
Seite 1 von 3  1 23      

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