Na ok, da ich grad Zeit hab werde ich mal versuchen das zu erklären.
Dabei ziele ich auf MEINE Variante ab! Das heißt, du brauchst den PicPointer-Patch.
Weiterhin gehe ich von 4 Items pro Seite aus (Das ist nicht so wichtig, wie man später sehen wird, aber für Beispiele nehme ich 4).
Ich werde es auch einige Pointer raus lassen die ich benutze, damit es verständlicher wird.
_________________________________________________________________________________
Zunächst mal wollen wir uns das vorstellen. Wir wollen also das Items mit einer höheren ID ran rücken, falls "ZwischeiItem" fehlt?
Offenbar ist es also so, das irgendwo abgefragt werden muss wie viel du von einem Item noch hast.
Außerdem scheint es, als wenn sich der Rhythmus merkt wenn du ein Item "überspringst".
Dazu benötigen wir nun erstmal 7 Variablen + 2 Variablen für die Position des Bilder + 4 ID Varis in denen wir die ID des Items speichern (Und die Anzahl!) + einen Switch, der sich merken wird ob man blättern kann!
Ok, nachdem das erledigt ist, überlegen wir uns mal den Ablauf. zunächst wollen wir mal den ganzen Variablen ein paar Werte rein drücken.
dazu einige Notizen an der Stelle. Wie Eingangs erwähnt speichern wir in der ID sowohl die ID als auch die Anzahl!!!
Später wird das durch MOD raus gefiltert.
Code-technisch heißt das wir Nullen die ID-Variablen:
<> ORDNER ID 1-4 = 0
Ok, machen wir jetzt mal kleinen Sachen. ORDNER Zähler wird auch auf 0 gesetzt, denn das steht für das Item das du grad überprüfst. Dabei brauchst du nicht mal in der Item-Database die Items geordnet haben! Denn dazu haben wir ja ORDNER Abbruch. Der startet mit 1 und steht über die Anzahl an Items die du hast. in unserem Beispiel haben wir maximal 10!
<> ORDNER Zähler = 0
<> Ordner Werte = 1
ORDNER Pic-ID musst du mit dem Wert initialisieren, mit dem du die das erste Bild anzeigen willst, wir nehmen hier mal 5!
<> ORDNER Pic-ID = 5
ORDNER Pos-X und Pos-Y musst nur natürlich auch anpassen wir du meinst.
Wir nehmen hier mal einfach X = 64 und Y =72!
<> ORDNER Pos-X = 64
<> ORDNER Pos-Y = 72
Ok, jetzt noch den Switch auf OFF, weil wir ja nicht wissen ob wir blättern können. Es könnte ja sein, das keine Items mehr kommen.
<> kann blättern = OFF
Und jetzt kommt das Interessante an dem System. Wir setzen ORDNER Items Sichtbar = ORDNER Startpunkt! Warum?
Ganz einfach, der ORDNER Zähler würde nun später auf eine Item zeigen das nicht existiert und würde so auch keinen Wert zurückgeben, was dazu führt das er einen Schleifendurchlauf machen ohne das erste Item zu sehen, wenn du ORDNER Items Sichtbar zb auf -1 hättest! Verstanden?
Trotzdem wird in der Schleifen der Zähler +1 gerechnet. was ihn zu dem nächsten Item bringt. Wenn du nun zb -4 machst, dann würde er die erste vier Items nicht angucken, sondern erst die nächsten 4 und ZACK haben wir geblättert nicht wahr?
Damit haben wir also insgesamt das hier bisher:
Der Startpunkt muss beim Start des Menü außerhalb dieses Calls auf 1 gesetzt werden!
_________________________________________________________________________________
So nun aber mal langsam zum Algorithmus! Hier bei nutze ich immer Labels und keine Loops, weil sich damit eben leichter springen lässt.
Wir fangen also mit einem Label an, gefolgt von einem ORDNER Zähler +1.
Außerdem einer Abfrage ob ORDNER Abbruch = 10 ist. (wir erinnernn uns, das sich das die Schleifendurchgänge nach der Anzahl der Items richten bei dieser Vari!). ELSE, dann rechnen wir auch ORDNER Abbruch + 1 (als Information, das 1 Item von 19 Items angeschaut wurde!) und machen ein Goto Label 1#.
Nach dem wir den Zähler +1 gerechnet haben fehlt aber noch was! Hier muss nämlich ein Call her, der in ORDNER CONTENT die Anzahl des Items speichert, welches gerade angeschaut wird.
Dieser sieht ungefähr so aus:
<> If ORDNER Zähler = 1 then Ordner Content = Anzahl von Trank
<> If ORDNER Zähler = 2 then Ordner Content = Anzahl von Hi-Trank
.
.
.
(hier musst du dann selbst sortieren)
Dementsprechend sieht das Ordner-System nun folgendermaßen aus:
<> Label 1#
<> ORDNER Zähler +1
<> CALL [Common- oder Map-Event in der Content gesetzt wird, wie oben beschrieben]
<> If ORDNER Abbruch >= 10
Then: [nichts]
Else:
<> ORDNER Abbruch +1
<> GOTO Label 1#
Wunderbar
Natürlich reicht das nicht, irgendwo muss man ja die Werte setzen und den Kram nicht wahr?
Dazu kommen wir jetzt, zwischen dem Call und dem IF kommen jetzt eine weitere Abfrage in der wir überprüfen ob ORDNER Content >= 1, sprich ob du dieses Item hast.
Und jetzt kommt noch ein Kniff der genau das macht wie im Beispiel ganz oben beschrieben wurde. Nach der Abfrage des Contents machen wir noch eine Abfrage ob ORDNER Item Sichtbar >= 1 ist. So verhindern wir, das selbst wenn das Item existiert es nicht angezeigt werden würde, da die Variable ja auf -4 beim blättern stehen würde.
Und Noch besser. durch die Abfrage ob der Content >= 1 haben wir erreicht, dass das Item übersprungen wird wenn es nicht da ist! das Nächste, das existiert würde erst ran rücken!!!
Das sieht dann so aus:
<> If ORDNER CONTENT >= 1 Then
<> If ORDNER Item Sichtbar >= 1 Then
Ich denke damit wäre nun das große Geheimnis des Ordnersystems gelüftet
Nun müssen wir noch die ID's befüllen und das Item anzeigen.
Dazu fragen wir ab ob ORDNER Item Sichtbar = 1,2,3 oder 4 ist.
Und füllen dann die ID rein die ja durch ORDNER-Zähler gezeigt wird und dann noch die Anzahl der Items:
If ORDNER Item Sichtbar = 1 then
<> ORDNER ID 1 = ORDNER Zähler
<> ORDNER ID 1 *= (mal) 100 [wir erinnern uns, an den Exkurs]
<> ORDNER ID 1 += (plus) ORDNER Content
<>If ORDNER Item Sichtbar = 2 then
<> ORDNER ID 2 = ORDNER Zähler
<> ORDNER ID 2 *= (mal) 100 [wir erinnern uns, an den Exkurs]
<> ORDNER ID 2 += (plus) ORDNER Content
If ORDNER Item Sichtbar = 3 then
<> ORDNER ID 3 = ORDNER Zähler
<> ORDNER ID 3 *= (mal) 100 [wir erinnern uns, an den Exkurs]
<> ORDNER ID 3 += (plus) ORDNER Content
If ORDNER Item Sichtbar = 4 then
<> ORDNER ID 4 = ORDNER Zähler
<> ORDNER ID 4 *= (mal) 100 [wir erinnern uns, an den Exkurs]
<> ORDNER ID 4 += (plus) ORDNER Content
Diesen Teil habe ich bei mir über einen Pointer gelöst, was dann so aussehen würde:
Macht genau das Gleiche nur kürzer, aber wenn du das nicht verstehst, nimm lieber die Variante von oben!
Als Nächstes benötigen wir wieder einen Call der das Item an der Position Pos-X und Pos-Y mit der ID Pic-ID anzeigt.
Der Call sieht ähnlich wie der Call zu der Anzahl an Items aus:
<>If ORDNER Zähler = 1 then SHOW PIC Trank ID:10XXX mit Pos-> und PosY
[10XXX steht hier für die Variablennummer die du Pic-ID genannt hast
.
.
.
[usw]
Das Ganze sieht also so aus: (Mit meiner Pointer-Variante!)
<> If ORDNER Content >= 1 Then
<> If ORDNER Items Sichtbar >= 1 Then
<> ORDNER Temp = Variablen Nummer von (ORDNER ID 1 minus 1)
<> ORDNER Temp += ORDNER Items Sichtbar
<> ORDNER Temp [Var no] = ORDNER Zähler
<> ORDNER Temp [Var no] *= 100
<> ORDNER Temp [Var No] += ORDNER Content
<> Call [Common- oder Map-Event das die Bilder anzeigt
So weit so gut.
Jetzt rechnen wir ORDNER Pic ID + 1 für das nächste Item das kommen könnte und die Y-Pos + 16 (also ein Kästchen nach unten, musst du anpassen).
Außerhalb der Bedingung für ORDNER Items Sichtbar muss du nun noch ORDNER Items Sichtbar +1 rechnen, damit er wenn ORDNER Items Sichtbar er auf den nächsten Item Slot zeigt (oder wenn er im Minusbereich ist, dann halt so das er weiß wann er ein Item anzeigen kann).
Außerdem setzen wir noch ORDNER Content auf 0, damit nicht zufällig ein Item angezeigt wird das es gar nicht gibt.
Dein Code sollte nun folgendermaßen aussehen:
<> Label 1#
<> ORDNER Zähler +1
<> CALL [Common- oder Map-Event in der Content gesetzt wird, wie oben beschrieben]
<> If ORDNER Content >= 1 Then
<> If ORDNER Items Sichtbar >= 1 Then
<> ORDNER Temp = Variablen Nummer von (ORDNER ID 1 minus 1)
<> ORDNER Temp += ORDNER Items Sichtbar
<> ORDNER Temp [Var no] = ORDNER Zähler
<> ORDNER Temp [Var no] *= 100
<> ORDNER Temp [Var No] += ORDNER Content
<> Call [Common- oder Map-Event das die Bilder anzeigt
<>End:
<>ORDNER Items Sichtbar += 1
<>ORDNER Content = 0
<>End:
<> If ORDNER Abbruch >= 10
Then: [nichts]
Else:
<> ORDNER Abbruch +1
<> GOTO Label 1#
<>End:
Allerdings könnte hier noch ein Bug entstehen, bei dem das letzte Item immer wieder geblättert werden kann! Ich will das nicht weiter erläutern, weil das mein Fehler war (Ich hab das Ordnersystem ziemlich schnell gemacht und musste dann fixen ).
Nach dem letzten End musst du nun den Switch kann blättern auf On schalten. Allerdings mit einer Bedingungg die... naja ewas unschön ist, aber egal.
De Bedingung ist, das ORDNER ID 4 (also der letzte Item-Slot) < die größte ID ist. Das heißt im Klartext, das wenn du 10 Items hast du abfragen muss ob ORDNER ID 4 < 1000 (immer an den Exkurs denken, die ID 10 steht an Stelle 1000 und 100 also wie oben beschrieben so: 00 10 XX).
Hast du 20 Items musst es halt heißen: If ORDNER ID 4 < 20 usw...
So sieht das aus:
<> Label 1#
<> ORDNER Zähler +1
<> CALL [Common- oder Map-Event in der Content gesetzt wird, wie oben beschrieben]
<> If ORDNER Content >= 1 Then
<> If ORDNER Items Sichtbar >= 1 Then
<> ORDNER Temp = Variablen Nummer von (ORDNER ID 1 minus 1)
<> ORDNER Temp += ORDNER Items Sichtbar
<> ORDNER Temp [Var no] = ORDNER Zähler
<> ORDNER Temp [Var no] *= 100
<> ORDNER Temp [Var No] += ORDNER Content
<> Call [Common- oder Map-Event das die Bilder anzeigt
<>End:
<>ORDNER Items Sichtbar += 1
<>ORDNER Content = 0
<>End:
<> If ORDNER Abbruch >= 10
Then: [nichts]
Else:
<> ORDNER Abbruch +1
<> GOTO Label 1#
<>End:
<>If ORDNER ID 4 < 1000 then
<> Switch kann blättern = ON
<>End:
<>Label 2#
Huch? Wo kommt der Label 2 jetzt her? Tja, der dient der Behebung eines Fehlers der Auftreten würde wenn man die Gesamtzahl der Item durch 4 teilbar ist (also MOD 4 = 0). dazu müssen zusätzlich noch eine Bedingung am Anfang des Algorithmus einfügen, welche zu Label 2 springt! Diese überprüft ob ob ORDNER Items Sichtbar >= 5 ist (also ob kein Slot mehr frei ist), wenn das so ist dann wird der Switch kann blättern angemacht, weil das ja heißt das da noch Items sind und springt zu Label 2! das Ganze sieht so aus:
<> ORDNER ID 1-4 = 0
<> ORDNER Zähler = 0
<> Ordner Werte = 1
<> ORDNER Pic-ID = 5
<> ORDNER Pos-X = 64
<> ORDNER Pos-Y = 72
<> kann blättern = OFF
<> ORDNER Items sichtbar = ORDNER Startpunkt
<> Label 1#
<> ORDNER Zähler +1
<> CALL [Common- oder Map-Event in der Content gesetzt wird, wie oben beschrieben]
<> If ORDNER Items Sichtbar >=5 then
<> Switch kann blättern = ON
<> GOTO Label 2#
<>End:
<> If ORDNER Content >= 1 Then
<> If ORDNER Items Sichtbar >= 1 Then
<> ORDNER Temp = Variablen Nummer von (ORDNER ID 1 minus 1)
<> ORDNER Temp += ORDNER Items Sichtbar
<> ORDNER Temp [Var no] = ORDNER Zähler
<> ORDNER Temp [Var no] *= 100
<> ORDNER Temp [Var No] += ORDNER Content
<> Call [Common- oder Map-Event das die Bilder anzeigt
<>End:
<>ORDNER Items Sichtbar += 1
<>ORDNER Content = 0
<>End:
<> If ORDNER Abbruch >= 10
Then: [nichts]
Else:
<> ORDNER Abbruch +1
<> GOTO Label 1#
<>End:
<>If ORDNER ID 4 < 1000 then
<> Switch kann blättern = On
<>End:
<>Label 2#
Das wars, wir sind komplett fertig hier!
_________________________________________________________________________________
Wenn du nun dein Menü baust, brauchst du anfangs nur ORDNER Startpunkt = 1 setzen und dann wenn du zb nach rechts drückst, abfragen ob der Switch kann blättern on ist und dann ORDNER Startpunkt -4 und dann einfach das Event hier callen
Zusätzlich machst du nach dem Call noch eine variable "SEITE" und rechnest die anfangs auf Null und bei einem Druck auf Rechts +1.
Wenn du nun nach links drückst, dann fragst du ab ob die SEITE >= 1 ist, setzt Startpunkt +4 und callst wieder den Ordner
Schaue dir in Zusammenhang mit diesem Post am Besten Velsarbor das Menü oder Tara's Adventure an!
Dann wirst du es verstehen und kannst es kopieren
Und noch ein Tipp, öffne nicht immer für jeden Mist einen Thread. Versuch doch mal selber deinen Kopf anzustrengen. Wenn du dir immer von anderen alles sagen lässt, bringt das nichts und du wirst nur vergessen wie du etwas gemacht hast. Klar dauert das länger aber so machst du wenigstes nicht den Eindruck als währst du arrogant (jedenfalls kam es so für mich rüber als du in meinem Thread meintest das es ordentliches Sprungscript scheiße).
MfG R.D.
Edit: @Nir-kun
Das ist ja noch schlimmer xD bei mir wäre das ewig lang bei 100 Items und Waffen und Rüstung etc...
Und ist das Bubblesort?