PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion der Pfeiltasten deaktivieren


Tolek
14.05.2008, 21:54
Hi alle zusammen,
seit 2 Tagen nun rätsel ich, wie man die Funktion der Pfeiltasten ausschalten kann. Genauer gesagt suche ich einen Weg, wie man die Pfeiltasten anders definieren kann. Ich will, dass der Held sich um 90° nach links dreht, wenn man die linke Taste drückt, um nur ein Beispiel zu nennen.

Danke. :)

Coincidence
14.05.2008, 23:05
Die Bewegung des Helden auszuschalten wird schwierig sein. Natürlich lässt sich die "Esc"-Taste ihrer Funktion berauben, doch die Pfeiltasten ...? Ich hatte mal mit JdS über ein ähnliches Problem in einem Shoot-KS gesprochen, mein Hero sollte an Ort und Stelle stehen bleiben, solange ich die Zielen-Taste gedrückt hielt. War damals nicht viel mit.

Über den Tastenpatch (oder einfacher - mit dem Rm2k3) kannst du derartige Manöver locker auf andere Tasten legen, eine vollwertige WASD-ähnliche Steuerung mit Strafing und all dem hinzulegen sollte mit dem Maker aber schwierig sein.

Coincidence

Eni-Meister
14.05.2008, 23:20
Wieso über Enter Password geht es doch.
Wenn du eine Abfrage startest und keine Befehlreihenfolge dahinter stellst, bleibt der Charakter bei der Bewegung regungslos stehen.

Tolek
14.05.2008, 23:41
Wieso über Enter Password geht es doch.
Wenn du eine Abfrage startest und keine Befehlreihenfolge dahinter stellst, bleibt der Charakter bei der Bewegung regungslos stehen.

Um die Steuerung realisieren zu können, muss ich doch einige Befehle dahinter tun. :)

Über den Tastenpatch (oder einfacher - mit dem Rm2k3) kannst du derartige Manöver locker auf andere Tasten legen, eine vollwertige WASD-ähnliche Steuerung mit Strafing und all dem hinzulegen sollte mit dem Maker aber schwierig sein.

Die Idee mit dem Tastenpatch hatte ich auch schon, nur mein Partner Rythen will einfach nicht andere Tasten im Spiel haben... :rolleyes:

Jan der Superparanoid
14.05.2008, 23:44
Wieso über Enter Password geht es doch.
Wenn du eine Abfrage startest und keine Befehlreihenfolge dahinter stellst, bleibt der Charakter bei der Bewegung regungslos stehen.


Das stimmt nicht.
Ich vermute dieser glaube kommt daher, dass viele Tastenabfragen (Menü, KS) während laufenden Autostart Events geschehen. Diese setzen den Hero fest.
Wenn man die Tastenabfrage in einem PP Event macht, bewegt er sich der Eingabe entsprechend.
(Falls du etwas anderes meintest, habe ich dich falsch verstanden)

@TS:
Sollte also soweit klappen, wenn du die Abfrage in einem Autostart Event machst. Allerdings eignet sich das nicht für ein AKS (Beispiel), da hier die feindlichen NPCs auch festgesetzt werden, wenn das Autostart Event startet.

Lösungsmöglichkeiten für die PP Variante wären Events, die den Hero blockieren.

Genauer in dem Thread zu finden, den Coincydoincy bereits angesprochen hatte:
http://rpga.info/forum/showthread.php?t=44955

Eni-Meister
15.05.2008, 00:59
Das stimmt nicht.
Ich vermute dieser glaube kommt daher, dass viele Tastenabfragen (Menü, KS) während laufenden Autostart Events geschehen. Diese setzen den Hero fest.
Wenn man die Tastenabfrage in einem PP Event macht, bewegt er sich der Eingabe entsprechend.
(Falls du etwas anderes meintest, habe ich dich falsch verstanden)

@TS:
Sollte also soweit klappen, wenn du die Abfrage in einem Autostart Event machst. Allerdings eignet sich das nicht für ein AKS (Beispiel), da hier die feindlichen NPCs auch festgesetzt werden, wenn das Autostart Event startet.

Lösungsmöglichkeiten für die PP Variante wären Events, die den Hero blockieren.

Genauer in dem Thread zu finden, den Coincydoincy bereits angesprochen hatte:
http://rpga.info/forum/showthread.php?t=44955
Ich bin davon ausgeganen, dass man mit dem Autostart-Event arbeitet.
Bei ParallelProcess wäre es klar, dass er sich weiterbewegt. Obwohl man könnte versuchen eine Schleife einzubauen, sodass dass Event garnicht enden kann. Vielleicht wird somit die Bewegung auch ausgeschaltet trotz PP.
Morgen weiß ich mehr, heute hab ich keine Lust mehr das auszutesten, denn es ist 01.00 Uhr morgens <.<

Jan der Superparanoid
15.05.2008, 01:24
Das ne gute Idee :O



Lol, habs grad mal ausprobiert, das Ergebnis ist eigentartig.
Offembar sind Schleifen schneller als Parallel Process Events* (welche ja eig auch sowas wie Schleifen sind).
Geklappt hats aber auch nich. Vielleicht in einer anderen Kombination - eventuell ist das Warten auf Tastendruck auch nicht zu vernachlässigen :)


*
Hatte es ganz simpel mit Auslösen eines Soundeffektes auf allen Pfeiltasten ausprobiert.
In der Schleife begann das Spiel zu ruckeln, im PP nicht.

Cherry
15.05.2008, 06:10
Stell den "echten" Hero irgendwo in eine Ecke, wo er sich nicht bewegen kann und regle das ganze einfach über ein Event, was nur so aussieht wie der Held.

Calestino
15.05.2008, 11:16
Das funktioniert aber nur in Räumen die nicht größer als 20x15 Felder sind.

Wenn ich das richtig verstanden habe, könnte man das Problem mit dem 2k3
ganz einfach lösen?

Cherry
15.05.2008, 11:30
nein, ist es nicht. Mir viele da spontan eine Möglichkeit ein, wenn du diese willst, kann ich sie für dich umsetzen: ein externes Programm, dass, wenn man es per Keypatch aufruft, die Tasten-IDs im RAM vom RPG Maker auf 0 bzw. wieder zurück setzt.

CODE:00456F10 LoadKeyValues proc near ; CODE XREF: CODE:00456A80p
CODE:00456F10 000 push ebx
CODE:00456F11 004 mov ebx, eax
CODE:00456F13 004 mov eax, ebx
CODE:00456F15 004 call sub_00456F00 ; Call Procedure
CODE:00456F15
CODE:00456F1A 004 mov dword ptr [ebx+0Ch], 28h ; Walk down (Down)
CODE:00456F21 004 mov dword ptr [ebx+10h], 62h ; Walk down (Num2)
CODE:00456F28 004 mov dword ptr [ebx+14h], 4Ah ; Walk down (J)
CODE:00456F2F 004 mov dword ptr [ebx+2Ch], 25h ; Walk left (Left)
CODE:00456F36 004 mov dword ptr [ebx+30h], 64h ; Walk left (Num4)
CODE:00456F3D 004 mov dword ptr [ebx+34h], 48h ; Walk left (H)
CODE:00456F44 004 mov dword ptr [ebx+4Ch], 27h ; Walk right (Right)
CODE:00456F4B 004 mov dword ptr [ebx+50h], 66h ; Walk right (Num6)
CODE:00456F52 004 mov dword ptr [ebx+54h], 4Ch ; Walk right (L)
CODE:00456F59 004 mov dword ptr [ebx+6Ch], 26h ; Walk up (Up)
CODE:00456F60 004 mov dword ptr [ebx+70h], 68h ; Walk up (Num8)
CODE:00456F67 004 mov dword ptr [ebx+74h], 4Bh ; Walk up (K)
CODE:00456F6E 004 mov dword ptr [ebx+8Ch], 20h ; Decision (Space)
CODE:00456F78 004 mov dword ptr [ebx+90h], 0Dh ; Decision (Return)
CODE:00456F82 004 mov dword ptr [ebx+98h], 5Ah ; Decision (Z)
CODE:00456F8C 004 mov dword ptr [ebx+0ACh], 1Bh ; Cancel (Esc)
CODE:00456F96 004 mov dword ptr [ebx+0B0h], 60h ; Cancel (Num0)
CODE:00456FA0 004 mov dword ptr [ebx+0B4h], 2Dh ; Cancel (Ins)
CODE:00456FAA 004 mov dword ptr [ebx+0B8h], 58h ; Cancel (X)
CODE:00456FB4 004 mov dword ptr [ebx+0BCh], 43h ; Cancel (C)
CODE:00456FBE 004 mov dword ptr [ebx+0C0h], 56h ; Cancel (V)
CODE:00456FC8 004 mov dword ptr [ebx+0C4h], 42h ; Cancel (B)
CODE:00456FD2 004 mov dword ptr [ebx+0C8h], 4Eh ; Cancel (N)
CODE:00456FDC 004 pop ebx
CODE:00456FDD 000 retn ; Return Near from Procedure
CODE:00456FDD
CODE:00456FDD LoadKeyValues endp


Ich meine hier die ersten 12.

Calestino
15.05.2008, 11:39
Das wäre zu nett^^, wie könnte ich mich denn dafür erkenntlich zeigen?

Cherry
15.05.2008, 11:56
welcher Maker?

Tolek
15.05.2008, 11:58
RPG Maker 2000.

Ich habe die anderen Methoden ausprobiert, aber leider klappt das nicht. Grad bin ich dabei, das Shooting-KS zu analysieren. Könnte eventuell klappen, dann braucht Cherry sich keine Mühe zu machen. :)

Jan der Superparanoid
15.05.2008, 15:46
Stell den "echten" Hero irgendwo in eine Ecke, wo er sich nicht bewegen kann und regle das ganze einfach über ein Event, was nur so aussieht wie der Held.

Das ist eine gute Idee. Man bräuchte den Hero nichtmal in ne Ecke zu stellen, man könnte ihn auch einfach transparent machen.

Cherry
15.05.2008, 16:19
beides meine ich. wenn er nur transparent ist, kann er ja noch immer mit-rumlaufen, was er aber nicht soll.

@TE: mach ich dann mal.

Tolek
15.05.2008, 16:55
Gut, vielen Dank, Cherry. Wann können wir mit der Fertigstellung rechnen?

Cherry
15.05.2008, 17:35
so, done:

http://cherry1.ch.funpic.de/cb

das Tool funktioniert nur mit dieser RPG_RT.EXE! Bei einer anderen wirst du nur Access Violations und Abstürze kriegen!

also: du kopierst CONTROLBLOCK.EXE in den Projektordner
wenn du nun mit dem Keypatch "controlblock.exe -b" aufrufst, werden die Pfeiltasten, Num2/4/6/8 und H, J, K, L für den Maker gesperrt, wenn du "controlblock.exe -u" aufrufst, wieder entsperrt.

mfG Cherry

EDIT: AAAARGHH!!! Ich VOLLTROTTEL! Das sperrt die Pfeiltasten ja KOMPLETT, du kannst sie also auch nicht abfragen!! Mist. Du musst also per Tastenpatch jetzt W, A, S, D oder so dafür verwenden X_x

Tolek
15.05.2008, 18:03
Oh, sieht schlecht aus. xD
Kannst du das nicht i-wie ändern, damit es trotzdem so geht, wie es gehen soll?


EDIT:
Nach Besprechung mit Rythen, steht fest, dass wir den Tastenpatch doch verwenden und die Steuerung auf w,a,s und d verlegen werden. Danke an dich, Cherry. Kriegst nen Crediteintrag, wenn du magst: :P

EDIT2:
Kannst du keine genauere Beschreibung für die Verwendung des Patches geben? Ich komm i-wie nicht klar damit.^^

EDIT3:
Ach, es gibt ja beim Tastenpatch die Funktion fürs Aufrufen externer Programme... Hab ich noch nie ausprobiert. Frohes Ausprobieren wünsch ich mir. :P

Cherry
15.05.2008, 18:18
inwiefern kommst du da nicht klar?

EDIT: AH, k. Wie gesagt: "controlblock.exe -b" aufrufen = sperren, "controlblock.exe -u" aufrufen = entsperren

Tolek
15.05.2008, 21:18
Danke für den Patch. Er funktioniert einwandfrei.
Nur hab ich jetzt ein 2. Problem. Ich muss immer wieder w drücken, damit der Held sich bewegt. Es wäre aber besser, wenn man w gedrückt hielte. Ich hab jetzt nach Lösungen seit ca. 1 Stunde gesucht, aber nichts gefunden...

Eni-Meister
15.05.2008, 22:59
Liegt ja wohl daran, dass der Wert immer wieder auf Null gesetzt wird, oder Cherry?

Tolek
15.05.2008, 23:17
Cherry´s Patch deaktiviert nur die Pfeiltasten, Num(2,4,6,8) und h,j,k,l. Die Taste W wird vom Tastenpatch definiert.
Ich habe jetzt folgenden Code:
<>Variable Ch.[Tastenabfrage] Set MIDI Play Pos. (Ticks)
<>Note: Taste W
<>If Var[Tastenabfrage]=50
<>If Hero - Up Face Direct
<>Move Hero Up
<>Else Case
<>If Hero - Right Face Direct
<>Move Hero right

usw...

In Velsarbor hat Lachsen sowas ähnliches eingebaut. Der Held läuft nur dann, wenn eine Taste gedrückt ist.

Jan der Superparanoid
16.05.2008, 02:57
Kenne mich mit dem Tastenpatch jetz nich aus, aber soein Problem tritt idR auf, wenn bei der Eingabe "warten" eingestellt ist. Wenn das Event parallel immer wieder durchläuft, nicht auf Eingabe wartet und die Variable am Ende auf 0 setzt sollte es funktionieren.

Allerdings hab ich den Tastenpatch nie von innen gesehn, kann auch was anderes sein.

Cherry
16.05.2008, 06:15
Btw - du kannst die Pfeiltasten mit dem Tastenpatch natürlich auch dann verwenden, wenn sie gesperrt sind!

Tolek
16.05.2008, 09:33
Oô, das ist mir jetzt neu.
EDIT: AAAARGHH!!! Ich VOLLTROTTEL! Das sperrt die Pfeiltasten ja KOMPLETT, du kannst sie also auch nicht abfragen!! Mist. Du musst also per Tastenpatch jetzt W, A, S, D oder so dafür verwenden X_x
Btw - du kannst die Pfeiltasten mit dem Tastenpatch natürlich auch dann verwenden, wenn sie gesperrt sind!

Was denn jetzt?^^

Cherry
16.05.2008, 13:20
mit dem keypatch kannst du sie verwenden, mit der Makereigenen Tastenabfrage Enter Password nicht.

Tolek
16.05.2008, 14:32
[execute]
Action=execProgram
Command=controlblock.exe -b
next=hoch

[hoch]
Action=registerKeyDownEvent
Key=Hoch
Value=50
Next=links

[links]
Action=registerKeyDownEvent
Key=Links
Value=51
Next=runter

[runter]
Action=registerKeyDownEvent
Key=Runter
Value=52
Next=rechts

[rechts]
Action=registerKeyDownEvent
Key=Rechts
Value=53
Next=
Das steht in der "script.wav" des Keypatches. Eigentlich müsste es so gehen, aber im Maker bleibt der Held immobil.

Cherry
16.05.2008, 14:41
Das steht in der "script.wav" des Keypatches. Eigentlich müsste es so gehen, aber im Maker bleibt der Held immobil.

Hast du die Beschreibung gelesen?

"(rechts)" und so weiter.
Hättest du den Keypatch Wizard, den ich dir in diesem Fall empfohlen habe, verwendet, wäre das nicht passiert.

mfG Cherry

Tolek
16.05.2008, 14:47
Natürlich, sonst würde es auch vorhin nicht klappen.

Edit:
Warte, ich glaub, ich hab den Fehler gefunden... Muss ihn noch korrigieren.

Edit: Nein, doch nicht.
Ich hab eben noch die Steuerung für w,a,s,d ausprobiert und diese funktioniert. Nur die Pfeiltasten wollen nicht gehen. Liegt es evtl daran, dass in der "script.wav" was falsch geschrieben wurde. Z.B. "hoch" oder "(Hoch)" anstelle "Hoch"?

Cherry
16.05.2008, 16:41
es heißt "(hoch)" und nicht "hoch" weil das eine Sondertaste ist. Genauso "(rechts)", "(links)" und "(runter)".

Tolek
16.05.2008, 16:56
Ok, danke. Ich probiere das aus, wenn ich wieder zuhause bin. AFK für 3 Tage. (Tschüss, Duci und Rythen. :P)

Tolek
19.05.2008, 18:53
Bin wieder zurück und habe eben die Pfeiltasten ausprobiert. Es geht. :) Nur besteht weiterhin das Problem, dass ich immer wieder "hoch" drücken muss anstatt einfach diese Taste festzuhalten, damit der Held einen Schritt nach vorne macht.

Mastermind
03.06.2008, 13:31
Es gibt eine absolut narrensichere Methode, wie deine Pfeiltasten 100%ig deaktiviert werden: Benutze ein Auto-Start-Event.

Während ein Autostart-Event läuft (es kann sich dabei auch um eine Endlosschleife handeln, in der nix anderes gemacht wird, als 0.1 sec zu warten) sind alle Pfeiltasten deaktiviert - du kannst sie aber trotzdem noch per "Key Input Processing" abfragen. Auf diese Weise kannst du dir ganz leicht eine an- und ausschlatbare Steuerung per Switch zusammenstellen. Ist der Switch AN, so läuft das ParallelProcess-Event, welches die Steuerung enthält. Ist der Switch AUS, läuft es nicht - so einfach ist das.

Probleme dabei:
- sämtliche On-Touch-Events funktionieren nicht, während ein Auto-Start-Event läuft
- die Bewegungen, die du bei einem Event unten links im Event-Editor einstellst, werden NICHT mehr abgespielt während ein Auto-Start-Event läuft.

Im Klartext heißt das: wenn du planst ein AKS zu machen, dann muss die Steuerung der Gegner (also wie sie herumlaufen sollen) von einem ParallelProcess-Event aus gesteuert werden. Dieses Event kann aber ohne Weiteres auch der Gegner selbst sein, das ist also kein Problem.
Ein echtes Problem stellen hingegen On-Touch-Events dar. Deren Position musst du nämlich in einer jeweils eigenen X- und Y-Variable speichern und diese dann permanent mit den aktuellen Heldenkoordinaten abgleichen, was äußerst leistungsintensiv ist - daher ist das nicht die optimale Methode.


Der Mittelweg aus beidem besteht darin, ein Auto-Start-Event zu erstellen, welches du beispielsweise "Steuerung sperren" nennen könntest, welches per Switch aktiviert wird. Wann immer die Steuerung deaktiviert sein soll, schaltest du den Switch AN, sonst AUS. Aber Vorsicht! Während der Zeit, in der der Switch dann auf AN ist, gelten dieselben Beschränkungen wie im Beispiel oben!

Für weitere Tipps stehe ich jederzeit gern zur Verfügung :)


Greetz!




Mastermind

Cherry
03.06.2008, 15:36
Durch meinen Patch wurde dieses Problem bereits umgangen. Ob die Pfeiltasten nun per Maker oder per Keypatch abgefragt werden, ist egal.

Man kann mit dem KP den selben Effekt wie mit Key Input Processing erreichen, wenn man folgendes macht (eigentlich eh "watschneinfach", wie man bei uns sagt):

(Nehmen wir an, 10 bedeutet, Pfeil-Rauf wurde gedrückt, 11 bedeutet losgelassen)

--- PSEUDOCODE ---

if Vari_Keypatch == 10 then
Vari_PfeilRaufGedrückt = 1
elseif Var_Keypatch == 11
Vari_PfeilRaufGedrückt = 0
end

...und das selbe mit den anderen Pfeiltasten XD

Tolek
09.06.2008, 17:07
Ach du kacke, hab erst jetzt gemerkt, dass hier reingeschrieben wurde. xD
Diesen Code hab ich schon vor einigen Wochen rausgefunden, Cherry. Bei mir sieht er so aus:
Fork Condition: Var[0001]TastenID = 49:
ChangeSwitch: Oben gedrückt? SET ON
End Case;
Fork Condition: Var[0001]TastenID = 50:
ChangeSwitch: Oben gedrückt? SET OFF
End Case;

Fork Condition: Switch[0001]Oben gedrückt? Set ON
Fork Condition: HeroDirectionUP
Move Hero UP
Else Case
Fork Condition: HeroDirectionLEFT
Move Hero LEFT
Else Case
usw.

End Case;

Fork Condition: Var[0001]TastenID = 51;
Move Hero 90° LEFT
Else Case
usw.
End Case

Wenn ich auf die Taste drücke, geht der Held los und ich kann ihn nicht mehr stoppen. Das ist das einzige Problem.

Mastermind
10.06.2008, 19:42
Also bei aller Freundschaft, Leute, meint ihr nicht dass meine Methode zwar vielleicht 5min mehr Aufwand beim Erstellen, dafür aber "narrensicher" und letztendlich einfacher anzuwenden ist? Wollte das nur mal anmerken, wenn ihr aber gern über Alternativen redet, ist das natürlich auch in Ordnung ;)