Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Starfield (https://www.delphipraxis.net/159451-starfield.html)

uliii92 28. Mär 2011 19:35

Starfield
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe eine Starfield-Simulation. Nun möchte ich erreichen, dass sich die Shapes je nach dem in welchem (gedachten) Quadranten sie zufällig erzeugt werden in eine bestimmte Richtung wegbewegen, immer in die jeweils nächste Ecke. Wenn sie also unten links erzeugt werden sollen sie in die untere linke Ecke gehen...
Im Anhang die Starfield-Simulation. Wie muss ich vorgehen? Ich habe schon so vieles versucht, habe die Höhe etc durch 2 geteilt ...aber habe noch nicht so viel Erfahrung mit delphi, vielleicht könnt ihr mir ja helfen.

isilive 29. Mär 2011 02:06

AW: Starfield
 
Hallo Ulli!

Willkommen in der DP! :dp:

- Bitte hänge entweder das ganze Projekt an, dann kann man sich das in der IDE anschauen
- oder stell einfach nur den Code hier ein -> in Delphi Tags

Was deinen Code betrifft. Als ich ihn gesehen habe, dachte ich mir ehrlichgesagt: das kann nicht funktionieren. Aber das witzige ist: er funktioniert! :shock::-D

Du musst beim "Erzeugen eines neuen Shapes" (also eigentlich bekommt ja ein bestehendes Shape eine neue Position und wird klein gemacht) einen Richtungsvektor speichern. Also wenn Shape1 links oben "neu erzeugt" wurde, musst du irgendwo speichern das es sich nach links oben bewegen soll. Das kann eine Variable oder ein Array oder whatever sein.

Delphi-Quellcode:
shape1.left:=shape1.left + 3;
      shape1.top:=shape1.top +3;
      Shape1.height:=shape1.height + 1;
      shape1.width:=shape1.width +1;
Und jetzt musst du diese ganzen "starren" Dinger gegen etwas ersetzen was diese Variable (Richtungsvektor?) berücksichtigt.


Übrigens - auch wenn dir das jetzt noch zuviel ist - wäre dieses Projekt absolut IDEAL um das erste mal OBJEKTE auszuprobieren. Weil:
- Du erstellst den Typ TStern
- du erstellst 5 Instanzen davon. zB. Stern1, Stern2, ...
- Diese Objekte bekommen Eigenschaften wie Position, Geschwindigkeit, Grösse, Vektor und so weiter,
Und bei jedem Timer wird die Position des Objektes um Geschwindigkeit in Richtung Vektor verschoben. Dann das Shape dorthinzeichnen - fertig!

Aber du kannst es ruhig auch so machen - für den Anfang. Wobei es schön wäre, noch einiges in Prozeduren auszulagern...

PS: Fast vergessen: randomize wird nur einmal aufgerufen! Also zB. im form.create.

PPS: "If (shape1.left or shape1.top )>= 600 then..."
Das ist ganz falsch!

uliii92 29. Mär 2011 17:13

AW: Starfield
 
Hey also ich habs jetzt hingekriegt. Und mit dem ..shape1...>=600!!!
ich hatte einen Teil der Aufgabenstellung vergessen. der Teil gehört dazu. Die Kreise sollen nämlich wenn sie aus dem Formular raus sind wieder neu zufällig im Formular erzeugt werden...aber wie gesagt ich habs hingekommen!

Trotzdem vielen Dank!!

und PS: Ich heiße Uli (mit einem L, ich bin weiblich..:wink:)

isilive 30. Mär 2011 02:57

AW: Starfield
 
Hey Uli! =)
Erstellst du das Programm privat oder für die Schule?
Und bastelst du daran noch weiter?


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