Ergebnis 1 bis 5 von 5

Thema: Ringmenü - Array benötigt?

  1. #1

    Users Awaiting Email Confirmation

    Ringmenü - Array benötigt?

    Hallo Leute!

    Ich habe eine Frage.
    Ich mache nun ein Ringmenü.
    Vor einigen Tagen habe ich zwar schonmal eins gemacht,allerdings ein ganz einfaches,wo man auch die nicht-belegten Itemslots anwählen konnte.

    Ich möchte nun ein komplexeres machen.
    Allerdings ist da ein Problem - geht das überhaupt?
    eines steht fest,ich habe IMMER 1 Item im Inventar - Nämlich meine Statistiken-Uhr.
    Wenn ich nun das Menü öffnen will,kommt immer die Uhr.
    Wenn ich nur diese Uhr habe,nun nach links oder rechts frücke,soll die Uhr IMMER einmal im Kreis drehen,als wenn sie alle Menü slots durchgeht.
    Wenn ich nun 2 Sachen,also die Uhr und z.b. ein Medipack habe,ist das Medipack genau gegenüber der Uhr,drücke ich nach links oder rechts,tauschen sie die Plätze,
    habe ich 3 Sachen,sind die Items wie ein Dreieck aufgebaut,
    habe ich 4 ist eines vorne,ein's links,rechts und hinten,
    habe ich 5... usw.
    Maximal hat das Inventar 10 Gegenstände.(Uhr inklusive)
    Allerdings weiss ich nicht wie ich das realisieren kann

    Jemand sagt mir,ich solle einen Array aufstellen,was ich aber nicht kann.
    Kann mir jemand sagen,wie ich einen Array aufstelle und das Menü realisieren kann?

  2. #2
    Achtung, es wird lang...

    Das Drehen des Menüs ist ja zunächst einmal ein wenig herumgerechne. Das müsstest du ja bereit geschafft haben bei deinem einfacheren Ringmenü.
    Diese Rechnung muss jetzt erweitert werden.

    Die Position der Items ergibt sich durch die 360° eines Kreises und die Anzahl der im Inventar befindlichen Items. Die Grundlage ist ganz einfach: 360 geteilt durch die Anzahl der Items mal die Nummer des Itemslots (beginnend bei 0). Bei 5 Items wäre das für Item Nr3 also der Winkel 360°/5*(3-1) = 144°. Die Uhr bei Itemslot 1 bleibt bei 0°, denn 360°/5*0 = 0°. Somit ist klar, bei welchem Winkel die Items stehen.

    Winkel in Position umzurechnen geht über den Tangens. Im Grunde genau so, wie der Einheitskreis es vorgibt (wenn du ihn nicht kennst hier nachfragen).

    Ein Array ist nichts anderes als ein Variablen-Sammelpaket mit Nummern für jede Variable. Alle Makervariablen zusammen sind genau ein Array, denn sie haben eine Nummer und werden aufgelistet, sogar ingame mit F9.
    Du brauchst also garkein Array zu erstellen, denn du hast schon eins. Nimm einfach einen Bereich der Variablen, zB. Variable 100 bis 120. Jetzt hast du ein Array bestehend aus 21 Variablen. Jede Variable steht für ein Item. Wenn du mehr Items haben willst, musst du mehr Variablen "freilassen" beim Schreiben. Damit meine ich, dass die folgenden Variablen, also 121 und größer, nicht schon für etwas anderes benutzt werden. Und zack - ist das Array größer.
    Am einfachsten ist es also, ein Maximum festzulegen und so viele Variablen frei zu lassen (du kannst sie auch benennen, aber das ist nicht notwendig). Wenn du unendlich viele Items aufsammeln können willst, musst du das "Array", also die freigelassenen Variablen, an das Ende der Variablenliste setzen, das heißt die letzten Variablen dafür verwenden. Unendlich heißt in diesem Fall "sehr viele", schließlich kannst du nicht mehr Items aufnehmen als Variablen zur Verfügung stehen.

    Stellen wir uns jetzt vor, du hast dir für das Spiel 10 verschiedene Items ausgedacht.
    Somit haben diese Items sicherlich auch Namen. Namen sind lang, also werden dort stattdessen auch Nummern verwenden, ählich dem TerrainID-System des Makers, das durch Nummern zwischen Boden und Sumpf unterscheiden kann. Nimmst du ein Item, wird dessen Nummer in die nächste freie Variable deines Item-"Arrays" gespeichert. Dazu gehst du von der ersten Variable bis zur letzten durch und überprüfst, ob sie null ist oder nicht. Null bedeutet logischerweise, dass die Variable kein Item speichert, sie leer ist.

    Wie geht man durch die Itempositionen? Mit dem dritten Befehl bei "Change Variable" (hier nachfragen, wenn du nicht weißt, wie man ihn benutzt). Findest du, also der Algorithmus (der Maker), einen leeren Platz, wird die Art des Items abgespeichert aber auch die Anzahl. Am besten schreibst du die Art in die 100.000er, 10.000er und 1.000er Stellen der Variable. Die Itemart 4 würde die Variable daher auf 004000 stellen, die Itemart 12 würde sie auf den Wert 012000 stellen. Jetzt addierst du die Anzahl der aufgesammelten Items hinzu. Lesen kannst du die Anzahl mit Modulo 100 (die letzte Rechenoperation bei Change Variable, wenn du's nicht weißt, wieder fragen). Die Art bekommt man mit geteilt durch 1000, da der Maker die entstehenden Kommastellen einfach abschneidet. Aber denk dran, dass du bei diesem Schema nur 99 Items pro Sorte aufnehmen kannst (darfst!).
    Und was ist, wenn man die Sorte des aufzusammelnden items schon im Inventar hat? Genau das überprüft der Maker beim Durchgehen deines Arrays (wie oben beschrieben). Ist die nächste Variable also nicht null, wird sie in eine andere Variable gespeichert, durch 1000 geteilt (jetzt zeigt sie die Art an) und mit dem aufzusammelnden Item verglichen. Ist die Art gleich, wird die Variable aus deinem Array um die Anzahl der Items, die du aufsammeln willst, erhöht.

    Wie man Items verbraucht oder ablegt, also aus dem "Array" entfernt, müsstes du selbst verstehen, wenn du das bisherige umgesetzt hast.

    Boar, geschafft.

    Zur Zusammefassung:
    Wenn das alles geklappt hat, müsstest du eine Reihe von Variablen haben, die mit zwei Werten gleichzeitig gefüllt werden und über modulo und geteilt ausgelesen werden. Und jetzt fängt der Spaß mit dem Ringmenü an.

    Du nimmst für jeden Itemslot ein Picture. Weil du maximal 20 Picture anzeigen kannst (mit ominösen Patchs mehr ^^), hast du auch maximal 20 Items gleichzeitig auf dem Bildschirm. Willst du mehr, muss man in einem Obermenü die 20er Pakete angeben können ... aber man muss es ja nicht zu kompliziert machen. Du sagtest ja selbst, dass du maimal 10 Items hast. Wie gesagt ist die Umrechnung von Itemslot zu Winkel zu Position etwas Mathe (nachfragen und ich überschütte dich mit Text - vielleicht). Dummerweise muss man jetzt aber für jedes Picture ein eigenes Show Picture und Move Picture machen, da fehlen Einstellungsmöglichkeiten des Makers (Cherrys Patch kann sowas). Es bietet sich an, das jeweils in ein If zu packen und zu fragen, ob es überhaupt genügend Items gibt, damit das Bild angezeigt werden muss. Die Anzahl der vorhandenen Items erfährst du mit dem Durchgehen durch die Itemliste (Array) bis zum ersten leeren Platz oder indem du bei jedem Aufsammeln und Ablegen von Items die Artenanzahl korrigierst (Achtung, da können Fehler durch Unachtsamkeit auftreten...).

    Dein Grundproblem, dass nicht vorhandene Items angezeigt werden, müsste damit geklärt sein. Oder gibt es noch Fragen?


    Verdammt, ist das kompliziert...


    CapSeb

  3. #3

    Users Awaiting Email Confirmation

    Vielen Dank

    Ich werd's mir morgen durchlesen,jetzt ist's zu spät ^^"

  4. #4
    Mal 'ne Frage.

    Akzeptiert du das jetzt einfach so, was ich geschrieben habe?
    Oder wie soll ich dein Schweigen interpretieren?

  5. #5

    Users Awaiting Email Confirmation

    Na klar
    Ich arbeite bereits daran!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •