EventsProfessional  Das AKS-Menü
Vorüberlegungen I - Darstellung der aktuellen Aktion

In unserem AKS soll am oberem Rand in der Mitte ein kleines Symbol zeigen, welche Aktion beim Drücken von ENTER ausgeführt wird. In unserem Beispiel soll die Darstellung der einzelnen Aktionen durch die Grafiken des Pakets [aks_menu.zip] erfolgen. Auch die Darstellung der Menüpunkte muss als Common Event/Häufig benötigtes Ereignis (Nennt es "MenupointsDisplay) angelegt werden, damit dies auf jeder Map der Spielwelt verwendbar ist.

. Den Anfang macht ein Label mit der Nummer 1, dem eine Bedingung folgt, die prüfen soll, ob der Wert einer neuen, freien Variable (nennt sie  "SelectedMenuPoint") dem Wert 0 entspricht (Standardwert jeder Variable). Dies soll für normale Aktionen (Ansprechen) dienen. Wichtig ist, dass ihr hier einen Nein-Fall braucht.
 
. Im Ja-Fall soll aus dem Paket [aks_menu.zip] das Picture "menu_normal" mit der Bild-ID 18 dargestellt werden. Die Koordinaten sind X = 160, Y = 16.
 
. Im Nein-Fall wiederholt ihr die vorangegangenen beiden Punkte für die Fälle, dass der Wert der Variable "SelectedMenuPoint" dem Wert 1 (menu_fight), 2 (menu_items) und 3 (menu_diary) entspricht und sorgt in den Ja-Fällen dafür, dass die entsprechenden Grafiken dargestellt werden. Die letzte Bedingung in der Kette braucht einen Nein-Fall
 
. Zum Abschluss müssen wir noch die Grenzwerte der Menüdarstellung abfangen. Da wir in unserem Beispiel vier Menüpunkte anzeigen lassen (0 - 3) sind die Grenzwerte "-1" und "4".
Im Nein-Fall der letzten Bedingung der Kette legt ihr eine neue an, die nun prüft, ob der Wert der Variable "SelectedMenuPoint" dem Wert "4" entspricht.
 
. Im Ja-Fall der Bedingung soll erst der Wert der Variable "SelectedMenuPoint" auf 0 gesetzt und dann zum Label 1 gesprungen werden.
 
. Im Nein-Fall wiederhilt ihr die beiden vorangegangenen Punkte, nur dass die Bedingung hier prüfen soll, ob der Wert der Variable nun "-1" ist. Dann soll im Ja-Fall der Wert der Variable auf 3 gesetzt und zum Label 1 gesprungen werden.
Darstellung der Stichpunkte in MML am Beispiel der MP-Skala
 MenuDisplay-Ereignis
[Haltepunkt [1]]
[Bedingung][Variable][SelectedMenuPoint][gleich][0]
  [Ja-Fall]
  [Picture zeigen][18][menu_normal][X = [160], Y = [16]][Transparent]
transparent transparent
  [Nein-Fall]
  [Bedingung][Variable][SelectedMenuPoint][gleich][1]
  [Ja-Fall]
  [Picture zeigen][18][menu_menu_fight][X = [160], Y = [16]][Transparent]
transparent transparent
  [Nein-Fall]
  [Bedingung][Variable][SelectedMenuPoint][gleich][2]
  [Ja-Fall]
  [Picture zeigen][18][menu_items][X = [160], Y = [16]][Transparent]
transparent transparent
  [Nein-Fall]
  [Bedingung][Variable][SelectedMenuPoint][gleich][3]
  [Ja-Fall]
  [Picture zeigen][18][menu_diary][X = [160], Y = [16]][Transparent]
transparent transparent
  [Nein-Fall]
  [Bedingung][Variable][SelectedMenuPoint][gleich][4]
  [Ja-Fall]
  [Variable [SelectedMenuPoint]][<-- [Wert setzen][0]]
[Goto Haltepunkt [1]]
transparent transparent
  [Nein-Fall]
  [Bedingung][Variable][SelectedMenuPoint][gleich][-1]
  [Ja-Fall]
  [Variable [SelectedMenuPoint]][<-- [Wert setzen][3]]
[Goto Haltepunkt [1]]
Der erstellte Maker-Code
Im englischem Maker
<>Label 1#
<>If Var (SelectedMenuPoint) 0
 <>Show Picture:ID:18-menu_normal-(160,16)
 <>
:Else Case
 <>If Var (SelectedMenuPoint) 1
  <>Show Picture:ID:18-menu_fight-(160,16)
  <>
 :Else Case
  <>If Var (SelectedMenuPoint) 2
   <>Show Picture:ID:18-menu_items-(160,16)
   <>
  :Else Case
   <>If Var (SelectedMenuPoint) 3
    <>Show Picture:ID:18-menu_diary-(160,16)
    <>
   :Else Case
    <>If Var (SelectedMenuPoint) 4
     <>Change Var:[SelectedMenuPoint] (Set)- 0
     <>Goto Label 1#
     <>
    :Else Case
     <>If Var (SelectedMenuPoint) -1
      <>Change Var:[SelectedMenuPoint] (Set)- 3
      <>Goto Label 1#
      <>
     :End Case
     <>
    :End Case
    <>
   :End Case
   <>
  :End Case
  <>
 :End Case
 <>
:End Case
<>
Im deutschem Maker (V1.10c)
<> -> Label: 1Nr
<>Bedingung:Varbl[SelectedMenuPoint]-0
 <>Bild anzeigen: 18, menu_normal, (160,16)
 <>
:Ansonsten
 <>Bedingung:Varbl[SelectedMenuPoint]-1
  <>Bild anzeigen: 18, menu_fight, (160,16)
  <>
 :Ansonsten
  <>Bedingung:Varbl[SelectedMenuPoint]-2
   <>Bild anzeigen: 18, menu_items, (160,16)
   <>
  :Ansonsten
   <>Bedingung:Varbl[SelectedMenuPoint]-3
    <>Bild anzeigen: 18, menu_diary, (160,16)
    <>
   :Ansonsten
    <>Bedingung:Varbl[SelectedMenuPoint]-4
     <>Var. ändern:[SelectedMenuPoint]Wert, 3
     <>Gehe zu Label: 1 Nr
     <>
    :Ansonsten
     <>Bedingung:Varbl[SelectedMenuPoint]- -1
      <>Var. ändern:[SelectedMenuPoint]Wert, 3
      <>Gehe zu Label: 1 Nr
      <>
     :End-Fall
     <>
    :End-Fall
    <>
   :End-Fall
   <>
  :End-Fall
  <>
 :End-Fall
 <>
:End-Fall
<>
Vorüberlegungen II - Aktuelle Aktion anzeigen

Als Zwischenschritt soll nun noch der aktuell gewählte Menüpunkt angezeigt werden, wenn sich der Hauptchara auf einer Map befindet. Da ihr schon ein "Common Event/Häufig benötigtes Ereignis" namens "Startaufstellung" angelegt habt, habt ihr es hier besonders einfach. Ihr müsst lediglich in der letzten Zeile des Ereignisses dafür sorgen, dass das Ereignis "MenupointsDisplay" aufgerufen wird.

Vorüberlegungen IIIa - Die Steuerung des AKS-Menüs I

Den Anfang der ASK-Menü-Steuerung macht ein Ereignis, das beim Drücken der Taste ESC die AKS-Menüsteuerung erst ermöglicht. Legt also in der Datenbank ein neues Ereignis an, das ihr schlicht und ergreifend "ESC" nennt. Es soll als paralleler Prozess starten.

. Den Anfang dieses Ereignisses macht eine Tastenabfrage (Enter Password), die in eine neue Variable - nennt sie "PressedButton" - den Wert der Taste "Cancel/ESC" schreibt. Wichtig ist, dass es wartet, bis eine Taste gedrückt wurde.
 
. Direkt danach soll eine Bedingung prüfen, ob der Wert in der Variable "PressedButton" genau dem Wert "6" entspricht (ESC wurde gedrückt). Einen Nein-Fall brauchen wir nicht.
 
. Im Ja-Fall soll lediglich ein neuer Schalter, den ihr "MenüLäuft"  nennt, auf AN gestellt werden.

Auf eine MML-Darstellung wie auch die Abbildung des Maker-Codes wird an dieser Stelle aufgrund der Einfachheit des Codes verzichtet.

Vorüberlegungen IIIb - Die Steuerung des AKS-Menüs II

Nun geht es darum, nach Drücken der Taste ESC die Steuerung durch das AKS-Menü zu ermöglichen. Legt hierfür ein neues Common Event/Häufig benötigtes Ereignis an, das ihr "MenupointSelection" nennt.
Durch Drücken der Cursortasten "Runter" und "Links" soll innerhalb der Menüpunkte ein Punkt zurück, durch drücken der Cursortasten "Hoch" und "Rechts" ein Punkt nach vorn gesprungen werden. Ein Druck auf "ESC" soll zum Verlassen der Menüsteuerung dienen, während "ENTER" die Aktion einleiten soll, die dem gewähltem Menüpunkt zugewiesen wurde.
Wichtig ist, dass dieses Common Event/Häufig benötigte Ereignis "automatisch startet" und der Schalter "MenüLäuft" als zusätzliche Startvoraussetzung gewählt werden muss (Feld "Appearance Conditions Switch/Auslösender Schalter")

. Zuerst brauchen wir eine neue, freie Variable, die vorübergehend den Wert der Variable "SelectedMenuPoint" aufnimmt. Nennt sie "TempSelection". Direkt danach soll eine Endlos-Schleife folgen.
 
. In dieser Endlos-Schleife macht eine Tastenabfrage den Anfang. Sie soll Sämtliche (!) Tasten abfragen (Cursor, ENTER, ESC) und warten, bis eine Taste gedrückt wurde. Das Ergebnis soll in der Variable "PressedButton" abgelegt werden.
 
. Direkt nach der Tastenabfrage soll eine Bedingung nebst Nein-Fall folgen, die prüft, ob der Wert der Variable "PressedButton" kleiner oder gleich 2 ist.
 
. Im Ja-Fall der Bedingung soll der WErt der Variable "SelectedMenuPoint" um 1 verringert (-) und das Common Event/Häufig benötigte Ereignis "Startaufstellung" aufgerufen werden.
 
. Im Nein-Fall wiederholt ihr das ganze, nur dass die Bedingung hier prüfen soll, ob der Wert der Variable kleiner oder gleich 4 ist. Zudem soll im Ja-Fall der Wert der Variable "SelectedMenuPoint" um 1 erhöht (+) werden.
 
. Im Nein-Fall dieser Bedingung wiederum (sie prüft, ob der Wert der Variable "PressedButton" kleiner oder gleich 4 ist) soll eine neue folgen. Diese soll prüfen, ob der Wert der Variable genau 5 ist.
 
. Der Ja-Fall soll vorerst leer bleiben.
 
. Im Nein-Fall legt ihr eine neue Bedingung - diesmal ohne Nein-Fall - an, die prüft, ob der Wert der Variable "PressedButton" genau dem Wert 6 entspricht.
 
. Ist dem sol, so soll der Schalter "MenüLäuft" auf "AUS" gestellt und aus der Schleife ausgebrochen werden.
 
. Scrollt nun an das Ende des Codes. Hier soll nun der Variable "SelectedMenuPoint" der Wert der Variable geschrieben werden, die ihr ganz zu Anfang "TempSelection" genannt habt. Hiernach soll das Common Event/Häufig benötigte Ereignis namens "Startaufstellung" aufgerufen werden.
Darstellung der Stichpunkte in MML
MenupointSelection-Ereignis
[Variable [TempSelection]][<-- [Wert setzen][Variable [SelectedMenuPoint]]]
Schleife Beginn
  [Variable [PressedButton]] [<-- ENTER, Links, Oben, Rechts, Unten, ESC]
[Bedingung][Varialbe][PressedButton][kleiner oder gleich][2]
  [Ja-Fall]
  [Variable [SelectedMenuPoint]][<-- [-][1]]
[Ereignisaufruf][Datenbankereignis [Startaufstellung]]
transparent transparent
  [Nein-Fall]
  [Bedingung][Varialbe][PressedButton][kleiner oder gleich][4]
  [Ja-Fall]
  [Variable [SelectedMenuPoint]][<-- [+][1]]
[Ereignisaufruf][Datenbankereignis [Startaufstellung]]
transparent transparent
  [Nein-Fall]
  [Bedingung][Varialbe][PressedButton][gleich][5]
  [Ja-Fall]
   
transparent transparent
  [Nein-Fall]
  [Bedingung][Varialbe][PressedButton][gleich][6]
  [Ja-Fall]
  [Schalter [MenüLäuft]][<-- [AN]]
[Schleifenausbruch]
Schleife Ende
[Variable [SelectedMenuPoint]][<-- [Wert setzen][Variable [TempSelection]]
[Ereignisaufruf][Datenbankereignis [Startaufstellung]]
Der erstellte Makercode
Im englischem Maker
<>Change Var: Var[TempSelection] (Set)- Var[SelectedMenuPoint]
<>Loop
 <>Enter Password: Var[PressedButton]
 <>If Var[PressedButton] 2 (<=)
  <>Change Var: Var[SelectedMenuPoint] (-)- 1
  <>Call Event: Startaufstellung
  <>
 :Else Case
  <>If Var[PressedButton] 4 (<=)
   <>Change Var: Var[SelectedMenuPoint] (+)- 1
   <>Call Event: Startaufstellung
   <>
  :Else Case
   <>If Var[PressedButton] 5
    <>
   :Else Case
    <>If Var[PressedButton] 6
     <>Change Switch: Var[MenüLäuft] Switch OFF
     <>Break
     <>
    :End Case
    <>
   :End Case
   <>
  :End Case
  <>
 :End Case
 <>
:End Loop
<>Change Var: Var[SelectedMenuPoint] (Set)- Var[TempSelection]
<>Call Event: Startaufstellung
<>
Im deutschem Maker (V1.10c)
<>Var. ändern:[TempSelection]Wert, Var.[SelectedMenuPoint]
<>Schleife
 <>Tasten abfragen:[PressedButton]
 <>Bedingung:Varbl[PressedButton]- 2 <
  <>Var. ändern:[SelectedMenuPoint]-, 1
  <>Ereignis aufrufen: Startaufstellung
  <>
 :Ansonsten
  <>Bedingung:Varbl[PressedButton]- 4 <
   <>Var. ändern:[SelectedMenuPoint]+, 1
   <>Ereignis aufrufen: Startaufstellung
   <>
  :Ansonsten
   <>Bedingung:Varbl[PressedButton]- 5
    <>
   :Ansonsten
    <>Bedingung:Varbl[PressedButton]- 6
     <>Schalter ändern:[MenüLäuft]-[Aus]
     <>Schleife stoppen
     <>
    :End-Fall
    <>
   :End-Fall
   <>
  :End-Fall
  <>
 :End-Fall
 <>
:Schleifenende
<>Var. ändern:[SelectedMenuPoint]Wert, Var[TempSelection]
<>Ereignis aufrufen: Startaufstellung
<>
Vorüberlegungen IV - Unterscheidung der ausgewählten Menüpunkte

Was nun noch fehlt, um die Menüsteuerung zu vervollständigen ist eine Gabelung, die zwischen den einzelnen Menüpunkten unterscheidet und die entsprechenden Ereignisse aufruft. Erstellt hierfür ein neues Common Event/Häufig benötigtes Ereignis, dass die Startoption "Call/Aufruf" hat. Nennt es "MenupointsFork".
Legt auch gleich vier weitere Common Events an, denen ihr die Namen "Menupoint:NORMAL", "Menupoint:FIGHT", "Menupoint:ITEM" und "Menupoint:SAVE" gebt.

. Geht, wenn ihr das Common Event "MenupointsFork" angelegt habt, zuerst in das Ereignis, das ihr "MenupointSelection" genannt habt und dort in die Bedingung, die prüft, ob der Wert der Variable "PressedButton" genau dem Wert 5 entspricht. Hier im Ja-Fall soll das Ereignis "MenupointsFork" aufgerufen und der Schalter "MenüLäuft" auf "AUS" gestellt werden. Zuletzt soll noch ein Schleifenausbruch erfolgen.
 
. Begebt euch nun in das Ereignis zurück, das ihr "MenupointsFork" genannt habt.
Hier beginnt ihr damit, dass ihr eine Bedingung mit Nein-Fall anlegt, die prüfen soll, ob der Wert der Variable "SelectedMenuPoint" genau dem Wert 0 entspricht. Wiederholt das im Nein-Fall mit einer weiteren Bedingung, die prüft, ob der Wert der Variable genau 1 ist. Führt dann das Schema weiter fort, bis ihr sämtliche Menüpunkte (in unserem Fall sind es insgesamt 4) auf diese Weise angelegt habt. Wichtig ist, das sie jeweils in den Nein-Fällen der vorangegangenen Bedingung stehen und die Ja-Fälle leer sind.
 
. Schreibt in die jeweiligen Ja-Fälle Kommentare hinein, um später noch zu wissen, welcher Menüpunkt genau ausgelöst werden soll. In unserem Fall sieht das folgendermaßen aus:
 
0 = Normale Heldenbewegung auf der Map ("Menupoint:NORMAL")
1 = Kampfmodus: Der Hauptchara bewegt sich mit einer Waffe in der Hand durch die Gegend und kann angreifen ("Menupoint:FIGHT")
2 = Items/Inventar: Hier können einzelne Items ausgewählt und benutzt werden ("Menupoint:ITEM")
3 = Speicher-Option: Dieser Punkt soll das Speichern des Spielstandes ermöglichen. ("Menupoint:SAVE")
 
. In den jeweiligen Ja-Fällen soll nun das betreffende Common Event aufgerufen werden (im Punkt zuvor ist die Zuordnung genannt)
 
. Im zuvor angelegtem Ereignis (MenupointSelection) soll das Ereignis "MenupointsFork" im Ja-Fall der Bedingung aufgerufen werden, die prüft, ob der Wert der Variable "PressedButton" dem Wert 5 entspricht.

Auf eine Darstellung in MML und auf die des Makercodes wird an dieser Stelle verzichtet. Dies folgt später bei den entsprechenden Menüfunktionen noch.