Startseite »
Forum »
Members »
Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
Schönheit
Rating:
by Playm, Wednesday, August 11th 2021, 12:24am
Außer obiger Situation, kennt ihr ja auch die Database im RPG Maker XP. Im Reiter "Classes" in der Database findet man oben rechts die Element- und Statuseffizienz. Das sind so kleine Buttons, die einen Buchstaben zwischen A und F anzeigen und wenn man drauf klickt ändert sich der Buchstabe auf den Folgenden, also aus A wird B, aus B wird C und so weiter. Aus F wird A. Es ist ein Kreis. Und ich wollte so etwas programmieren: Eine Funktion, die mir für einen Buchstaben den folgenden Buchstaben ausgibt und beim letzten Buchstaben wieder auf den Anfang springt. Und das ist meine Lösung in JavaScript:
![]() |
JavaScript Source code |
1 2 3 4 |
function advanceEfficency( efficency ){ var efficency_sequence = ['A', 'B', 'C', 'D', 'E', 'F', 'A']; return efficency_sequence[ efficency_sequence.indexOf(efficency) + 1 ]; } |
Und den restlichen Blogpost geht es darum, warum das schön ist.

Erst einmal: Was machen wir hier? efficency_sequence ist ein Array und unsere schöne Funktion returned einen Eintrag aus dem Array. Welchen wir returned bestimmt der Index, den zwischen den eckigen Klammern in Zeile 3 berechnen. Die Array-Funktion indexOf( element ) gibt uns den Index, also die Position von einem gegebenen Element im Array zurück.
- ['Montag', 'Dienstag', 'Mittwoch'].indexOf( 'Mittwoch' );
würde uns 2 zurück liefern
- ['Montag', 'Dienstag', 'Mittwoch'].indexOf( 'Montag' );
würde uns 0 zurück liefern
- ['Montag', 'Dienstag', 'Mittwoch'].indexOf( 'Apfel' );
würde uns -1 zurück liefern, denn es gibt das Element im Array nicht
Jetzt addieren wir aber auf den Index noch Eins drauf. Die Summe der zwei Zahlen benutzen wir als Index beim Array-Zugriff. Wir schauen uns also das Element an, was nach unserem gegebenen Element kommt. Und rechts von 'A' steht im Array 'B', rechts von 'B' steht 'C' und rechts von 'F' steht 'A'. Ich finde das schön. Es ist so einfach. So simpel.
Und die Lösung hat noch eine Eigenschaft, dadurch das indexOf -1 zurück liefert, wenn es das gegebene Element nicht im Array gibt: Sollte ein invalider Status eintreten (die gegebene Effizienz ist kein Buchstabe zwischen A und F) resettet ein Aufruf der schönen Funktion zurück auf 'A'. Denn die Summe sieht dann so aus: " -1 + 1 = 0".
Worauf resettet werden soll, kann man übrigens dadurch beeinflussen, womit der Array beginnt und endet.
![]() |
JavaScript Source code |
1 |
var efficency_sequence = ['C', 'D', 'E', 'F', 'A', 'B', 'C']; |
Die Methode lässt sich leicht auf andere Anwendungsfälle übertragen. Sagen wir mal wir haben eine Ausrichtung: Norden, Westen, Süden, Osten.
Dann könnten wir eine Funktion wie die folgende Schreiben:
![]() |
JavaScript Source code |
1 2 3 4 5 6 7 8 9 10 11 |
function turnRight( given_direction ){ var direction_sequence = ['north', 'west', 'south', 'east', 'north']; return direction_sequence[direction_sequence.indexOf(given_direction) + 1]; } function turnLeft( given_direction ){ var direction_sequence = ['north', 'east', 'south', 'west', 'north']; return direction_sequence[direction_sequence.indexOf(given_direction) + 1]; } turnRight( 'north' ); //=> 'west' turnLeft( 'west' ); //=> 'north' |
Die ganze Prozedur kommt ohne if-then-else-Verzweigungen aus. Es gibt kein Modulo. Es ist einfach eine sehr simple Art, die Aufgabe zu lösen. Ich finde es schön.
Comments (3)
-
by Playm (Saturday, August 21st 2021, 2:38pm)
Ja, das klappt.
In Ruby gibt die .index()-Methode in der Tat *nil* zurück, statt -1.
Man kann im Maker das Verhalten von JavaScript aber nachbauen, in dem man im Falle eines nil-Wertes -1 zurück liefert und das ganze klammert.
sequence[ ( sequence.index(given_direction) || -1 ) + 1];
Blog navigation
Categories
Most recent
-
Schönheit
Wednesday, August 11th 2021, 12:24am
-
Rotierende Items auf der Map
Saturday, December 22nd 2018, 8:29am
-
Die RMXP-Icons als 3D-Modell
Sunday, December 16th 2018, 11:01am
-
Wie die Bildchen in die Projektauswertungen kommen
Saturday, January 20th 2018, 6:00am
-
Dateiformate bei der Spielentwicklung
Sunday, November 5th 2017, 9:29pm
-
Schönheit die aus der ausnutzung von logischen ...
by ITgenie98 (Nov 1st 2022, 5:10pm)
-
Ja, das klappt. In Ruby gibt die .index()-Me...
by Playm (Aug 21st 2021, 2:38pm)
-
Das ist wirklich eine sehr schöne und vor allem...
by Lycaon (Aug 19th 2021, 12:53am)
-
Script ist gepostet. ;) Kann sein, dass der ...
by Playm (Dec 23rd 2018, 3:47am)
-
btw: Poste das Script hierrein: http://www.rpg-...
by Josey (Dec 23rd 2018, 3:13am)
Archive
-
2021 (1)
-
August 2021 (1)
-
-
2018 (3)
-
December 2018 (2)
-
January 2018 (1)
-
-
2017 (7)
-
November 2017 (1)
-
October 2017 (3)
-
September 2017 (3)
-
-
2015 (10)
-
November 2015 (2)
-
October 2015 (3)
-
July 2015 (3)
-
June 2015 (2)
-
-
2014 (2)
-
2013 (4)
-
August 2013 (2)
-
June 2013 (1)
-
May 2013 (1)
-
Blogroll
-
Rpg-Studio, Stirb Nicht! D:
by Josey Dec 1st 2018, 11:41am
-
Mein erster Blog-Eintrag :D über Motivation & Release!?
by Zego Sep 4th 2016, 11:43pm
-
Die ewige Rückkehr
by Mustamakkara Jul 20th 2015, 3:39pm
-
Ich verkünde hiermit meine Inaktivität!
by MrKingmustafa May 21st 2015, 5:54pm
-
Bastle an einer Community
by RyuImperator Jan 2nd 2014, 6:06pm
-
Dungeon Heart (preRender)
by Chaosgod Espér Oct 27th 2013, 9:48pm
-
Raging about C++ & MSVC--
by Der Imperator Sep 15th 2013, 8:25am
-
Und so geschahs...
by Avery Apr 1st 2013, 5:53pm
-
Ice & Dark Demo 3.0 out now!
by Lucy Fox Apr 1st 2013, 12:57am
-
Durchlauf der eigenen Teeworldsmap mit Kenji
by Veni Mar 31st 2013, 4:16pm
-
Char Designer
by Lone Wolf Mar 30th 2012, 12:32pm
-
10-Wort-Trash-Geschichten
by Strubbel Mar 28th 2012, 4:30pm
-
Laura und der Herzbube: SB-RPG Episode 2
by Яογal Sίη° Mar 16th 2011, 4:23pm