Autor Beitrag
Mäthew Glide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Sa 12.03.11 16:27 
Hallo!
Ich habe mich an die Entwicklung eines kleinen Spiels gesetzt. Nun habe ich ein Problem mit der Realisierung der Bewegung auf dem Spielfeld. Auf dem Spielfeld gibt es Leute die schießen, und die Schüsse die sich bewegen und an Hindernissen abprallen. Nun habe ich ein Problem:
DAs Spielfeld ist ein 2-dimensionales Array (eben wie ein Koordinatensystem) vom Typ Tpoint (richitger Typ oder). Nun bräuchte ich ja einen Richtungsvektor in die Schuss bzw. Bewegunsrichtung. Allerdings weiß ich nciht wie ich das realisieren soll/kann. Eine Geradeausbewegung ist ja noch einfach zu bewerkstelligen allerdings wird es kompliziert wenn es diagonal geht. Ein anderes Problem sit, wie ich es schaffe dass die Schusse wenn sie gegen ein hindernis "prallen" wieder zurückprallen. die bewegungsrichtung wäre ja ein Vektor. Es gilt ja Einfallswinkel gleich ausfallswinkel wie schaffe ich also sowas mit Vektoren? Ich habe mal ein Bild davon hochgeladen. Ein Bild des spielfelds dann in Rot die Bewegungsrichtungen und dann in FETT Rot ein Hindernis an dem ein Schuss abprallt. ISt dies überhaupt in der Art möglich wie ich mir das vorstelle?

Mfg


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 12.03.2011 um 15:31
Einloggen, um Attachments anzusehen!
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 12.03.11 21:16 
Die Frage ist hier eher wie genau ein "Schuss" bei dir definiert ist. Wenn du dafür eine Klasse hast, ist es ja kein Problem noch ein Attribut für die Bewegungsrichtung einzufügen. Allerdings musst du dir überlegen ob du solche "schiefen" Bewegungen überhaupt zulassen willst, ist es eine klare 45° Bewegung ist es immer eindeutig, wo sich der Schuss gerade befindet, ansonsten hast du ein nicht kleines Problem.

Zum abprallen: Hast du nur achsenparalelle Wände ist es einfach (zB bei der Vertikal Wand wie im Beispiel: Schuss.x = -schuss.x) ansonsten musst du gucken in welchem Winkel die Wand steht und entsprechen rechnen.
Pepp3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82



BeitragVerfasst: Fr 18.03.11 17:12 
Würde ich nicht mit einem Array lösen, zu viele stellen, zu hoher rechenaufwand. um flüssige bewegungen darstellen zu können muss das array eben entsprechend groß sein.
100X100(=10 000) speicherzellen.
Ob das flüssig läuft weiß ich nicht. kannst ja mal zum spaß so ein Array erstellen und dann komplett durchlaufen und zeit messen :D oder so.
ansonsten ist eine quer-bewegung durch ein 2d-array sehr einfach:
neuX := altX+1
neuY := altY+1
Wäre zB eine diagonale bewegung.

Ansonsten könntest du auch iwelche Shapes, Images, sonstwas auf eine Form knallen und dann mit Form.Dingenskirchen.left/top bewegen.
wenn du mit vektoren arbeiten willst, schlag ich vor sie als record mit x, y Konstanten zu speichen.
gibt viele möglichkeiten :D