PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tutorial: Eigenes Itemmenü



niR-kun
19.07.2010, 16:55
Hi, ich hatte gerade gestern einen Einfall für ein eigenes Item-Menü (kann man auch einfach für Skills umschreiben, einfach die Fork Condition: If Item owning ersetzen), das ich schnell umgesetzt habe. Ich finde, dass ich daraus ein Tutorial für euch erstelle muss.

Das Tutorial setzt voraus, dass man sich mit den RPG-Maker-Befehlen genaustens auskennt.
Wer sich damit nicht auskennt, sollte entweder die Eventbefehle ausprobieren (learning by doing) oder sich die Eventbefehle im E-Book anschauen.
Der Schweregrad des Tutorials ist hoch - also nichts für "blutige Anfänger".

Da ich das ganze nicht auf einmal erklären kann, werde ich den Post hier einfach weiter führen.
Über Kommentare und Anmerkungen (bitte konstruktiv) wäre ich natürlich froh.

Wofür braucht man so ein eigenes Menü?
Man braucht es z.B. für eigene Kampfsysteme (wenn man nicht das Standart-RM2K/3-Kampfsystem nutzt) oder Pausenmenüs.

Die Struktur des Menüs sieht so aus:


Itemmenü (CommonEvent oder MapEvent)
|
|- Item-Abfrage
| |
| |- ID-Setzer (zweites CommonEvent bzw. zweite Seite des MapEvents)
|
|- Bilder anzeigen (drittes CommonEvent bzw. dritte Seite des MapEvents)
|
|- Tasten Abfragen
|
|- (optional: Aktion des Items)
|
|- Menü beenden und Bilder entfernen

Ob man nun 3 CommonEvents oder Ein Map-Event mit 3 Seiten erstellt, ist abhängig davon, ob ich es nur auf einer Map nutzen will oder auf vielen Maps.
Eine Map, wo das Menü genutzt werden soll -> MapEvent mit 3 Seiten
Mehrere Maps, wo das Menü genutzt werden soll -> 3 CommonEvents

Ich baue hier ein Menü für 20 Items.

I: Item-Abfrage:

Okay, am Anfang sieht der Plan so aus:
Man muss einen Skript entwerfen, der die Items abfragt und das Ergebnis in Variablen packt.
Das Skript sollte auch sehr einfach anwendbar sein, relativ klein sein und die Variablen durchsuchen und setzen können.

Na gut, das sollte genug über den Plan sein,
nun erkläre ich euch Schritt für Schritt wie ich zu dem Skript gekommen bin.

Zuerst erstelle ich das CommonEvent bzw. MapEvent (erste Seite) ItemMenü.

Dann melde ich 20 Variablen für die Items (ItemVars) an, die heißen 0001:ItemVar01 bis 0020:ItemVar20,
und 5 Variablen - 0021:Durchlauf, 0022:Wert(Durchlauf), 0023:ItemID, 0024:DurchlaufZähler und 0025:ItemZähler.
Was ich mit den Variabeln mache, erkläre ich im Laufe des Tutorials.

Nicht zu vergessen, ich vergebe den Items auch IDs (ItemID), beginnend mit 1. Die ItemID 0 steht für "kein Item da".

Ich trage bei CommonEvent bzw. MapEvent (erste Seite) ItemMenü folgendes ein:

<> Change Variable: [1-20] = 0 // die ItemVars auf 0 setzen
<> Change Variable: [0021:Durchlauf] = 1 // auf Anfang der ItemVars gesetzt
<> Change Variable: [0025:ItemZähler] = 0 // Zählt die Anzahl der Items, da noch nichts abgefragt wird - wird er 0 gestetzt
<> Comment: ##### Item-Abfrage ######
<> Fork Condition: If Item #1 owning then ... // Wenn Item ID 1 da (der EEE kann die Itemnamen nicht exportieren) ...
<> Change Variable: [0023:ItemID] = 1 // ... dann setze ItemID 1
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork

I-1. Ich erstelle ein CommonEvent "ID-Setzer" oder nutze die zweite Seite des MapEvents ItemMenü.

Das Grundgerüst des Skript bildet einen Schleife (heißt im Maker Loop bzw. Cycle), die die Variabel 0021:Durchlauf um 1 erhöht.
0021:Durchlauf enthält die ID (gemeint ist die Nummer vor dem Namen der Variablen) der ItemVars.


<>Comment: ID-Setzer
<> Loop
<> Change Variable: [0021:Durchlauf] += 1
<>
: End of loop

I-2. Man brauch natürlich eine Abbruch-Bedingung, sonst würde das Skript bis in die Unendlichkeit zählen:

<>Comment: ID-Setzer
<> Loop
<> Fork Condition: If Variable [0021:Durchlauf] <= 20 then ...
<> Change Variable: [0021:Durchlauf] += 1
<>
: Else ...
<> Break Loop
<>
: End of fork
<>
: End of loop
Ihr fragt euch bestimmt, warum ich bei 0021:Durchlauf größer als 20 den Schleife abbrechen lasse.
Die Antwort ist ganz einfach, 20 ist die letzte ID der ItemVars.

I-3. Jetzt kommt ein Teil, wo man viel Vorstellungskraft braucht:
Man stelle sich die Variablen als nummerierte Felder vor. Kann man denn nicht über die Nummer des Feldes (ID) auf seinen
Inhalt zugreifen? Klar kann man!
Bei dem Maker gibt es bei "Choose Variable" die dritte Option "Variable [Auswahl] Variable No." und bei "Operand" gibt es diese auch.

Die Grundstruktur des Skripts sind die ItemVars (hier 20 Variablen für 20 Items), die mit der ID der Items gesetzt werden.

Wenn man diese Erkenntnisse nutzt, erhält man folgenden Code:

<>Comment: ID-Setzer
<> Loop
<> Fork Condition: If Variable [0021:Durchlauf] <= 20 then ...
<> Change Variable: [0022:Wert(Durchlauf)] = V[V[0021:Durchlauf]]
<> Fork Condition: If Variable [0022:Wert(Durchlauf)] == 0 then ...
<> Change Variable: [V[0021:Durchlauf]] = V[0023:ItemID]
<>
: End of fork
<> Change Variable: [0021:Durchlauf] += 1
<>
: Else ...
<> Break Loop
<>
: End of fork
<>
: End of loop
Was neu dazu gekommen ist, die Variabel 0022:Wert(Durchlauf), die mit dem Inhalt der Variable von 0021:Durchlauf gefüllt wird,
ein Fork Condition, die schaut ob 0022:Wert(Durchlauf) 0 (= leer) ist, wenn ja wird die Variabel von 0021:Durchlauf gleich der ItemID gesetzt. Das Skript scheint schon fast fertig zu sein, 2 Kleinigkeiten fehlen jedoch noch.

I-4. Wenn man das Skript von 3. laufen lässt, kommt man zu einem ernüchterndem Ergebnis:
Es setzt alle ItemVars die 0 sind mit der selben ItemID. Es fehlt noch eine Abbruch nach dem Setzen der ItemID.
Zusätzlich habe ich noch einen Itemzähler eingebaut, der zum Schluss sagt wie viele Items da sind,
und 0021:Durchlauf um eins erhöht, warum komm ich später noch mal drauf zurück.

<>Comment: ID-Setzer
<> Loop
<> Fork Condition: If Variable [0021:Durchlauf] <= 20 then ...
<> Change Variable: [0022:Wert(Durchlauf)] = V[V[0021:Durchlauf]]
<> Fork Condition: If Variable [0022:Wert(Durchlauf)] == 0 then ...
<> Change Variable: [V[0021:Durchlauf]] = V[0023:ItemID]
<> Change Variable: [0025:ItemZähler] += 1
<> Change Variable: [0021:Durchlauf] += 1
<> Break Loop
<>
: End of fork
<> Change Variable: [0021:Durchlauf] += 1
<>
: Else ...
<> Break Loop
<>
: End of fork
<>
: End of loop

I-5. Wenn man 0021:Durchlauf größer als 20 setzt, kann ja mal passieren, funktioniert das Skript nicht.
Er braucht noch etwas damit 0021:Durchlauf wieder auf 1 zurück gesetzt wird.

Das Sktipt sieht dann so aus:

<>Comment: ID-Setzer
<> Change Variable: [0024:DurchlaufZähler] = 1
<> Loop
<> Fork Condition: If Variable [0021:Durchlauf] <= 20 then ...
<> Change Variable: [0022:Wert(Durchlauf)] = V[V[0021:Durchlauf]]
<> Fork Condition: If Variable [0022:Wert(Durchlauf)] == 0 then ...
<> Change Variable: [V[0021:Durchlauf]] = V[0023:ItemID]
<> Change Variable: [0025:ItemZähler] += 1
<> Change Variable: [0021:Durchlauf] += 1
<> Break Loop
<>
: End of fork
<> Change Variable: [0021:Durchlauf] += 1
<>
: Else ...
<> Change Variable: [0021:Durchlauf] = 1
<> Change Variable: [0024:DurchlaufZähler] += 1
<> Fork Condition: If Variable [0024:DurchlaufZähler] >= 2 then ...
<> Break Loop
<>
: End of fork
<>
: End of fork
<>
: End of loop
Das Zurücksetzen soll er nur 1 mal machen.

I-6. Ich komme nun auf das CommonEvent bzw. MapEvent (erste Seite) ItemMenü zurück.
Bis jetzt ist die Item-Abfrage noch nicht vollständig, es fehlt noch die Abfrage der anderen 19 Items.

Für jedes der 19 verbleibenden Items muss noch folgender Code hinzugefügt werden:
(Das X durch die Zahl ersetzen).

<> Fork Condition: If Item #X owning then ... // Wenn Item ID X da ...
<> Change Variable: [0023:ItemID] = X // ... dann setze ItemID X
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork


Das CommonEvent bzw. MapEvent (erste Seite) ItemMenü sollte dann so etwa aussehen:

<> Change Variable: [1-20] = 0 // die ItemVars auf 0 setzen
<> Change Variable: [0021:Durchlauf] = 1 // auf Anfang der ItemVars gesetzt
<> Change Variable: [0025:ItemZähler] = 0 // Zählt die Anzahl der Items, da noch nichts abgefragt wird - wird er 0 gestetzt
<> Comment: ##### Item-Abfrage #####
<> Fork Condition: If Item #1 owning then ... // Wenn Item ID 1 da (der EEE kann die Itemnamen nicht exportieren) ...
<> Change Variable: [0023:ItemID] = 1 // ... dann setze ItemID 1
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork
<> Fork Condition: If Item #2 owning then ... // Wenn Item ID 2 da ... <--- neu dazu
<> Change Variable: [0023:ItemID] = 2 // ... dann setze ItemID 2
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork
<> Comment: ----- weitere Item-Abfragen bis -----
<> Fork Condition: If Item #20 owning then ... // Wenn Item ID 20 da ...
<> Change Variable: [0023:ItemID] = 20 // ... dann setze ItemID 20
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork

II: Bilder anzeigen:

"Bilder? Moment, welche Bilder?" kommt bei dem ein oder anderen bestimmt als Frage auf.
Ja, man braucht für das Menü Bilder.

Ich habe mir 20 152x16-Pixel-große Bilder mit einem Rahmen und dem Text, wie das Item heißt, erstellt.
(Die sind dann im Beispielmenü, das ich noch hochladen werde, drin.)

Ich habe mich hier für das Tutorial für ein 5-zeiliges Menü entschieden.

Es kann z.B. so aussehen:
http://npshare.de/files/3946b75a/itemM-beispiel1.png

II-1. Ich erstelle ein CommonEvent "Bild-Zeigen" oder nutze die dritte Seite des MapEvents ItemMenü.

Aber erst mal wieder zurück zu dem CommonEvent bzw. MapEvent (erste Seite) ItemMenü:

Ich erstelle die Variablen 0030:ItemMenü-X, 0031:ItemMenü-Y, 0032:Item-Anzeig1-Y, 0033:Item-Anzeig2-Y, 0034:Item-Anzeig4-Y, 0035:Item-Anzeig5-Y,
0036:Anzeig1-ID, 0037:Anzeig2-ID, 0038:Anzeig3-ID, 0039:Anzeig4-ID und 0040:Anzeig5-ID.


<> Change Variable: [1-20] = 0 // die ItemVars auf 0 setzen
<> Change Variable: [0021:Durchlauf] = 1 // auf Anfang der ItemVars gesetzt
<> Change Variable: [0025:ItemZähler] = 0 // Zählt die Anzahl der Items, da noch nichts abgefragt wird - wird er 0 gestetzt
<> Comment: ##### Item-Abfrage #####
<> Fork Condition: If Item #1 owning then ... // Wenn Item ID 1 da (der EEE kann die Itemnamen nicht exportieren) ...
<> Change Variable: [0023:ItemID] = 1 // ... dann setze ItemID 1
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork
<> Fork Condition: If Item #2 owning then ... // Wenn Item ID 2 da ... <--- neu dazu
<> Change Variable: [0023:ItemID] = 2 // ... dann setze ItemID 2
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork
<> Comment: ----- weitere Item-Abfragen bis -----
<> Fork Condition: If Item #20 owning then ... // Wenn Item ID 20 da ...
<> Change Variable: [0023:ItemID] = 20 // ... dann setze ItemID 20
<> Call Event: ID-Setzer // und Rufe ID-Setzer (zweites CommonEvent oder Seite 2 des MapEvents) auf
<>
: End of fork
<> Change Variable: [0036:Anzeig1-ID] = V[0001:ItemVar01] // Variable für 1. Zeile des Menüs
<> Change Variable: [0037:Anzeig2-ID] = V[0002:ItemVar02] // Variable für 2. Zeile des Menüs
<> Change Variable: [0038:Anzeig3-ID] = V[0003:ItemVar03] // Variable für 3. Zeile des Menüs
<> Change Variable: [0039:Anzeig4-ID] = V[0004:ItemVar04] // Variable für 4. Zeile des Menüs
<> Change Variable: [0040:Anzeig5-ID] = V[0005:ItemVar05] // Variable für 5. Zeile des Menüs
<> Call Event: Bild-Zeigen // Bilder der ersten 5 Items zeigen

II-2. Ich hab mir folgenden Code geschrieben (Ohne den Pic-Pointer-Patch geht das nicht anders),
der die gerade in 0036:Anzeig1-ID bis 0040:Anzeig5-ID mit dem passenden Bild anzeigt.

PS: Falls jemand da einen andere Idee hat, wie man die ganzen Fork-Conditions vermeidet (ohne Pic-Pointer-Patch), immer her damit!

Ohne große Erklärung das CommonEvent "Bild-Zeigen" oder nutze die dritte Seite des MapEvents ItemMenü:

<>Comment: Bild-Zeigen
<> Comment: ##### Intialiserung #####
<> Comment: Die einzelnen Postionen der Bilder einstellen:
<> Change Variable: [0030:ItemMenü-X] = 160
<> Change Variable: [0031:ItemMenü-Y] = 124 // Das gleiche wie Item-Anzeig3-Y !
<> Change Variable: [0032:Item-Anzeig1-Y] = 92
<> Change Variable: [0033:Item-Anzeig2-Y] = 108
<> Change Variable: [0034:Item-Anzeig4-Y] = 140
<> Change Variable: [0035:Item-Anzeig5-Y] = 156
<> Comment: ##### Anzeige Zeile 1 #####
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 1 then ...
<> Show Picture: #4, BildItemID01, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 2 then ...
<> Show Picture: #4, BildItemID02, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 3 then ...
<> Show Picture: #4, BildItemID03, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 4 then ...
<> Show Picture: #4, BildItemID04, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 5 then ...
<> Show Picture: #4, BildItemID05, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 6 then ...
<> Show Picture: #4, BildItemID06, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 7 then ...
<> Show Picture: #4, BildItemID07, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 8 then ...
<> Show Picture: #4, BildItemID08, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 9 then ...
<> Show Picture: #4, BildItemID09, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 10 then ...
<> Show Picture: #4, BildItemID10, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 11 then ...
<> Show Picture: #4, BildItemID11, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 12 then ...
<> Show Picture: #4, BildItemID12, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 13 then ...
<> Show Picture: #4, BildItemID13, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 14 then ...
<> Show Picture: #4, BildItemID14, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 15 then ...
<> Show Picture: #4, BildItemID15, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 16 then ...
<> Show Picture: #4, BildItemID16, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 17 then ...
<> Show Picture: #4, BildItemID17, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 18 then ...
<> Show Picture: #4, BildItemID18, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 19 then ...
<> Show Picture: #4, BildItemID19, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0036:Anzeig1-ID] == 20 then ...
<> Show Picture: #4, BildItemID20, (V[0030:ItemMenü-X], V[0032:Item-Anzeig1-Y]), Mgn 100%, Tsp 0%
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<> Comment: ##### Anzeige Zeile 2 #####
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 2 then ...
<> Show Picture: #5, BildItemID02, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 3 then ...
<> Show Picture: #5, BildItemID03, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 4 then ...
<> Show Picture: #5, BildItemID04, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 5 then ...
<> Show Picture: #5, BildItemID05, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 6 then ...
<> Show Picture: #5, BildItemID06, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 7 then ...
<> Show Picture: #5, BildItemID07, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 8 then ...
<> Show Picture: #5, BildItemID08, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 9 then ...
<> Show Picture: #5, BildItemID09, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 10 then ...
<> Show Picture: #5, BildItemID10, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 11 then ...
<> Show Picture: #5, BildItemID11, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 12 then ...
<> Show Picture: #5, BildItemID12, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 13 then ...
<> Show Picture: #5, BildItemID13, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 14 then ...
<> Show Picture: #5, BildItemID14, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 15 then ...
<> Show Picture: #5, BildItemID15, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 16 then ...
<> Show Picture: #5, BildItemID16, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 17 then ...
<> Show Picture: #5, BildItemID17, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 18 then ...
<> Show Picture: #5, BildItemID18, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 19 then ...
<> Show Picture: #5, BildItemID19, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0037:Anzeig2-ID] == 20 then ...
<> Show Picture: #5, BildItemID20, (V[0030:ItemMenü-X], V[0033:Item-Anzeig2-Y]), Mgn 100%, Tsp 0%
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<> Comment: ##### Anzeige Zeile 3 #####
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 3 then ...
<> Show Picture: #6, BildItemID03, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 4 then ...
<> Show Picture: #6, BildItemID04, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 5 then ...
<> Show Picture: #6, BildItemID05, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 6 then ...
<> Show Picture: #6, BildItemID06, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 7 then ...
<> Show Picture: #6, BildItemID07, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 8 then ...
<> Show Picture: #6, BildItemID08, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 9 then ...
<> Show Picture: #6, BildItemID09, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 10 then ...
<> Show Picture: #6, BildItemID10, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 11 then ...
<> Show Picture: #6, BildItemID11, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 12 then ...
<> Show Picture: #6, BildItemID12, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 13 then ...
<> Show Picture: #6, BildItemID13, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 14 then ...
<> Show Picture: #6, BildItemID14, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 15 then ...
<> Show Picture: #6, BildItemID15, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 16 then ...
<> Show Picture: #6, BildItemID16, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 17 then ...
<> Show Picture: #6, BildItemID17, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 18 then ...
<> Show Picture: #6, BildItemID18, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 19 then ...
<> Show Picture: #6, BildItemID19, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 20 then ...
<> Show Picture: #6, BildItemID20, (V[0030:ItemMenü-X], V[0031:ItemMenü-Y]), Mgn 100%, Tsp 0%
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<> Comment: ##### Anzeige Zeile 4 #####
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 4 then ...
<> Show Picture: #7, BildItemID04, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 5 then ...
<> Show Picture: #7, BildItemID05, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 6 then ...
<> Show Picture: #7, BildItemID06, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 7 then ...
<> Show Picture: #7, BildItemID07, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 8 then ...
<> Show Picture: #7, BildItemID08, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 9 then ...
<> Show Picture: #7, BildItemID09, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 10 then ...
<> Show Picture: #7, BildItemID10, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 11 then ...
<> Show Picture: #7, BildItemID11, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 12 then ...
<> Show Picture: #7, BildItemID12, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 13 then ...
<> Show Picture: #7, BildItemID13, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 14 then ...
<> Show Picture: #7, BildItemID14, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 15 then ...
<> Show Picture: #7, BildItemID15, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0038:Anzeig3-ID] == 16 then ...
<> Show Picture: #7, BildItemID16, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 17 then ...
<> Show Picture: #7, BildItemID17, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 18 then ...
<> Show Picture: #7, BildItemID18, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 19 then ...
<> Show Picture: #7, BildItemID19, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0039:Anzeig4-ID] == 20 then ...
<> Show Picture: #7, BildItemID20, (V[0030:ItemMenü-X], V[0034:Item-Anzeig4-Y]), Mgn 100%, Tsp 0%
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<> Comment: ##### Anzeige Zeile 5 #####
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 5 then ...
<> Show Picture: #8, BildItemID05, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 6 then ...
<> Show Picture: #8, BildItemID06, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 7 then ...
<> Show Picture: #8, BildItemID07, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 8 then ...
<> Show Picture: #8, BildItemID08, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 9 then ...
<> Show Picture: #8, BildItemID09, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 10 then ...
<> Show Picture: #8, BildItemID10, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 11 then ...
<> Show Picture: #8, BildItemID11, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 12 then ...
<> Show Picture: #8, BildItemID12, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 13 then ...
<> Show Picture: #8, BildItemID13, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 14 then ...
<> Show Picture: #8, BildItemID14, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 15 then ...
<> Show Picture: #8, BildItemID15, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 16 then ...
<> Show Picture: #8, BildItemID16, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 17 then ...
<> Show Picture: #8, BildItemID17, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 18 then ...
<> Show Picture: #8, BildItemID18, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 19 then ...
<> Show Picture: #8, BildItemID19, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: Else ...
<> Fork Condition: If Variable [0040:Anzeig5-ID] == 20 then ...
<> Show Picture: #8, BildItemID20, (V[0030:ItemMenü-X], V[0035:Item-Anzeig5-Y]), Mgn 100%, Tsp 0%
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork
<>
: End of fork

III: Tasten abfragen:
Das ganze Skript kann jetzt schon die Items abfragen und die ersten 5 Items als Bilder anzeigen.
Es fehlt aber die Menü-Steuerung über die Tastatur.

III-1. Bevor man Hals-über-Kopf anfängt Code zu schreiben, erstmal die Festlegung, wie das Menü sich verhalten soll.
(Wer drauf steht, kann sich da ein Stück Papier und einen Bleistift nehmen.)

Das Menü ist wie ein Buch mit Seiten aufgebaut, je 5 angezeigte Items sind eine Seite.
Da wird dann so gesteuert:
- Hoch/Runter -> Auswahl der 5 Zeilen des Menüs ändern (von letztem<->ersten Zeile)
- Links/Rechts -> Die vorigen/nächsten 5 Items anzeigen (vorigen/nächsten Seite)
- Enter -> Item auswählen
- ESC -> Item-Menü schließen

III-2. Wie bereits in III-1 beschrieben ist das Menü aus Seiten à 5 Items aufgebaut.
Wieviele Seiten hab ich bei x Items?

Die Seiten, die ich im Gedächtnis habe, gebe ich Nummern, beginnend mit 0.
(Also erste Seite -> 0, zweite Seite -> 1, dritte Seite -> 2, usw.)

Wieder zurück zu dem CommonEvent bzw. MapEvent (erste Seite) ItemMenü:
Ich erstelle wieder ein zwei Variablen: 0041:ItemMaxSeite und 0042:Mod5-Test.

Folgender Code füge ich bei CommonEvent bzw. MapEvent (erste Seite) ItemMenü hinten hinzu:

<> Change Variable: [0041:ItemMaxSeite] = V[0025:ItemZähler]
<> Change Variable: [0041:ItemMaxSeite] /= 5
<> Change Variable: [0042:Mod5-Test] = V[0025:ItemZähler] // da 5 durch 5 = 1 ist, aber dennoch auf eine Seite passt
<> Change Variable: [0042:Mod5-Test] Mod= 5 // testen ob 'Anzahl der Items' modulo 5 = 0
<> Fork Condition: If Variable [0042:Mod5-Test] == 0 then ... // , wenn ja dann
<> Change Variable: [0041:ItemMaxSeite] -= 1 // verringe die Maximale Anzahl der Seiten
<>
: End of fork

III-3. Das Item-Menü weiß wie viele Seiten ich habe, aber ich weiß es nicht.
Also habe ich mir eine kleine Scrollbar gemacht, die sich mir das anzeigt.
Ich nenne das mal Seitenanzeiger. (Das Bild ITEM-SeitenAnzeiger wird im Beispielprojekt drin sein)

Ich erstelle mal wieder ein paar Variablen: 0043:SeitenAnzeigerX, 0044:SeitenAnzeigerY und 0045:SeitenAnzeigerX-vers.

Diesen Code füge ich bei CommonEvent bzw. MapEvent (erste Seite) ItemMenü hinten hinzu:

<> Fork Condition: If Variable [0041:ItemMaxPage] > 0 then ...
<> Change Variable: [0043:SeitenAnzeigerX] = 96 // X-Position des Seitenanzeigers
<> Change Variable: [0044:SeitenAnzeigerY] = 171 // Y-Position des Seitenanzeigers
<> Show Picture: #10, ITEM-SeitenAnzeiger, (V[0043:SeitenAnzeigerX], V[0044:SeitenAnzeigerY]), Mgn 100%, Tsp 0%
<> Change Variable: [0045:SeitenAnzeigerX-vers] = 126 // 126 ist Teiler von 1, 2, 3, 6, 7 und 9 - denn
<> Change Variable: [0045:SeitenAnzeigerX-vers] /= V[0041:ItemMaxSeite] // so weit kann sich der Seitenanzeiger bewegen
<>
: End of fork

makenshi
19.07.2010, 18:53
Hm ok. Ein Menütutorial.

Positiv
Du baust das ganze so auf, das du den Code Stückchen für Stückchen erklärst. Du erklärst recht ausführlich was deinen Code selbst angeht. Du bemühst dich sichtbar die Zusammenhänge zu erklären die zu dem Menü führen sollen.

Negativ
Da fehlt eine Menge Vorerklärung. Die meisten Nutzer die mit dem Maker arbeiten können mit einer Schleife oder einem Array nicht das geringste anfangen. Auch ein Pointer ist alles andere als geläufig. Du solltest diese Begriffe genauer erklären als du es im Text tust. Selbst ein Fortgeschrittener dürfte sich schwer tun ohne jede Erklärung diese Elemente zu verstehen.

Du kommentierst deinen Quellcode nicht. Das sollte man in einem Tutorial tun, um hierbei mit gutem Beispiel voran zu gehen. Außerdem würde dein Code dadurch wesentlich lesbarer werden.

Zum dritten solltest du bevor den Code einwirfst erstmal genau die Struktur deiner Menükonstruktion erklären. Fang doch erstmal mit einer Arrayerklärung an. Und das dieses Array das Inventar darstehen soll. Nimm ein wenig das abstrakte raus. Das ist verständlich. Danach erkläre mal welche CE / Mapevents nötig sind. Was ihre Funktion ist. In Kurzform natürlich. Dann hat man schonmal einen groben Überblick was man da vor sich hat.

Mein vierter Einwand bezieht sich auf deine Erklärungen an sich teilweise. Da fehlt stellenweise etwas was deinem Leser hilft deine Gedankengänge nach zu vollziehen. Bsp.:

Den Skript packe ich in eine CommonEvent oder MapEvent und nenne es "Item-ID-Setzer". Die Startbedingung lasse ich so wie sie ist.
Der Skript alleine funktioniert nicht, man braucht noch ein Event, dass den Skript nutzt.

Dieser Abschnitt wirkt ein wenig so als würden da Informationen fehlen. Warum ist es egal ob es ein CE oder ein ME ist? Du lässt die Startbedingungen auf Standard ok. Warum tust du das? Wohl weil du den Inhalt per "Call" nutzen willst. Nur sowas weiß dein Leser in dem Moment nicht. Das verunsichert jemanden der gerade erst lernt zusätzlich.

Das fünfte und letzte ist die sprachliche Seite. Es ist das Skript. Nicht der Skript. Kleinere Rechtschreibfehler sind auch drin gewesen. Wenn auch nichts gravierendes.
Wichtiger wäre es das du ein wenig "Textdesign" betreibst. Du hast BB Codes zur Verfügung, nutze sie um dein Texttutorial etwas ansehnlicher zu gestalten. Der Event Exportierer von Cherry stellt einen farbigen Style für deine Codes zur Verfügung. Nutze ihn, das ist gleich viel besser lesbar. Staffel deinen Text in klar erkennbare Abschnitte mit Überschriften. Auch das ein oder andere Bild lockert auf. Besonders beim erklären z.B. von Arrays bietet sich das an.

Schlussendlich
Hoffe du fühlst dich nun nicht "gebügelt". Aber das sind die Dinge die mir persönlich dort gefehlt haben. Vielleicht nützt dir ja einiges was und du führst das Tutorial zuende.

~Makenshi

niR-kun
19.07.2010, 19:47
Hm ok. Ein Menütutorial.

Positiv
Du baust das ganze so auf, das du den Code Stückchen für Stückchen erklärst. Du erklärst recht ausführlich was deinen Code selbst angeht. Du bemühst dich sichtbar die Zusammenhänge zu erklären die zu dem Menü führen sollen.


Oja, da hat mich ein Sortier-Skript inspiriert (und laute Musik), den ich für den Item-Menü geschrieben habe. Davor war alles voller Fork-Conditions, die unglaublich riesig waren. Ich finde den Skript so genial, dass ich den einfach mit anderen teilen muss. :D


Negativ
Da fehlt eine Menge Vorerklärung. Die meisten Nutzer die mit dem Maker arbeiten können mit einer Schleife oder einem Array nicht das geringste anfangen. Auch ein Pointer ist alles andere als geläufig. Du solltest diese Begriffe genauer erklären als du es im Text tust. Selbst ein Fortgeschrittener dürfte sich schwer tun ohne jede Erklärung diese Elemente zu verstehen.

Du kommentierst deinen Quellcode nicht. Das sollte man in einem Tutorial tun, um hierbei mit gutem Beispiel voran zu gehen. Außerdem würde dein Code dadurch wesentlich lesbarer werden.

Zum dritten solltest du bevor den Code einwirfst erstmal genau die Struktur deiner Menükonstruktion erklären. Fang doch erstmal mit einer Arrayerklärung an. Und das dieses Array das Inventar darstehen soll. Nimm ein wenig das abstrakte raus. Das ist verständlich. Danach erkläre mal welche CE / Mapevents nötig sind. Was ihre Funktion ist. In Kurzform natürlich. Dann hat man schonmal einen groben Überblick was man da vor sich hat.

Mein vierter Einwand bezieht sich auf deine Erklärungen an sich teilweise. Da fehlt stellenweise etwas was deinem Leser hilft deine Gedankengänge nach zu vollziehen. Bsp.:

Dieser Abschnitt wirkt ein wenig so als würden da Informationen fehlen. Warum ist es egal ob es ein CE oder ein ME ist? Du lässt die Startbedingungen auf Standard ok. Warum tust du das? Wohl weil du den Inhalt per "Call" nutzen willst. Nur sowas weiß dein Leser in dem Moment nicht. Das verunsichert jemanden der gerade erst lernt zusätzlich.

Das fünfte und letzte ist die sprachliche Seite. Es ist das Skript. Nicht der Skript. Kleinere Rechtschreibfehler sind auch drin gewesen. Wenn auch nichts gravierendes.

Wichtiger wäre es das du ein wenig "Textdesign" betreibst. Du hast BB Codes zur Verfügung, nutze sie um dein Texttutorial etwas ansehnlicher zu gestalten. Der Event Exportierer von Cherry stellt einen farbigen Style für deine Codes zur Verfügung. Nutze ihn, das ist gleich viel besser lesbar. Staffel deinen Text in klar erkennbare Abschnitte mit Überschriften. Auch das ein oder andere Bild lockert auf. Besonders beim erklären z.B. von Arrays bietet sich das an.
Leider hat es den Nachteil das man bei dem farbigen Style nach meinem Wissen keine Code-Tags mehr nutzen kann. Ich habe übrigens extra nicht rein geschrieben, ob man ein CE oder ME nutzen soll.

"Das" Skript, aha - naja selbst andere die ich kenne sagen "der" Skript - da scheint es wohl eine Dialekt-mäßige Sache sein. ;)

Ich denke, dass ich die Fachbegriffe einfach verlinke (Wikipedia lässt grüßen) oder entferne, die im Text zu erklären, würde den Rahmen des Tutorials sprengen. Das Skript habe ich komplett umgeschrieben, da ich ihn aus meinem Projekt herausziehen musste.



Schlussendlich
Hoffe du fühlst dich nun nicht "gebügelt". Aber das sind die Dinge die mir persönlich dort gefehlt haben. Vielleicht nützt dir ja einiges was und du führst das Tutorial zuende.

~Makenshi

Ich war auf wesentlich härtere Kritik eingestellt. Das ist mein erstes Tutorial, ich bin bereit aus meinen Fehler zu lernen. :D
Man kann das übrigens den Code von 5. auch für "Zauberei"/Technik-Menüs nutzen.

Schlussendlich werde ich einfach mal das Menü hochladen, mit Beispiel-Pictures, usw.

PS: Da die meisten Spiele ja auf Maus-Steuerung verzichten oder diese nicht unterstützen werde ich das mit Tastatur-Steuerung schreiben.

lg

UDPATE: Ja, ich werde das noch mal umschreiben ^^

makenshi
19.07.2010, 20:29
Dann ist ja gut das du dafür offen bist. :)
Also der Artikel vor dem Singular von Skript ist wirklich das. http://de.wiktionary.org/wiki/Skript

Die Begriffe ausführlich zu erklären ist sicherlich falsch. In Fachbüchern wird es gerne so gehandhabt das man sie erklärenderweise anreißt. Und dann auf weiterführende Tutorials verweißt. Wikidpedia Links würde ich vermeiden, meist erklären sie solche Begriffe nicht sehr verständlich.

Hm, welchen Zweck verfolgst du damit das du eine, doch nicht unwichtige Sache, nicht erklärst?

~Makenshi

niR-kun
23.07.2010, 16:31
~ PUSH ~
http://tell.fll.purdue.edu/JapanProj/FLClipart/Verbs/push.s.gif

Update:

unnötige Fachbegriffe entfernt
Erklärungen bearbeitet
Code etwas kommentiert
Struktur bearbeitet

niR-kun
30.07.2010, 17:38
Kann jemand das bitte ins Entwickler-Forum schieben - danke!

PS: Wenn mein Thread bei den Tutorial-Thread verlinkt wird wäre ich auch dankbar. Da es noch nicht fertig ist, muss der Thread noch offen sein.

Cherry
31.07.2010, 09:50
Die Code-Tags sind auch nicht notwendig, weil der EventExporter mit einem anderen Trick für Einrückungen sorgt und das ganze auch in einen Quote packt, damit es sich vom anderen Text abhebt.

niR-kun
25.08.2010, 17:28
~PUSH~ Es gibt wieder was neues, das Tutorial wird so langsam fertig. :D


Die Code-Tags sind auch nicht notwendig, weil der EventExporter mit einem anderen Trick für Einrückungen sorgt und das ganze auch in einen Quote packt, damit es sich vom anderen Text abhebt.

Das Problem ist bloß, dass es das Beispielprojekt noch gar nicht gibt.
Ich kopiere mir den Code aus meinem Projekt heraus und ändere ihn per Hand, so dass es mit den Variablen passt. ;)
Ich werde das über den EEE mit einem Template machen, wenn das Beispielprojekt fertig ist. :p