PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ineluki's Mauspatch div. Fragen



Mike
29.11.2011, 11:19
Ich spiele derzeit wieder ein wenig mit dem Mauspatch von Ineluki herum und da sind (erstmal) drei Fragen aufgetaucht:

1. Gibt es eine Möglichkeit zu verhindern, dass die Maus, bzw. der Mauszeiger, im Spiel sofort in eine bestimmte Ecke (bei mir rechts unten, vll. ist das immer so?) verschwindet, sondern standardmässig ersteinmal in der Mitte bleibt?

2. Wie erstelle ich einen Mauszeiger, der aus zwei Teilen besteht. Aus einem Teil, der nicht transparent ist (dem Zeiger selbst zB.) und einem animierten, transparentem Teil. Bis jetzt habe ich nämlich das Problem, dass durch die Animation (in der sich "Waits" befinden) die Bilder nicht ständig, sondern im Abstand von einem Wait mit 0.1 aktualisiert werden und dadurch der transparente Teil hinter dem nicht transparentem her ist :D Sieht etwas komisch aus.

3. Nehmen wir als Beispiel an, ich habe drei Menüpunkte (zB. Start/Laden/Beenden) die ich mit Tastatur UND Maus auswählen kann. Wie kann ich es nun machen, dass, wenn der Mauszeiger auf einem Punkt steht (zB. "Start") und dieser nun hervorgehoben ist, als Zeichen der aktuellen Auswahl, zB. mit einer anderen Schriftfarbe und ich dann mit der Tastatur auf "Laden" gehen will, dass sich die Maus dann nicht einmischt und eben "Laden" ausgewählt wird? Derzeit ist es so, dass ich mit der Maus zB. auf "Laden" fahre, mit der Tastatur aber auf "Start" will, dass der Punkt nur ganz kurz auf "Start" hüpft, da die Maus ja ständig ihre Position überprüft und dadurch die Auswahl wieder auf "Laden" setzt. Ich will aber, dass sich die Maus erst dann wieder einmischt, wenn ich sie bewege =/ Ist das irgendwie möglich?

Danke schon einmal im Voraus!

LG Mike

Kyuraan
29.11.2011, 11:31
Zur 3. Frage würde ich das so angehen, dass du die X und Y Koordinaten der Maus zwischenspeicherst, und diese dann mit den aktuellen Koordinaten vergleichen lässt (mit einem 0.0 Wait Abstand, vllt. auch mehr). Sollten die 'zwischengespeicherten' und die 'aktuellen' Koordinaten NICHT übereinstimmen, wurde der Cursor demnach bewegt.

Diese Abfrage würde ich dann als Bedingung nutzen, ob der Menüpunkt durch den Cursor aktualisiert werden soll.

Mike
29.11.2011, 12:30
@Kyuraan: Ha, das versuche ich dann am Nachmittag mal :) Danke! :)

LG Mike

Mike
29.11.2011, 17:11
Sorry für den Doppelpost, aber zur zweiten Frage habe ich bisher diese zwei Lösungen gefunden:
1. Jede Animationsstufe mehrmals anzeigen lassen um so eine Verzögerung zu erreichen.
2. Mehrere Eventseiten (jede Seite mit einer Stufe der Animation), die durch eine Variable gesteuert werden, die immer ein 0.1 Wait dazwischen hat.

Mehr fallen mir momentan nicht ein. Jetzt habe ich wenigstens auch Zeit, die Lösung zu Frage 3 von Kyuraan zu versuchen ^^

Edit:
Cherry hat mir im Kami auch einen Tipp gegeben, der performancetechnisch der Beste ist ;D

LG Mike

Mike
05.12.2011, 19:15
Erneut eine Frage:

Ich habe fünf Menüpunkte (nennen wie sie einfach 1, 2, 3, 4 und 5 ^^). Wenn ich mit der Maus über einen Menüpunkt (welcher durch ein Picture angezeigt wird) fahre, wird dieser durch ein anderes Picture ersetzt. Das funktioniert bisher auch ohne Probleme. Nur will ich das noch etwas genauer machen, was die Koordinaten angeht.

Punkt 1:
Wenn ich mit der Maus auf der x-Achse zwischen 189 und 293
und auf der y-Achse zwischen 61 und 78 bin, soll zB. die Variable "Menü" auf 1 gesetzt werden.

Punkt 2:
Wenn ich mit der Maus auf der x-Achse zwischen 182 und 300
und auf der y-Achse zwischen 91 und 108 bin, soll zB. die Variable "Menü" auf 2 gesetzt werden.

Punkt 3:
Wenn ich mit der Maus auf der x-Achse zwischen 198 und 283
und auf der y-Achse zwischen 121 und 138 bin, soll zB. die Variable "Menü" auf 3 gesetzt werden.

Punkt 4:
Wenn ich mit der Maus auf der x-Achse zwischen 187 und 294
und auf der y-Achse zwischen 151 und 168 bin, soll zB. die Variable "Menü" auf 4 gesetzt werden.

Punkt 5:
Wenn ich mit der Maus auf der x-Achse zwischen 177 und 304
und auf der y-Achse zwischen 181 und 198 bin, soll zB. die Variable "Menü" auf 5 gesetzt werden.

Bei allen anderen Positionen soll die Varibale "Menü" auf dem Wert bleiben, den sie zuletzt hatte.

Wie mache ich das jetzt am besten? ^^

LG Mike

Cherry
05.12.2011, 22:50
fork if x >= 189 then
...fork if x <= 293 then
......fork if y >= 61 then
.........fork if y <= 78 then
............change var menü = 1
.........end
......end
...end
end

Mike
06.12.2011, 09:53
So hab ich es derzeit sogar ^^ Irgendwo muss ich mich dann aber mit den "Else"-Fällen vertan haben, denn es funktioniert nur Menüpunkt 1 und nachher keiner mehr =/ Obwohl alle fünf Bedingungen gleich aussehen.

LG Mike

Kyuraan
06.12.2011, 10:11
Das mit dem "else" kann man auch lassen. Man kann auch einfach alle 5 Menüpunkte (wie Cherry gezeigt hat) nacheinander abfragen.

if bla
.if bla
..if bla
...if bla
....var = 1
...end
..end
.end
end
if bla
.if bla
..if bla
...if bla
....var = 2
...end
..end
.end
end
usw...

Mike
06.12.2011, 10:12
Okay, super! Danke :)

LG Mike

Mike
19.02.2013, 12:49
Hallo! Ich hole meinen (über ein Jahr alten) Thread mal wieder hoch, weil ich ein paar Probleme habe, die ich nicht hinbekomme.

Die beschriebenen Probleme von oben sind im Grunde immer noch die selben! Ich habe dieses Projekt, an dem ich damals mit dem Mauspatch herumgespielt habe, gelöscht, weil es damals wirklich nur zu Testzwecken war. Daher kann ich mich nicht mehr an die einzelnen Scripte erinnern und das Problem mit dem animierten Mauszeiger kann ich nicht lösen, weil der Tipp, den mir Cherry damals gegegen hat, im Kamikaze-Board stand, welches ja leider nicht mehr existiert.

Meine Probleme sind also:
1. Der Mauszeiger besteht aus mehreren Teilen. Von diesen Teilen soll ein Teil animiert sein. Der Mauszeiger besteht aus insgesamt 4 Bildern (Zeiger selbst + Animation aus 3 Bildern). Das Problem ist, nach wie vor, dass sich durch die Animation und derer Waits (die Animation möchte ich mit Move Picture machen, damit nicht immer jedes Bild neu angezeigt werden muss) der Animierte Teil nachhängt und nicht auf gleicher Höhe mit dem Zeiger selbst bleibt. Der Mauszeiger bleibt immer bestehen und die Animation passiert dadurch, dass immer nur eines der drei Bilder der Animation nicht zu 100% transparent ist.

2. Gibt es eine Möglichkeit zu verhindern, dass der Mauszeiger in eine Ecke rutscht, sondern in der Mitte bleibt? (Dafür habe ich nie eine Lösung gefunden!)

3. Nehmen wir als Beispiel an, ich habe drei Menüpunkte (zB. Start/Laden/Beenden) die ich mit Tastatur UND Maus auswählen kann. Wie kann ich es nun machen, dass, wenn der Mauszeiger auf einem Punkt steht (zB. "Start") und dieser nun hervorgehoben ist, als Zeichen der aktuellen Auswahl, zB. mit einer anderen Schriftfarbe und ich dann mit der Tastatur auf "Laden" gehen will, dass sich die Maus dann nicht einmischt und eben "Laden" ausgewählt wird? Derzeit ist es so, dass ich mit der Maus zB. auf "Laden" fahre, mit der Tastatur aber auf "Start" will, dass der Punkt nur ganz kurz auf "Start" hüpft, da die Maus ja ständig ihre Position überprüft und dadurch die Auswahl wieder auf "Laden" setzt. Ich will aber, dass sich die Maus erst dann wieder einmischt, wenn ich sie bewege =/ Ist das irgendwie möglich? (Die Lösung die mir Kyuraan damals gegeben hat, müsste funktionieren (so wie ich mich erinnere, habe ich das auch irgendwie geschafft). Leider bekomme ich es jetzt aber einfach nicht mehr hin.)

LG Mike

MagicMaker
19.02.2013, 13:11
Das Problem ist, nach wie vor, dass sich durch die Animation und derer Waits (die Animation möchte ich mit Move Picture machen, damit nicht immer jedes Bild neu angezeigt werden muss) der Animierte Teil nachhängt und nicht auf gleicher Höhe mit dem Zeiger selbst bleibt.
Bei allen Bestandteilen einen Nullwait verwenden.


2. Gibt es eine Möglichkeit zu verhindern, dass der Mauszeiger in eine Ecke rutscht, sondern in der Mitte bleibt? (Dafür habe ich nie eine Lösung gefunden!)
Was anderes als ITP benutzen.

Mike
19.02.2013, 13:18
Bei allen Bestandteilen einen Nullwait verwenden.
Dann läuft die Animation zu schnell ab :/


Was anderes als ITP benutzen.
Welche Alternativen gäbe es für den 2k3 + ForceHarmony?

LG Mike

BlueGesyr
19.02.2013, 13:26
Dann läuft die Animation zu schnell ab :/
Dann zeige doch jedes Animationsframe mehrfach an.

Cherry
19.02.2013, 13:33
Power Patch, DynRPG mit Tastatur-&Maus-Plugin, Power Mode 2003

@Animation: Ich würde es so machen:
Am Anfang alle Animationsframes gleichzeitig anzeigen, mit Transparenz 100%.
Bei jedem Frame (= in einem Loop mit Wait 0.0 bzw. in einem Parallel Process ohne Wait 0.0, weil ein PP einen impliziten 1-Frame-Wait am Ende hat):

Eine Variable ("Framecounter") jeden Frame um 1 erhöhen.
Framecounter in eine andere Variable ("Animationsframenummer") kopieren
Animationsframenummer durch Geschwindigkeit der Animation dividieren (in (Spiel)Frames, z.B. 6 für 6/60=0,1 Sekunde pro Animationsframe)
Animationsframenummer modulo Anzahl der Animationsframes rechnen
Alle Animationsframebilder mit Move Picture an die aktuelle Mausposition verschieben (ohne Wartezeit), dabei aber für jedes Animationsframe einen Branch machen ob Animationsframenummer 0 (fürs erste Frame), 1 (fürs zweite Frame), etc. ist - wenn ja, Transparenz 0% verwenden, sonst Transparent 100%.

Pseudocode:

ANZEIGEN DER BILDER (bei Spielstart/Mapwechsel):
Show Picture #1, AniFrame1, 100% Trans
Show Picture #2, AniFrame2, 100% Trans
Show Picture #3, AniFrame3, 100% Trans

AKTUALISIEREN DER BILDER (in einem Loop mit Wait 0.0, oder in einem PP ohne Wait 0.0):
Change Var Framecounter += 1
Branch If Framecounter == 9999999 <<<< Das ist nur ein Überlaufschutz, ansonsten würde der Mauszeiger nach ~46 Stunden Spielzeit nicht mehr animieren
..Change Var Framecounter = 0
End Case
Change Var Animationsframenummer = Framecounter
Change Var Animationsframenummer /= 9 (Geschwindigkeit = 9/60=0,15 Sekunden pro Animationsframe)
Change Var Animationsframenummer Mod= 3 (Anzahl Animationsframes)
Branch If Animationsframenummer == 0
..Move Picture #1, MausX/MausY, 0% Trans
Else Case
..Move Picture #1, MausX/MausY, 100% Trans
End Case
Branch If Animationsframenummer == 1
..Move Picture #2, MausX/MausY, 0% Trans
Else Case
..Move Picture #2, MausX/MausY, 100% Trans
End Case
Branch If Animationsframenummer == 2
..Move Picture #3, MausX/MausY, 0% Trans
Else Case
..Move Picture #3, MausX/MausY, 100% Trans
End Case

Mike
19.02.2013, 13:34
Dann zeige doch jedes Animationsframe mehrfach an.Davon hat mir Cherry damals abgeraten, weil es Performance frisst. Weiß jetzt allerdings nicht mehr, ob das nur auf Show Picture oder auch auf Move Picture bezogen war.

Edit:
Oh, mal sehen was Cherry da schreibt ^^

Edit:
Das muss ich dann Zuhause sofort versuchen, wenn die Zeit reicht.
Bzgl. Power Patch, DynRPG mit Tastatur-&Maus-Plugin, Power Mode 2003: Spielt es eine Rolle, ob ForceHarmony und IKP bereits verwendet werden oder kann ich alles zusätzlich patchen?

LG Mike