![]() |
Ballverlauf malen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi habe folgendes Prob, ich möchte gern bei meinem Ping Pong, dass er den Ballverlauf mit einem Strich nachmalt.
hier erst mal meein QT
Delphi-Quellcode:
procedure Tpingpong.Timer1Timer(Sender: TObject);
begin randomize; //rechte Seite if ((h_dir =1) And (ball.Left >= clientwidth -(ball.Width+9))) then begin h_dir :=-1; h_speed := random (13)+ 1; spielerA:= spielerA +1 ; end; //unten if ((v_dir =1)and (ball.Top >= clientheight-(ball.Height+9+20))) then begin v_dir :=-1; v_speed := random (13) +1 ; end; //oben if ((v_dir =-1) And (ball.top<=0)) then begin v_dir:=1 ; v_speed:= random (13)+1 ; end; //links if ((h_dir =-1) And (ball.Left <= 0)) then begin h_dir :=1 ; h_speed := random (13)+1 ; SpielerB:= SpielerB -1; end; ball.Left :=ball.Left+h_speed*h_dir; ball.Top :=ball.Top+v_speed*v_dir; pingpong.canvas.pen.color := clred ; pingpong.canvas.moveto(ball.Left,ball.top); pingpong.canvas.lineto(ball.left ,ball.Height); //<--- Das ist die Stelle wo ich // nicht weiter komme. end; |
Re: Ballverlauf malen
Editiere doch bitte den obigen Beitrag und nutze die [delphi]CODE[/delphi] Tags:
Delphi-Quellcode:
...:cat:...
Code
|
Re: Ballverlauf malen
jo sry hab ich vergessen :lol:
habs geändert |
Re: Ballverlauf malen
du musst Form1(in deinem fall Pingpong).Repaint vor dem erneuten zeichenvorgang hinzufügen :) (dann ist immer nur eine linie ;) )
ah sorry nachzeichnen ist nicht schwer - du musst aber auf jeden fall immer die ganze zeichenfläche imemr speichern und laden damit nicht überzeichnet wird(sry wenns einfacher geht hab n jahr pause gemacht mit delphi ;) ) - auf jeden fall würd ich dir empfehlen eien Paintbox zu machen ;) (gibt hier auch solche tutorials bei grafik in der codelib guck dort mal ;) ) grüße Nico |
Re: Ballverlauf malen
Da du es so "umständlich" programmiert hast (damit meine ich, so würde ich es nie machen!) ist der einfachere weg nicht benutzbar...
du musst ein array erstellen, welches sich die ganzen positionen von dem ball merkt. wie groß dieses array sein muss hängt von der größe und dem winkel ab in die der ball sich bewegt. dann musst du bei jedem schritt überprüfen ob der ball schon von einem dieser punkte weg ist und dann dort den strich hinmalen. dann musst du diesen punkt wieder löschen, da er ansonsten vielleicht nochmal berechnet wird. hoffe du hast verstanden was ich sagen möchte ^^ Flare |
Re: Ballverlauf malen
naja generell könnte er mit
Delphi-Quellcode:
; auch nachmalen ;) aber eben bild speichern ist wichtig
canvas.pixels[x,y] := clblack
|
Re: Ballverlauf malen
@Nicoduis: Das Problem bei dieser Methode ist, dass der Ball ja wieder gelöscht wird und damit auch die Linie die gerade ebend gemalt hat.
Oder man löscht den Kreis, lässt den Strich ziehen, speichert dieses Bild, macht des Kreis wieder hin, löscht ihn wieder weg, lädt das eben gespeicherte bild, zeichnet die neue linie, speichert wieder, ... (kann auch sein dass du das meintest, Nicoduis) Flare |
Re: Ballverlauf malen
was soll ich denn jetzt änderen ^^ oder machen...
ich weiß das es iwie klappt. Aber wie ahh ich weiß es net mehr ^^ lol auch mit den .canvas.lineto und bla ach ...ah :wall: :-D danke aber schon mal |
Re: Ballverlauf malen
@flare kreis als shape?
|
Re: Ballverlauf malen
Keine Ahnung, ich meine mit Kreis das Ding, was du als Ping Pong Ball durchgehen lässt. Ich weiß nicht was in deinem Fall der Ball ist, ob Shape oder TImage oder sonstwas. :wink:
Flare |
Re: Ballverlauf malen
naja solange es ein shape/image ist ist das repaint nicht so das problem
auf jeden fall muss das bild imemr wieder gespeichert werden8bitte such hier bei graphik in der code library ;) ) grüße Nico |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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 by Thomas Breitkreuz