![]() |
Object bewegung (richtungen)
Hi!
Wie kann ich ein object oder so wie z.B bei einem pong spiel in eine bestimmte richtung wandern lassen also z.B diagonal im 30° winkel oder so? und das wenn er die wand berührt, er zurück geworfen wird also im einfalls winkel = ausfallswinkel weiter wandert= |
Re: Object bewegung (richtungen)
Also Objekte kannst du mit left und top bewegen...willst du das Objekt um eins nach rehcts verschieben setzt du Left einfach eins weiter also z.B.
Delphi-Quellcode:
nach links dann minus :wink:
Panel1.left:=Panel1.left +1
Nach unten bewegst du das ann mit
Delphi-Quellcode:
Nach unten dann auch wieder minus :zwinker:
Panel1.top:=Panel1.top+1
Wenn du das Objekt an der Wand abprallen lassen willst musst du das kontolieren, indem du schaust, ob der Rand des Objektes am Rand vom Fenster bzw. PaintBox o.ä. ist. Heist also...
Delphi-Quellcode:
Repeat
Panel1.left:=Panel1.left+1 Until Panel1.left=Form1.width-Panel1.width |
Re: Object bewegung (richtungen)
Hi,
Ich glaube, es geht um einen beliebigen Winkel, beine Lösung ist immer 45°. Eigentlich ist das nicht sonderlich kompliziert. Pseudocode:
Delphi-Quellcode:
var
winkel: double; // winkel im bogenmaß: von 0 bis 2pi x,y: double; [...] procedure move; begin x := x+cos(winkel); // cos für horizontale bewegung y := y+sin(winkel); // sin für vertikale bewegung panel1.left := round(x); panel1.top := round(y); end; |
Re: Object bewegung (richtungen)
Du solltest vor dein cos(winkel) noch einen Faktor setzen, da sonst dein round darunter Probleme machen wird.
Und auch das ist noch zu viel gedacht. Wenn du nur an den Schlägern und den Wänden abprallen willst, reicht es einfach eine der Geschwindigkeiten umzudrehen. Also:
Delphi-Quellcode:
Das gleiche noch mit x und anstatt der 10 einen passenderen Wert. Und fertig. So einfach.
doube vx, vy;
if (Ball.y<10 or Ball.y > form.Height-10 ) then vy = -vy; Zur Bewegung einfach einen Timer nehmen und alle x ms (x =x +vx ) ausführen. Für ein einfaches Pong reicht das auf jeden Fall. |
Re: Object bewegung (richtungen)
Hmm also sagen wir mal ein object ist in der mitte der form, wie kann ich ihn dann in eine zufällige also random richtung laufen lassen?
|
Re: Object bewegung (richtungen)
Du nimmst dir vier real variablen x,y,vx, vx. (global)
Mit Random (F1 nachschlagen) setzt du sie auf einen Wert (je nach Timereinetstellung vielleicht auf 5-10). Dann ziehst du eine Timerkomponente auf das Form (Reiter System), setzt sein Intervall auf 100 (wäre dann eine zehntel Sekunde). Dort schreibst du dann x := x+vx; y := y+vy; und zeigst dann dein Objekt irgendwie auf dem Formular an. |
Re: Object bewegung (richtungen)
Zitat:
|
Re: Object bewegung (richtungen)
var
Form1: TForm1; x1,y1,winkel: double; x,y: integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin winkel := 40; x := 100; y := 100; paintbox1.canvas.Pen.Color := clblack; Paintbox1.Canvas.MoveTo(100,100); x1 := 100+cos(winkel); y1 := 100+sin(winkel); x := round(x1 * 20); y := round(y1 * 20); Paintbox1.Canvas.LineTo(x,y); end; wieso geht das nicht? |
Re: Object bewegung (richtungen)
Zitat:
WAS geht nicht? Fehlermeldungen? Wird nichts angezeigt? Was soll angezeit werden? Welchen Wert für x und y erwartest du? |
Re: Object bewegung (richtungen)
Zitat:
Ich glaube das Programm sagt alles! :zwinker: 1. Im FormCreate gibts doch noch nicht einmal eine Paintbox! 2. sin und cos erwarten Bogenmaß! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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