PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PicPointerPatch und entlanglaufender Cursor am Querbalken



Davy Jones
17.10.2013, 20:53
Die beiden Pictures:
http://i.minus.com/i2MfABvzkgBB8.png

http://i.minus.com/ibpn8nva5b09Gr.png

Mein Skript:
- Ich möchte, dass der Cursor am Balken entlangläuft
- Durch Drücken von Enter soll der Spieler eine gewisse Punktzahl erreichen
- Je nachdem wo der Cursor sich befindet, sollen Werte in einer Punktetabelle entweder addiert oder subtrahiert werden.

Meine Frage:
Lässt sich das mit dem PicPointerPatch in irgendeiner Form realisieren?


PicPointerPatch for RM2k v1.07 & RM2k3 v1.08 - Version 2.5b
===========================================================

Release of 05.04.2010

(C) 2008, 2010 David "Cherry" Trapp
cherry@cherrytree.at
http://cherrytree.at

--- DEUTSCH ---

CHANGELOG:
v2.5b
- Die Wartezeit für "Move Picture" kann nun auch durch Variablen angegeben werden.
- Transparenz für untere Hälfte des Bildes (beim RM2k3) funktioniert endlich richtig.
v2
- Dateinamen können auch durch Variablen angegeben werden.
v1
- Erste Version

Mit dem PicPointerPatch kann man, wie der Name schon sagt, auch bei Picture-IDs Pointer verwenden (sprich, man kann durch eine Variable festlegen,
auf welches Picture sich eine Operation bezieht). Die Benutzung ist ganz einfach, für fixe Bild-IDs wird diese ganz normal angegeben (z.B. Show Picture [7],
cloud.png), wenn der Wert aus einer Variable gelesen werden soll, verwendet man 10000+VarID als Bild-ID (z.B. Change Variable [208], 7; Show Picture [10208],
cloud.png). Enthält die Variable einen ungültigen Wert, erhält man einen Fehler.

Dies funktioniert genauso mit Transparenz und Vergrößerung der Bilder, sowie mit der Zeitdauer für "Move Picture"-Befehle.

Die zweite wichtige Funktion (in Version 2 dazugekommen), ist, dass auch der DATEINAME des Bildes durch eine Variable beeinflusst werden kann.

Wird als Bild-ID 50000+VarID verwendet, wird...
a) wie oben beschrieben, die Bild-ID aus [VarID] gelesen
b) eine Dateinummer aus [VarID+1] gelesen - die letzten 4 Zeichen des Bilddateinamens werden durch diese Nummer ersetzt.

Einige praktische Beispiele:

<> Show Picture 2, (160,120), Gegenstand_0000
Dies zeigt, ganz normal, das Bild "Gegenstand_0000" als Bild Nr. 2 an.

<> Change Variable [0208], 9 set
<> Show Picture 10208, (160,120), Gegenstand_0000
Dies zeigt das Bild "Gegenstand_0000" als Bild Nr. 9 an.

Nun aufgepasst:
<> Change Variable [0208], 14 set
<> Change Variable [0209], 83 set
<> Show Picture 50208, (160,120), Gegenstand_0000
Dies zeigt das Bild "Gegenstand_0083" (!) als Bild Nr. 14 an.

WICHTIG: Der Dateiname sollte bereits Platz für diese Nummer bieten! Ein Negativbeispiel: Würde obiges mit dem Bild "Panzerechse" versucht, würde
der Maker versuchen, ein Bild namens "Panzere0083" zu laden! Dies würde in einem "File not found"-Fehler enden.

Achja, nochwas: alles, was der Patch nicht verarbeiten kann, schickt er einfach an den Maker weiter. Wenn man also z.B. als Bild-ID 10500 angibt,
obwohl man diese Variable gar nicht verwendet, wird der Maker versuchen, ein Bild mit Nummer 10500 anzuzeigen, wird also eine Fehlermeldung ausspucken!

Eine praktisches Beispiel (6stellige Zahlenanzeige) ist als Demospiel beigefügt. Dies benötigt übrigens nur 15 Eventkommandos! Das Event ist ausführlich
kommentiert. Einfach mal im Maker öffnen und ansehen.

Der Nutzen des Patches? Wenn du ihn bis jetzt noch immer nicht verstanden hast, tust du mir leid. Drum helf ich dir auf die Sprünge:
Zahlenanzeigen, Item-/Zauber-/Ausrüstungsmenüs, etc. - mit dem PicPointerPatch Version 2 lässt sich dies alles in kürzester Zeit verwirklichen!

An alle, die sich jetzt ärgern, weil sie Monate dafür gebraucht haben: TUT MIR LEID! ;-)

Corti
17.10.2013, 20:58
Kurz: Du willst viele Zahlen darstellen, korrekt?

Für die beiden Grafiken da braucht man die PPP ja nicht.

Davy Jones
17.10.2013, 21:06
Hauptsächlich geht es mir darum, dass die Punkte an den korrekten Positionen des Cursors gezählt werden, wenn man Enter drückt (erstmal rein technisch, non-visuell).

Die Anzeige des Punktekriegens ist allerdings auch so eine Sache. Natürlich hämmert man auf Enter und es wäre schon toll zu sehen, wenn da jetzt sowas wie "1 Punkt", "2 Punkte", etc. in Form von schnellen Pictureeinblendungen gezeigt wird. Die Frage ist nur: Wie bau ich sowas auf? Wenn ich 10mal in 2 Sekunden auf Enter hämmere müssten theoretisch genausoviele Pictures eingeblendet werden.

Die Punktetabelle wo das Gesamtergebnis verzeichnet wird, macht mir keine Probleme.

Corti
17.10.2013, 21:40
D.h. der Cursor bewegt sich über den Kugeln. Von der linken lilanen zur rechten lilanen und zurück.
Immer wenn man Enter hämmert bekommt man Punkte, je nach dem über welcher Kugel der Cursor gerade ist.

Technisch:
Ich hatte den halben Eventcode schon geschrieben als mir auffiel, dass es mich gerade undheimlich nervt und aggressiv macht diesen Post zu schreiben. Ich werd den Post morgen zuende bringen, wenn ich wieder locker flockig und motiviert bin. Gute Nacht, Davias ^_^

Cepanks
17.10.2013, 21:49
Idee um den Cursor am Balken entlanglaufen lassen: Nimm die x-Position des Balken-Bildes und zieh dann die Hälfte der Bildbreite davon ab, weil der Maker den Mittelpunkt zur Positionierung benutzt. Das ist der Anfang des Balkens. Die x-Position plus die Hälfte der Bildbreite ist das Ende des Balkens. Bei deinem Balken musst du links noch ein paar Pixel hinzufügen bzw. rechts ein paar abziehen, weil der Cursor wahrscheinlilch ja nur über die Kugeln laufen soll.

Dann lässt du den Cursor nach rechts laufen, so lange seine x-Position <= dem Balkenende ist, dann nach links, so lange sie >= dem Balkenanfang ist, dann wieder nach rechts usw.

Wenn jetzt Enter gedrückt wird, schaust du, was die x-Position des Cursors ist und verteilst dementsprechend die Punkte.

Corti
18.10.2013, 07:52
Technisch:
Ich würde Tastenabfrage und Animation als Zwei PPs machen.

Animations-PP
{
movePic(Cursor)xPos: erste Kugel Zeit:0.0
index = 1
richtung=1
xMax = xPos ganz rechts
xMin = xPos ganz links

label:x
if(richtung==1)
{
xPos +1
}
else
{
xPos -1
}

if(xPos==xMax)
{
richtung=0
}
if(xPos==xMin)
{
richtung=1
}

movePic(Cursor)xPos: erste Kugel Zeit:0.0
wait0.0 ( so oft wie du es langsam willst )
index = aus der xPos die angezielte Kugel berechnen
// in index darf nur die Indexzahl enthalten sein, zu keiner Zeit Zwischenergebnisse, die Rechnung ist also in einer anderen Variable zu machen
jumptToLabel:x
}


Tastendruck-PP
{
label:y
keyvar = 0
keyinput->keyvar
if(keyvar == DecisionKey)
{
// die Variable "index" enthält die Kugel, über der sich der Zeiger gerade befindet
Punktezahl addieren, Bild anzeigen
}

jumptToLabel:y
}

Davy Jones
18.10.2013, 13:14
Gibt es auch so einen Befehl wie "Von Position dies zu Position das (aka Breite der Kugel) machst du jenes"? Ansonsten bräuchte ich da ziemlich viele Abfragen für.

Corti
19.10.2013, 13:23
Die Kugeln haben alle 9 Pixel Breite...~ ich brauche keine Abfrage sondern eine Subtraktion und eine Division ;-)

Davy Jones
19.10.2013, 14:05
Ok, aber da sind noch ein paar unklare Sachen:


movePic(Cursor)xPos
Was bedeutet das? Referenziert das Cursor-Picture eine Variable? Wenn ja, bräuchte ich doch eine zweite.


erste Kugel Zeit:0.0
wait0.0 ( so oft wie du es langsam willst )
Schätzungsweise ist der wait mit 0.0 wichtiger als das picture-interne 0.0, oder? Bestimmt der wait also, wann der Cursor die einzelnen Kugeln passieren soll?


index = aus der xPos die angezielte Kugel berechnen
// in index darf nur die Indexzahl enthalten sein, zu keiner Zeit Zwischenergebnisse, die Rechnung ist also in einer anderen Variable zu machen
Da schmilzt grad mein Gehirn, technische Sachen mit Pictures sind meine ganz große Schwäche im Maker.