RPG2000-Destiny-Exkurs :: Die Maus des Schicksals "Wie man die Maus richtig nutzen tut"-Tut... oder so ähnlich
ACHTUNG
Zu diesem kleinen Exkurs, oder Tutorial, wie auch immer ihr es nennen wollt, gibt es von mir weder Bebilderung zum Geschehen noch Vorlagen für benötigte Bilder, es ist sehr viel Theorie mit einem Praxisanteil, den ihr teilweise selbst aus den Schritten folgern müsst. Wer also keine Probleme damit hat, einen großen Berg Text mit ein paar Codeblöcken dazwischen zu lesen, kann hier gerne fortfahren, ansonsten werdet ihr hiermit wirklich nicht glücklich.
Wer RPG2000 1.50/1.51/1.52, RPG2003 oder ganz andere Software verwendet, ist hier ebenfalls falsch.
Solltet ihr schon mit der Maus vertraut sein, könnt ihr zu den letzten beiden Punkten vorskippen, denn davor wird euch eher nichts interessieren.
Und wenn ihr absolute Profis im Umgang mit der Destiny-Maus seid, gibts hier höchstwahrscheinlich absolut nichts Neues für euch.
Solltet ihr einen Erfolg verbuchen können und alles ist zu eurer Zufriedenheit, wird es jetzt Zeit, die Maustasten in Variablen einzufangen, das läuft im Grunde genau so ab wie eben, nur dass die Ziele für die Variablen ein wenig anders heissen werden. Eine Ausführung sagt mehr als unnötige Erklärungen:
Um die Maustasten aufzufangen, werden wir auf die Tastatur zugreifen, klingt komisch, ist aber so:
Keyboard.GetKeyState(...)
Dort werden wir für jede Variable eine Taste in unser Kommentarnotizfeld mit eintragen, angesprochen werden können sie ganz einfach über die nachfolgenden Tastenbezeichner:
Alles, was nun folgt, wird zwischen dem Picture und dem Wait eingetragen.
Um jetzt zu wissen, ob eine Taste gerade gedrückt wird oder nicht, gibt es nun eine ganz einfach anwendbare Feststellungsmethode. Dazu startet ihr eine Fork bzw einen Bedingungszweig, wählt die Variable der Taste, die ihr ansprechen wollt, und lasst abfragen, ob sich ihr Wert unter 0 befindet, also Minuswerte angenommen hat. Tritt dieser Fall ein, könnt ihr sicher sein, dass die Taste gerade gedrückt wird, wichtig ist nur, dass sich diese Werte immer wieder aktualisieren, weshalb sich dieses Event auch dauerhaft wiederholt. Allerdings steht es euch auch frei, diese Bedingungen in einem anderen Event zu stellen, das neben diesem permanent läuft, um so die verschiedenen Prozesse voneinander zu trennen, dies wird hier allerdings nicht weiter ausführend gezeigt.
In euren Zutreff-Fall der Bedingung könnt ihr jetzt irgendetwas einbauen, das signalisiert, dass die Abfrage erfolgreich verlaufen ist, zu empfehlen wäre hierbei immer eine Message.
Kniff #1
Diese Abfragen lassen sich natürlich auch stapeln, indem ihr einfach eine Bedingung für eine andere Taste in die der ersten mit einfügt, auch über den "ELSE-Case" lässt sich eine Menge mehr an Dingen anstellen.
Kniff #2
Dies muss auch nicht immer auf "wird gedrückt?" hinauslaufen, sondern auch mal auf "nicht gedrückt", indem ihr verlangt, dass die Variable wirklich direkt 0 ist, statt kleiner, um so beispielsweise gekonnt zu erreichen, dass während einer Aktion mit der linken Taste die rechte nicht ebenfalls aktiv sein darf.
Eine Abfrage ist ja schön und gut, aber wie ihr euch vielleicht denken könnt, wird euch permanent das Ergebnis eurer Klickerei vom Event um die Ohren gehauen, wenn ihr die Tasten einfach nicht loslasst. Um das nun loszuwerden, gibt es 2 Möglichkeiten, die beide fast gleich funktionieren, aber verschiedenen Zwecken dienen, jenachdem, ob ihr warten wollt, bis die Taste losgelassen wird oder die Anweisungen nach dem Klick durchgeführt werden und nachher auf das Loslassen gewartet wird, hierbei unterscheidet sich lediglich, wann genau ihr die nachfolgenden zusätzlichen Abfragen nach Eintreffen des Klicks einfügen werdet:
Dieser Prozess wird so lange wiederholt, bis die Taste wieder losgelassen wurde und zeigt währenddessen den Cursor weiter an. Ein Beispiel, wie das Event aussehen könnte, wenn man sich dazu entscheidet, die Wirkung erst zu zeigen, nachdem losgelassen wurde, sähe nun so aus:
Etwas kompliziert, oder? Leider bleibt ein wenig Komplexität nie aus bei soetwas.
Doch dafür werdet ihr euch umso mehr freuen, was als nächstes und letztes dran kommt.
Diejenigen unter euch, die schon einmal mit der Maus im Maker gearbeitet haben, werden vorallem wegen einer Sache besonders in Ausrastern versunken sein: Schaltflächen auf Koordinaten eingrenzen.
Um es mal kurz zu fassen, das ist so ziemlich das Schlimmste an Mausarbeit, aber zum Glück beschaffen uns andere Fähigkeiten von Destiny hier unglaubliche Abhilfe und erweitern die Möglichkeiten ins Unermessliche. Es wird nur ein weiteres Picture gebraucht. Stellt euch vor, ihr wollt einen komplexförmigen oder gar komplett runden Knopf auf den Spielbildschirm verfrachten. Aus schier endlosen Koordinatenabfragen eine entsprechende, nennen wir es mal Hitbox, zu basteln, ist keine Option, wirklich keine. Jedoch gibt es da noch etwas anderes.
Destiny ist in der Lage, aus einem Bild Farben an bestimmten Positionen abzulesen, deswegen erhaltet ihr nun folgende Aufgabe: Erstellt ein Bild von einer Schaltfläche, egal in welcher Form, ob Viereck, Dreieck, Fünfeck, Stern, Triforce, Brot, Grill oder auch ein Drache, ist völlig egal, auf einem 320x240-Pixel-Bild und danach erstellt ihr ein weiteres Bild in gleicher Größe, wo der Klickbereich, im Optimalfall die ganze Schaltfläche, mit einer einzigen Farbe ausgefüllt ist. Merkt euch, auf welchem Palettenindex sich diese Farbe befindet und speichert beide ab. Importiert das normale Bild und KOPIERT, ganz wichtig, KOPIERT das zweite Bild in den Picture-Ordner, damit wir nicht riskieren, dass der Maker die Palette dieses Bildes neu umgestaltet beim Import.
Zeigt im Event das richtige Hauptbild ganz normal und sichtbar auf der Bildschirmmitte an und auf einer weiteren ID unsichtbar unsere "Farbmaske", bis auf die Unsichtbarkeit sind alle anderen Einstellungen wie Zoom oder Position egal:
Da das nun erledigt ist, können wir auch schon mit den nächsten und letzten Abfragen beginnen, in unsere Kommentarnotiz vom Anfang fügen wir nun noch eine sechste Variable ein:
v[6] = Picture[2].Pixel[v[1], v[2]];
Diese Anweisung wird aus der Farbmaske die Farbe der Position "aufsaugen", wo sich die Maus befindet, da wir ihre Position zuvor in Variable 1&2 gespeichert haben. Da das Bild exakt so groß wie der Spielbildschirm ist (320x240), haben wir uns hiermit eine einfache Möglichkeit aufgebaut, nicht nur abzufragen, WO sich die Maus befindet, sondern auch auf WAS sich die Maus befindet. Das ist immens wichtig, um nervige Koordinatenspielereien komplett zu umgehen und wenn ihr erstmal komplizierte oder viele Klickflächen auf einmal verwendet, werdet ihr feststellen, dass ein weiteres Bild zu erstellen viel angenehmer ist.
Nehmen wir für das Beispiel einfach mal an, die Farbe unserer Klickfläche wäre 1 (aus 0 bis 255), ihr merkt euch natürlich die ID, die ihr vorher im Grafikprogramm nachgeschaut habt.
<>If: Variable [0006] == 1
<>Message: "Linke Maustaste erfolgreich aufgespürt!"
: : "Wurde übrigens schon wieder losgelassen."
: : "Wir befinden uns auf einer Klickfläche!"
<>
::END
<>
Das Ganze lässt sich wie zuvor mit dem Loslassen auch erweitern, dass während eines Klicks die Maus beispielsweise nicht einen bestimmten Farbbereich auf der Maske verlassen darf, doch wer bis hierhin überlebt hat, wird auch darauf kommen, wie man das genau implementieren kann, so schwer ist das ja nun auch nicht mehr. Zum Abschluss das Event, wie es nach den bisherigen Machereien aussehen kann. Zur Verbesserung der Performance empfiehlt es sich, den Button und die Maske ausserhalb des wiederholenden Prozesses anzuzeigen, diesen habe ich einfach mal mit einem Label eingegrenzt:
Und damit lass ich euch nun ohne große weitere Reden allein, das ist sowieso schon länger geworden als gewollt. Für alles weitere gilt einfach: Schaut euch mal die Hilfedatei zu Destiny an, denn sie verdient den Titel "Hilfe" wirklich mehr als viele andere Dokumentationen.
~あきら
--
Solange es hier falschzitierende Ärsche gibt, dulde ich keinerlei Zitatboxen, die von mir sein sollen.