PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auswahlmenue.



Omnideath
22.08.2003, 19:55
Gruesst Euch,

Ich haette da mal eine kleine Frage. Folgendes, ich bastele ein CBS fuer mein Spiel und man kann zwei Charaktere und vier Gegner auf dem Feld haben, das ist aber nur nebensaechlich. Der Punkt ist, wenn der Charakter an der Reihe ist und beispielsweise einen Angriff ausfuehren will (oder auch einen Zauber, Gegenstand, usw.), dann folgt ein Cursor, der auf das Ziel zeigt und mit links und rechts wechselt man zwischen den moeglichen Zielen eines Sektors (der Gegner oder Gefaehrte sein kann) und mit rauf und runter wechselt man den Sektor selbst.
Das ganze ist in ein recht kompliziertes Script verpackt, welches bei jedem Tastendruck alle moeglichen Ziele abfragt und dann zum naechstmoeglichen springt. Ein Beispiel: Der Charakter 1 moechte Gegner Nummer 3 angreifen. Gegner 2 ist schon tot. Der Cursor startet nun standardmaessig auf Gegner 1, mit rechts muesste er zum zweiten springen, nun kommt die Abfrage, ob Gegner 2 auch wirklich tot ist, was er ja ist, darum springt er gleich zum dritten.

Soweit so gut. Allerdings ist daher bei jedem Tastendruck ein wirklich uebel langes hin und her in der Abfrage. Nach dem If Var[XXX] == 3 folgt daher eine Abfrage aller moeglichen Ziele, also zunaechst "In welchem Sektor ist befinden wir uns, Gegner oder Gefaehrte?", dann "Welches waere das naechste logische Ziel?", dann "Welches waere das naechste logische Ziel, wenn das erste logische Ziel nicht mehr da ist?", dann "Welches waere das naechste logische Ziel, wenn dieses logische Ziel auch nicht mehr da ist?", und so weiter und so fort.
Das ganze ist selbst fuer mich extrem unuebersichtlich und darum wollte ich gerne fragen, ob jemand eine Idee hat, wie man diesen ganzen Kram verkuerzen koennte.

Das ist zwar nicht wirklich ein Problem, allerdings mag ich es, meine Scripte uebersichtlich zu halten und habe die Befuerchtung, dass ich nach einiger Zeit nicht mehr durchblicken werde. Naja, fuer meinen ersten Beitrag ist das vielleicht eine ziemlich wirre Frage (ja, ich weiss, was ein Switch ist :)), aber Ihr koennt mir sicher trotzdem weiterhelfen.

Gruss,
Omnideath

Nostalgio
22.08.2003, 23:47
Nun, ob sich das ganze vereinfachen lässt, hängt davon ab, wie du deinen Cursor darstellst und wie viele/wenige Variablen du momentan schon benutzt. Ist der Cursor ein Pic? Oder ist er ein Event (also ist vor dem Gegner/Mitstreiter ein unsichtbares Event, dass zum Cursor wird, wenn Switch/Variable verändert werden) ??? Falls der Cursor ein Event ist, ist es im Endeffekt einfacher. Du könntest du bei einem Kampf mit Gegnern und Helden mit 2 Variablen und je einem Switch pro Kampfteilnehmer auskommen, wobei variable 1 die reihe bestimmt und variable 2 den gegner/held.

nehmen also 4 gegner teil kann die gegnervariable zwischen 1 und 4 stehen. die up-taste verändert die variable + 1, die down-taste -1. nach dieser operation musst du nur noch ein paar forks einsetzen, und überprüfen, ob der gegner nicht schon tod ist oder ob die variable nicht gerade 0 oder 5 beträgt (in diesem fall muss aus 0 --> 4 und aus 5 --> 1 werden).

ich glaube, einfacher geht es nicht. hattest du das schon soweit vereinfacht oder hat es dir geholfen? na ja, vielleicht kennt jemand anderes ja noch nen einfacheren weg

Omnideath
23.08.2003, 00:17
Diese Idee hatte ich auch schon, jedoch habe ich da das Problem, dass Events ja immer unter den Bildern liegen. Die Gegner werden bei mir als Bilder dargestellt, die Gefaehrten als Events. Somit muesste ich prinzipiell die Gegner als Events darstellen oder aber die Cursor so anordnen, dass sie immer vor oder neben den Bildern des dargestellten Gegners sind, was widerum schwierig werden koennte, weil die Gegner ja unterschiedlich gross sind.
Ich wuerde daher bevorzugt den Cursor als Bild belassen. Im Prinzip geht es ja auch auch nur darum, die Abfragesequenzen zu verkuerzen. Was mir sehr genehm waere, waere eine Formel, die sich gleich als universelle Abfrage einsetzen liesse, jedoch ist mir bisher keine eingefallen (zumal die Position des Cursors je nach Gegnergroesse ja auch wieder differiert).

Gruss,
Omnideath

Nostalgio
23.08.2003, 00:42
ich hab mal überlegt, wie man den ganzen "show picture"-aufwand in den forks etwas einschränken könnte. vielleicht könntest du noch parallel process-events machen, die von einem switch und einer variable aktiviert werden, also praktisch so ähnlich wie ein cursor event. der switch sorgt dafür, dass sich der parallel process nicht dauernd wiederholt.

nehmen wir an, die gegnervariable steht grade auf 3 und es gibt 4 gegner. in diesem fall müsste ein event erstellt sein, auf dessen erster page der parallel process mit dem switch UND der variable above 3 als bedingung gesetzt ist. die zweite page des events wär ne leere page, wo nur die variable above 4 bedingung ist.

na ja, im parallel process müsste zusätzlich zu dem show picture-befehl am ende der switch ausgestellt werden.

will man nun den cursor an der richtigen stellen anzeigen, braucht man nur den switch an zu stellen, die gegnervariable wurde ja durch das tasten-drück-event schon bestimmt.

kannst ja mal posten, wie du vorankommst.

Omnideath
23.08.2003, 00:57
Hmm, die Idee ist nicht uebel - im Gegenteil, sie ist wirklich gut. Jedoch werde ich das ganze wohl eher nicht als Parallel Process machen, da dies das ohnehin schon recht speicherintensive CBS noch mehr verlangsamen wuerde. Aber das duerfte auch wunderbar als ein durch Call Event aufgerufenes Common Event funktionieren.
Ich danke Dir.

Gruss,
Omnideath