Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

07.05.2013, 12:44

Du kannst auch fixe Wert-Arrays erstellen und drüber loopen oder schöne Methoden mit Referenz-Parametern erstellen. Aber wirklich hübscher wird es wohl kaum werden, das ist einfach nur Fleißarbeit. Wobei die Referenz-Variante gar nicht so viel Fleiß wäre.

Btw, was soll denn "RectEnemyRectangle" eigentlich sein? Ich meine ist ja hübsch, dass Du Kommentare dran geschrieben hast, aber mit einer vernünftigen Methoden-Benennung wäre das gleich besser gewesen. Es empfiehlt sich da generell mit einem Verb zu beginnen. Mit Rectangles hat die Methode ja irgendwie auch nichts am Hut und mit einem anderen Enemy auch nicht. "CalculateMovement" oder "CalculateDirection" wäre wohl irgendwie aussagekräftiger gewesen.
Den Klassen-Namen in einer Methode oder Variable zu wiederholen ist auch unsinnig. Man weiß, dass es eine Eigenschaft der Klasse ist, in der sie steckt. So sind z.B. playerHitPoints in einer Player-Klasse Quatsch und "buttonColor" in einer Klasse "Button" ebenfalls. Genauso verhält es sich auch mit den Methoden. Man sieht doch sofort, was enemy.calculateMovement() tut. Es berechnet die Bewegung des Enemies. Aber was wäre denn bitte enemy.calculateEnemyMovement()? Berechnet der Gegner jetzt Bewegung anderer Gegner oder was genau tut das Ding überhaupt?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

12

07.05.2013, 12:45

Welche vier Koordinaten meinst du jetzt? Naja normalerweise würde ich mir eine Bewegungsrichtung berechnen. Dann würde ich die Bewegung in diese Richtung berechnen und danach auf Kollision/Probleme prüfen. Dann kann man entsprechend reagieren und die Position zum Beispiel zurück setzen oder die Bewegungsrichtung ändern oder was auch immer man möchte. Und bevor man Code an vielen Stellen doppelt schreibt, schreibt man lieber eine Funktion und setzt diese an den jeweiligen Stellen ein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

13

07.05.2013, 12:53

Die direction-Variable darf überhaupt nicht statisch sein. Wenn sie das ist, ist das kein Wunder das sie den Wert dauernd wechselt, sobald mehrere Instanzen vorkommen. Innerhalb deiner switch-Anweisung setzt du nur eine der 4 Richtungen fest ohne jede if-Anweisung. Außerhalb prüfst du mit deinen if's ob die Grenzen überschritten wurden und legst ggf. die Richtung neu fest.

TigerClaw25

unregistriert

14

07.05.2013, 12:55

Na ja, wenn Beispielsweise 3 Sekunden lang das case 3 laufen soll, in dem das Schiff nach rechts fliegt, dann muss ich über eine if-Abfrage schauen, wann die Grenze erreicht ist. Die Grenze kann aber sowohl x als auch y sein. Dann gibt es noch die Möglichkeit zu entscheiden, in welche Richtung geflogen werden soll, wenn die Grenze erreicht ist.

In case 4 prüfe ich dann das Gegenteil. Aber auch da muss ich entscheiden, welche x und y Koordinaten dem Minimum entsprechen uind dann nach oben, unten oder rechts fliegen lassen. Je nach Koordinaten.

Das ist tatsächlich eine Fleißarbeit, bei der man viele mögliche Zustände berücksichtigen muss ...

Werde einfach mal in den nächsten Tagen überlegen, wie ich das am besten Löse, dass das Raumschiff überhaupt tut, was ich möchte. Danke für den Hinweis mit der Bezeichnung!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

07.05.2013, 13:07

Du musst doch nur genau 4 Zustände beachten. Alle lassen sich mit einer einzigen Methode behandeln, wenn Du die Parameter entsprechend baust.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

16

07.05.2013, 13:50

4 zustaende in case Anweisung, aber jeder Zustand hat andere Koordinaten, die alle beachtet werden muessen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

07.05.2013, 15:29

Und trotzdem lassen sich alle in einer einzigen Methode behandeln, die auch nur ein einziges IF beinhaltet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

18

07.05.2013, 16:50

Wahrscheinlich meinst du den || Operator, mit dem ich alle Koordinaten ueberpruefe, und wenn eines davon zutrifft, dann setze ich die Bewegung in die jeweilige Richtung auf false. nn ich das richtig verstehe.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

07.05.2013, 17:08

Nö, meine ich nicht. Ist aber schon mal besser als die bisherige Lösung.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

20

07.05.2013, 17:53

Das Problem ist aber, dass ich trotzdem viele Fallunterscheiungen habe.

Beispielsweie, wenn case 1 zutrifft. Dann fliegt raumschiff nach unten, solange y kleiner ymax ist.
Dann soll, bis Timer erneute Zufallszahl generierrt, in dieser case Anweisung bei y gleich ymax ueberprueft werden, ob x kleiner xMax ist und dann fliegt das raumschiff nach rechts, solange die Zufallszahl 1 ist und dike case Anweisung aufgerufen wird. Wenn jetzt aber eine andere Anweisung aufgerufen wird, muss ich auch wieder alle moegelichen Faelle berucksichtien. Vllt denke ich zu kompliziert, aBer meine Loesung ist kompliziert ...

natuerlich waere es am einfachsten im caseteil die vier richtungen auszugeben und ausserhalb mit if zu pruefen, ob maximale koordinaten erreicht worden sind. aber was ist, wenn ich bei ymax das teil wieder hochfliegen lasse und ploetzlich ein anderer caseteil aufgerufen wird, der fuer das fliegen nach oben steht. dann vibriert mein raumschiff und es passiert nichts.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (07.05.2013, 18:07)


Werbeanzeige