Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt bewegen (https://www.delphipraxis.net/4953-objekt-bewegen.html)

Delphi-lerner 18. Mai 2003 11:52


Objekt bewegen
 
Wie kann ich ein Objekt in einem Canvas.Feld bewegen. Eine Kreisbewegung auf einer Kreisbahn..also z.b. dass sich die Erde um ein Objekt, die Sonne, auf der dazugehörigen Kreisbahn bewegt.

MfG Lerner

Stanlay Hanks 18. Mai 2003 12:00

Nimm doch einfach ein Shape...dann musst du das nicht immer zeichnen.

Delphi-lerner 18. Mai 2003 12:04

und wie mach ich das mit shape?? Aber ich glaub das soll mit canvas gemacht werden. Also wie geht das mit canvas??

Stanlay Hanks 18. Mai 2003 12:09

Keine Ahnung, wie man das mit canvas macht....müsste ich überlegen, bin aber zu träge....ein shape is eine komponente in der registerkarte zusätzlich. die hat irgendwo eine Eigenschaft die du auf circle umstellen musst, dass hast du nen kreis. und von dem musst du dann nur noch die koordinaten verändern..

Delphi-lerner 18. Mai 2003 12:12

nur kann ich das mit Canvas nicht eigentlich genau das Gleiche wie mit Shape, was ist daran der Unterschied?

Stanlay Hanks 18. Mai 2003 12:18

Shape is ein Objekt, das nicht erst bei Laufzeit gezeichnet werden muss, sondern bei entwurfszeit schon da is.

Delphi-lerner 18. Mai 2003 13:11

und wie bewege ich das Objekt nun??

Stanlay Hanks 18. Mai 2003 13:16

naja , so wie man jedes objekt bewegt:

Delphi-Quellcode:
Shape1.left := Shape1.left +3; //Shape verschiebt sich um 3 Pixel nach rechts
Shape1.top := Shape1.top -3; //Shape verschiebt sich um 3 Pixel nach oben

Delphi-lerner 18. Mai 2003 13:31

und wie kann ich dieses shape auf der linie eines anderen shapes bewegen. Also shape 1 ist eine Ellipse und shape2 ist eine Kreis. Dieser Kreis soll auf shape 1 wandern

Alexander 18. Mai 2003 13:37

mhm Vielleicht solltest du dich mit OpenGL oder DirectX beschäftigen, könnte damit evtl. leichter, aber auf jedenfall bzw. gehen

Delphi-lerner 18. Mai 2003 13:39

Unser Infolehrer hat das mit Canvas und oder Shapes gemacht....also muss das ja irgendwie mit Canvas gehen...

Stanlay Hanks 18. Mai 2003 13:39

Also direkt wirst du das wohl nich hinkriegen, dass du sagt, dsa ding soll sich auf der linie bewegen. Da müsstest irgendwas mit ner schleife und nem Timer machen.

Basic-Master 18. Mai 2003 13:43

wenn du das wirklich mit canvas machen musst, dann musst du so weit ich weiss alles neu zeichnen...
[Edit] ich hab mal n bischen rumexperimentiert:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    public X:Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject); //brauchst n timer
begin
x := x+1;
self.Canvas.Pen.Color := self.Color;
self.Canvas.Rectangle(0,0,self.Width,self.Height);
self.Canvas.Pen.Color := clblack;
self.Canvas.Ellipse(x+1,0,x+30,30);
end;

end.
[/EDIT]

Alexander 18. Mai 2003 13:49

also wenn du das ohne OPenGL und DirectX machen willst und du deine Bildchen auf einer Linie bewegen willst, dann musst du die Koordinaten der Linie auf die Koordinaten des Bildchen übertragen. Das ganze musst du dann mit einem Timer machen.
Sind die Koordinaten der "Linie" bekannt? Und was ist das für eine "Linie"? eine einfach Gerade oder was?

Delphi-lerner 18. Mai 2003 14:57

procedure erdbahn(rx,ry: integer);
var grad: integer;
phi: real;
begin
xs:=breite div 2;
ys:=breite div 2;
for grad:=0 to 1800 do
begin
phi:=180/Pi*grad;
x:=round(rx*cos(phi))+xs;
y:=round(ry*sin(phi))+ys;
form1.Canvas.Pixels[x,y]:=clgreen;
end;
end;


So wird die Bahn erzeugt. Es handelt sich um eine Ellipse. Das Objekt soll auf der Bahn laufen..sieht dann so aus, wie Erde um die Sonne.

Stanlay Hanks 18. Mai 2003 15:05

:shock: Da hast du ja ganz schön was vor...da musst du mit parabeln und so arbeiten. das is nich einfach, zumindest für mich

Man liest sich, Stanlay

Jens Schumann 18. Mai 2003 16:30

Hallo,
habe ich nicht zu diesem Thema neulich ein Beispiel gegeben ?
Beispiel

Stanlay Hanks 18. Mai 2003 16:45

Dein Beispiel is ja schön und gut. aber mit ner elipse is das was ganz anderes wie mit nem kreis. deine planeten drehen sich im kreis. er will die an einer elipse lang laufen lassen.

Man liest sich, Stanlay 8)

Jens Schumann 18. Mai 2003 17:07

Hallo,
stimmt. Das Beispiel ist auch gut.
Das sind die Formeln für die Berechnung der Erdbahn:
Delphi-Quellcode:
    FXmoveEarth:=Xm+Round((FSun.Width-40)*sin(2*Pi*FTime/360));
    FYmoveEarth:=Ym+Round((FSun.Width-40)*cos(2*Pi*FTime/360));
Darin ist FSun.Width-40 der Radius. Die Kreisbahn ist hier ein Sonderfall!!! Und zwar genau der Sonderfall, wenn beide Radien gleich sind. Wenn die Radien unterschiedlich sind, bewegt sich die Erde auf einer Ellipse.
Das ganze geht auch noch weiter. Wenn Du in den Formeln unterschiedliche Frequenzen verwendest bewegt sich die Erde entlang einer Lissajou-Figur.

Stanlay Hanks 18. Mai 2003 18:27

Ne Lissaj... was?
Was isn das fürn ding?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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