PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Button-Input-Funktions-Frage



K.L.R.G.
09.04.2007, 16:33
Also es geht um die Passwort-Funktion beim rpgmaker XP ... Ich wollte mal Fragen wie die genau funktioniert, bzw. welche Variablen für welche Tasten stehen ... ne Liste der jeweiligen Variablen für die jeweilige Taste wäre gut .... (bisher hab ich nur die Pfeiltasten raus)

Dabei möchte ich vor allem auch noch mal gerne wissen welche Möglichkeiten man insgesamt damit hat ... ist es möglich die gesamte Tastatur in Variablen wieder zu geben? Also zum einen welche Tasten kann man mit der Button-Input-Processing-Funktion einstellen und wie kann man die Grundtastatur-Belegung ohne größere Rubykenntnisse ändern (denn die besitze ich noch nicht)???

Also mir schwebt vor in meinem Spiel Die Pfeiltasten so zu belassen, dafür aber die Entertasten-Funktion auf Num5, Escape-Funktion auf Num 6 und Num 4 und 8 für aufrufbare Menüs, oder laufen oder sowas einzusetzten ...

Wäre sehr dankbar wenn ihr mir helfen könntet!!!

Kelven
09.04.2007, 17:40
Du kannst im Editor mit F1 eine Beschreibung der Funktion aufrufen, dort stehen die Zahlenwerte der Buttons (die an die Tasten eines Gamepads angelehnt sind, wenn ich mich nicht irre). Für welche Taste auf der Tastatur diese Buttons stehen, erfährst du in der Hilfedatei (etwas umständlich, aber man kann die Buttonbelegung selber ändern).

K.L.R.G.
09.04.2007, 19:47
Die Zahlen hab ich inzwischen raus ... die Frage is jetzt nur wie ich jetzt im Maker die tasten so ändern wie ich die haben will?:confused: also was muss ich tun um z.B. Num1-9 belegen zu können? Ruby?

Wenn ja wo und wie? (wie gesagt ... mit Ruby kenn ich mich noch gar nicht aus)

bluedragon05
10.04.2007, 18:10
Wenn man ein Projekt startet, kann man mit F1 ein Optionsfenster aufrufen, während das Spiel läuft. Damit lässt sich auch die Tastenbelegung verändern.
Damit kann aber jeder Spieler für sich die Tasten verändern.

K.L.R.G.
10.04.2007, 20:31
@bluedragon05:
Ich will aber ne eigene Spielsteuerung .... also quasi dem Spieler ne Spielsteuerung vor die nase setzen ... wenn dem das net passt kann der immer noch umstellen, aber erstma will ich ne völlig eigene, manuelle Steuerung via Pfeiltasten und Num 4, 5, 6 und 8 hinkriegen .....

Ich hatte mir gedacht das so zu machen:
Num4: laufen
Num5: sprechen/Aktionstaste etc.
Num6: Esc/ABbruch etc.
Num8: Menü ...
Pfeiltasten: Richtung

im Notfall nehm ich halt das im maker vorgegebene mit "w" "a" "s" "d" ..., aber ich würd das gern mit den Num-Tasten machen ....

Müsste nur wissen wie ...

-KD-
11.04.2007, 00:33
Wenn du mit den Standard-Tasten des Makers nicht zufrieden bist, musst du dir eben ein Tastenscript besorgen. Das gebräuchlichste ist ja von Cybersam. Allerdings finde ich die Version von Astro_Mech schöner - sie benötigt allerdings SDK (http://www.creationasylum.net/index.php?showtopic=7481).


#===============================================================================
# ** Keyboard Script v2 - This script was first created by Cybersam and she
# deserves most of the credit, all I did was add a few
# functions. (Astro_Mech says)
#-------------------------------------------------------------------------------
# Author Cybersam
# Version 2.0
# Date 11-04-06
# Edit Astro_mech
#===============================================================================
#-------------------------------------------------------------------------------
# Begin SDK Enabled Check
#-------------------------------------------------------------------------------
SDK.log("Input", "Cybersam", 2, "11.04.06")

module Input
if SDK.state("Input") == true
#--------------------------------------------------------------------------
# * Variable Setup
#--------------------------------------------------------------------------
@keys = []
@pressed = []
Mouse_Left = 1
Mouse_Right = 2
Mouse_Middle = 4
Back= 8
Tab = 9
Enter = 13
Shift = 16
Ctrl = 17
Alt = 18
Esc = 27
Space = 32
Numberkeys = {}
Numberkeys[0] = 48 # => 0
Numberkeys[1] = 49 # => 1
Numberkeys[2] = 50 # => 2
Numberkeys[3] = 51 # => 3
Numberkeys[4] = 52 # => 4
Numberkeys[5] = 53 # => 5
Numberkeys[6] = 54 # => 6
Numberkeys[7] = 55 # => 7
Numberkeys[8] = 56 # => 8
Numberkeys[9] = 57 # => 9
# NumberUpKeys = {}
# NumberUpKeys[0] = "!"
# NumberUpKeys[1] = "@"
# NumberUpKeys[2] = "#"
# NumberUpKeys[3] = "$"
# NumberUpKeys[4] = "%"
# NumberUpKeys[5] = "^"
# NumberUpKeys[6] = "&"
# NumberUpKeys[7] = "*"
# NumberUpKeys[8] = "("
# NumberUpKeys[9] = ")"
Numberpad = {}
Numberpad[0] = 45
Numberpad[1] = 35
Numberpad[2] = 40
Numberpad[3] = 34
Numberpad[4] = 37
Numberpad[5] = 12
Numberpad[6] = 39
Numberpad[7] = 36
Numberpad[8] = 38
Numberpad[9] = 33
Letters = {}
Letters["A"] = 65
Letters["B"] = 66
Letters["C"] = 67
Letters["D"] = 68
Letters["E"] = 69
Letters["F"] = 70
Letters["G"] = 71
Letters["H"] = 72
Letters["I"] = 73
Letters["J"] = 74
Letters["K"] = 75
Letters["L"] = 76
Letters["M"] = 77
Letters["N"] = 78
Letters["O"] = 79
Letters["P"] = 80
Letters["Q"] = 81
Letters["R"] = 82
Letters["S"] = 83
Letters["T"] = 84
Letters["U"] = 85
Letters["V"] = 86
Letters["W"] = 87
Letters["X"] = 88
Letters["Y"] = 89
Letters["Z"] = 90
Fkeys = {}
Fkeys[1] = 112
Fkeys[2] = 113
Fkeys[3] = 114
Fkeys[4] = 115
Fkeys[5] = 116
Fkeys[6] = 117
Fkeys[7] = 118
Fkeys[8] = 119
Fkeys[9] = 120
Fkeys[10] = 121
Fkeys[11] = 122
Fkeys[12] = 123
Collon = 186 # => \ |
Equal = 187 # => = +
Comma = 188 # => , <
Underscore = 189 # => - _
Dot = 190 # => . >
Backslash = 191 # => / ?
Lb = 219
Rb = 221
Quote = 222 # => '"
#-------------------------------------------------------------------------------
USED_KEYS = [Mouse_Left, Mouse_Right, Mouse_Middle]
#-------------------------------------------------------------------------------
module_function
#--------------------------------------------------------------------------
# * Check (key)
#--------------------------------------------------------------------------
def triggerd?(key)
Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1 # key 0
end
#--------------------------------------------------------------------------
def check(key)
Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1 # key 0
end
#-----------------------------------------------------------------------
# * Pressed ? (key)
#--------------------------------------------------------------------------
def pressed?(key)
return true unless Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)
return false
end
#--------------------------------------------------------------------------
# * Mouse Update
#--------------------------------------------------------------------------
def mouse_update
@used_i = []
for i in USED_KEYS
x = check(i)
if x == true
@used_i.push(i)
end
end
end
#--------------------------------------------------------------------------
# * Short Write C
#--------------------------------------------------------------------------
def self.C
self.trigger?(C)
end
#--------------------------------------------------------------------------
# * Short Write B
#--------------------------------------------------------------------------
def self.B
self.trigger?(B)
end
#--------------------------------------------------------------------------
# * Short Write A
#--------------------------------------------------------------------------
def self.A
self.trigger?(A)
end
#--------------------------------------------------------------------------
# * Short Write Down
#--------------------------------------------------------------------------
def self.Down
self.trigger?(DOWN)
end
#--------------------------------------------------------------------------
# * Short Write Up
#--------------------------------------------------------------------------
def self.Up
self.trigger?(UP)
end
#--------------------------------------------------------------------------
# * Short Write Right
#--------------------------------------------------------------------------
def self.Right
self.trigger?(RIGHT)
end
#--------------------------------------------------------------------------
# * Short Write Left
#--------------------------------------------------------------------------
def self.Left
self.trigger?(LEFT)
end
#--------------------------------------------------------------------------
# * Anykey pressed? ( A or B or C or Down or Up or Right or Left )
#--------------------------------------------------------------------------
def self.Anykey
if A or B or C or Down or Up or Right or Left
return true
else
return false
end
end
end
end

#-------------------------------------------------------------------------------
# End SDK Enabled Check
#-------------------------------------------------------------------------------

Zum Abfragen nutzt du dann wie gewohnt ein Conditional Branch, wählst dort allerdings nicht Button sondern Script aus und gibst ein:

Input.pressed?(Numberpad[0]) or Input.pressed?(Numberkeys[0])
(statt 0 kannst du natürlich auch andere Tasten abfragen)

K.L.R.G.
11.04.2007, 10:38
@-KD-:
Danke, das klingt vielversprechend ...

Nur was muss ich mit diesem SDK-Script machen? Muss ich den separat in die Scriptliste einfügen, oder was muss ich damit machen? (ich kenne mich halt noch net mit Ruby und so aus)

Also ich hab diese SDk-Scripte in die Scriptliste eingefügt, aber irgendwie klappt das nicht ... da kommt ne Fehlermeldung das SDK-Skripte fehlen oder so ...

danach hab ich nur SDK Part I eingefügt und da hat der auch gemeckert ...

Ich brauch da mal ne wirklich Idiotensichere Erklärung ...

-KD-
11.04.2007, 11:14
Das SDK musst du über Main und unter allen Standard-Scripten einfügen. Alle weiteren selbst hinzugefügten Scripte müssen unter das SDK. Jedoch laufen mit SDK nur noch SDK-Scripte, fast alle anderen Scripten dürften nicht mehr laufen.

Und wenn ich es mir recht überlege, ist es ziemlicher Schwachsinn für ein Input-Script SDK zu verlangen oO

Für diesen Code statt dem anderen ein, dann benötigst du kein SDK mehr:


#===============================================================================
# ** Keyboard Script v2 - This script was first created by Cybersam and she
# deserves most of the credit, all I did was add a few
# functions. (Astro_Mech says)
#-------------------------------------------------------------------------------
# Author Cybersam
# Version 2.0
# Date 11-04-06
# Edit Astro_mech
#===============================================================================
module Input
#--------------------------------------------------------------------------
# * Variable Setup
#--------------------------------------------------------------------------
@keys = []
@pressed = []
Mouse_Left = 1
Mouse_Right = 2
Mouse_Middle = 4
Back= 8
Tab = 9
Enter = 13
Shift = 16
Ctrl = 17
Alt = 18
Esc = 27
Space = 32
Numberkeys = {}
Numberkeys[0] = 48 # => 0
Numberkeys[1] = 49 # => 1
Numberkeys[2] = 50 # => 2
Numberkeys[3] = 51 # => 3
Numberkeys[4] = 52 # => 4
Numberkeys[5] = 53 # => 5
Numberkeys[6] = 54 # => 6
Numberkeys[7] = 55 # => 7
Numberkeys[8] = 56 # => 8
Numberkeys[9] = 57 # => 9
# NumberUpKeys = {}
# NumberUpKeys[0] = "!"
# NumberUpKeys[1] = "@"
# NumberUpKeys[2] = "#"
# NumberUpKeys[3] = "$"
# NumberUpKeys[4] = "%"
# NumberUpKeys[5] = "^"
# NumberUpKeys[6] = "&"
# NumberUpKeys[7] = "*"
# NumberUpKeys[8] = "("
# NumberUpKeys[9] = ")"
Numberpad = {}
Numberpad[0] = 45
Numberpad[1] = 35
Numberpad[2] = 40
Numberpad[3] = 34
Numberpad[4] = 37
Numberpad[5] = 12
Numberpad[6] = 39
Numberpad[7] = 36
Numberpad[8] = 38
Numberpad[9] = 33
Letters = {}
Letters["A"] = 65
Letters["B"] = 66
Letters["C"] = 67
Letters["D"] = 68
Letters["E"] = 69
Letters["F"] = 70
Letters["G"] = 71
Letters["H"] = 72
Letters["I"] = 73
Letters["J"] = 74
Letters["K"] = 75
Letters["L"] = 76
Letters["M"] = 77
Letters["N"] = 78
Letters["O"] = 79
Letters["P"] = 80
Letters["Q"] = 81
Letters["R"] = 82
Letters["S"] = 83
Letters["T"] = 84
Letters["U"] = 85
Letters["V"] = 86
Letters["W"] = 87
Letters["X"] = 88
Letters["Y"] = 89
Letters["Z"] = 90
Fkeys = {}
Fkeys[1] = 112
Fkeys[2] = 113
Fkeys[3] = 114
Fkeys[4] = 115
Fkeys[5] = 116
Fkeys[6] = 117
Fkeys[7] = 118
Fkeys[8] = 119
Fkeys[9] = 120
Fkeys[10] = 121
Fkeys[11] = 122
Fkeys[12] = 123
Collon = 186 # => \ |
Equal = 187 # => = +
Comma = 188 # => , <
Underscore = 189 # => - _
Dot = 190 # => . >
Backslash = 191 # => / ?
Lb = 219
Rb = 221
Quote = 222 # => '"
#-------------------------------------------------------------------------------
USED_KEYS = [Mouse_Left, Mouse_Right, Mouse_Middle]
#-------------------------------------------------------------------------------
module_function
#--------------------------------------------------------------------------
# * Check (key)
#--------------------------------------------------------------------------
def triggerd?(key)
Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1 # key 0
end
#--------------------------------------------------------------------------
def check(key)
Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1 # key 0
end
#-----------------------------------------------------------------------
# * Pressed ? (key)
#--------------------------------------------------------------------------
def pressed?(key)
return true unless Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)
return false
end
#--------------------------------------------------------------------------
# * Mouse Update
#--------------------------------------------------------------------------
def mouse_update
@used_i = []
for i in USED_KEYS
x = check(i)
if x == true
@used_i.push(i)
end
end
end
#--------------------------------------------------------------------------
# * Short Write C
#--------------------------------------------------------------------------
def self.C
self.trigger?(C)
end
#--------------------------------------------------------------------------
# * Short Write B
#--------------------------------------------------------------------------
def self.B
self.trigger?(B)
end
#--------------------------------------------------------------------------
# * Short Write A
#--------------------------------------------------------------------------
def self.A
self.trigger?(A)
end
#--------------------------------------------------------------------------
# * Short Write Down
#--------------------------------------------------------------------------
def self.Down
self.trigger?(DOWN)
end
#--------------------------------------------------------------------------
# * Short Write Up
#--------------------------------------------------------------------------
def self.Up
self.trigger?(UP)
end
#--------------------------------------------------------------------------
# * Short Write Right
#--------------------------------------------------------------------------
def self.Right
self.trigger?(RIGHT)
end
#--------------------------------------------------------------------------
# * Short Write Left
#--------------------------------------------------------------------------
def self.Left
self.trigger?(LEFT)
end
#--------------------------------------------------------------------------
# * Anykey pressed? ( A or B or C or Down or Up or Right or Left )
#--------------------------------------------------------------------------
def self.Anykey
if A or B or C or Down or Up or Right or Left
return true
else
return false
end
end
end

K.L.R.G.
11.04.2007, 18:11
Nochmals danke ...
Jetzt gibt es nur ein Problem ... Wo in der Scriptliste muss ich dieses Script eintragen? Bzw. was muss ich eingeben um den aufzurufen ... Ich hab den jetzt auf die erste Postion unter "main" gesetzt, kann den aber nicht aufrufen, ohne das der maker abstürzt ....

DusK
11.04.2007, 18:47
Das SDK musst du über Main und unter allen Standard-Scripten einfügen.

Wenn du es unter Main einfügst stürzt das ganze Spiel ab. Ist meines Wissens nach bei jedem Script so. Da lag also dein Fehler ;)

-KD-
11.04.2007, 19:59
Im Main-Script wird das Spiel praktisch gestartet. Alles was unter Main ist, wird erst beim Beenden des Spiels aufgerufen ^^

Daher müssen Scripte stets über Main eingefügt werden.

K.L.R.G.
12.04.2007, 08:59
So, hab jetzt alles richtig gemacht ... über main ... unter den anderen Scripts. ... und trotzdem krieg ich diese Fehlermeldung ...:\

http://img120.imageshack.us/img120/8125/fehlergp4.png

Kelven
12.04.2007, 11:35
In der letzten Zeile dürfte nur ein "end" stehen. Steht bei dir dort noch etwas anderes? Z.B. das [/code] aus dem Posting. ;)

K.L.R.G.
12.04.2007, 15:39
Gut, Fehlerquelle 1 ist ausgemerzt ... ich hatte tatsächlich nen kleinen Fehler beim kopieren gemacht (nein es war nicht [/code], aber irgendwie hab ich da ausversehen was mit reinkopiert ...:p )

Nun klappt es ... theoretisch ... aber sobald ich ne Button-Input-Abfrage mache bricht das Ding jetzt zusammen mit folgender Fehlermeldung:

http://img218.imageshack.us/img218/1209/fehlernt2.png

Kelven
12.04.2007, 15:51
Wie sieht denn deine Buttonabfrage aus?

K.L.R.G.
12.04.2007, 16:03
Input.pressed?(Numberpad[0]) or Input.pressed?(Numberkeys[0])

Erst die Button Input-Abfrage ... hab dann den Code in ner Fork eingegeben .... eigentlich sollte dann n text erscheinen wenn ich 0 drücke, stattdessen kommt immer diese Fehlermeldung ...

ani-kun
12.04.2007, 16:42
mach die ganze variablendeklaration in ne funktion (def initialize) und initialisier die klasse mit WieAuchImmerDieKlasseJetztHeißt.new ...

edit: glaub nämlich nicht, dass in Ruby variablen initialisiert werden können, wenns nicht in ner funktion stehen^^

K.L.R.G.
12.04.2007, 16:58
@ani-kun:
Ähm ... bitte nochmal in TotalN00b-Verständlich bitte ...:confused: http://www.multimediaxis.de/images/smilies/old/sm_12.gif :confused:

ani-kun
12.04.2007, 17:06
aaaaaaaalso xD

du packst alles ab "Variable Setup" bis "module_functions" in eine funktion:

def initialize
...
end

dort wo "..." steht packst du das zeug rein (erste zeile sollte "@keys = []" sein, letzte sollte "USED_KEYS = [Mouse_Left, Mouse_Right, Mouse_Middle]" sein)

dann musst du die ganze klasse noch initialisieren, einfach in der Klasse Main vor "$scene = Scene_Title.new" ne zeile mit zb. "$input = Input.new"

allerdings musst du dann deine button abfrage mit "$input.pressed?(etc)" machen ...

edit: kann natürlich auch total falsch liegen, habs nicht getestet, aber das diktiert mir zumindest mein programmiererverständnis^^

Kelven
12.04.2007, 17:43
Das ist aber ein module und keine Klasse. Ich weiß nicht inwieweit es da Unterschiede bzgl. der Initialisierung gibt. Wobei ich mich gerade frage, was dieses "module_function" eigentlich ist.

ani-kun
12.04.2007, 17:48
stimmt allerdings oO;;

nichts desto trotz hat er ja ne fehlermeldung, dass das ding nicht initialisiert ist ... also muss es erst irgendwie initialisiert werden, und das wort module durch class zu ersetzen ist ja auch keine hexerei^^

Kelven
12.04.2007, 17:57
Ok, ani-kun hat Recht, dass da was mit der Initialisierung nicht stimmt. Wenn ich anstelle von Numberpad[0] den Zahlenwert (45) in die Abfrage packe, passiert der Fehler nicht.

Edit:
Ich hab mal ein wenig herumexperimentiert. Da ich mich mit Ruby kaum auskenne, kann ich nicht erklären wieso es geht, aber es sollte folgendermassen klappen:

Du packst vor die Methode pressed? ein "self.". Dann rufst du die Abfrage z.B. so auf:



if Input.pressed?(Input::Numberkeys[0])


Der Unterschied zu vorher ist das "Input::" vor der Konstante.

-KD-
12.04.2007, 20:09
Sry, hab mich oben verschrieben. Das vergess ich immer XD

Ein Modul ist eine "Klasse" die nicht initialisiert werden kann. Im Prinzip nur ein Paket mit verschiedenen Methoden und Konstanten. Damit man auf eine Konstante eines Moduls zugreifen kann, schreibt man
Modul::Konstante
(bei einer Klasse genauso)

module_function ist eine Methode der Klasse Module, welche alle Instanzmethoden eines Moduls in Modulmethoden umwandelt. Daher ist es nicht nötig vor eine Methode self. zu schreiben, das erledigt module_function schon von alleine (falsch ist es natürlich nicht. Ich persönlich finde die Methode auch doof und mache das lieber über self.methodenname XD)

Modulmethoden und Klassenmethoden können ausgeführt werden, ohne das die Klasse (oder das Modul) eine Instanz erzeugen müssen. Typisches Beispiel die Klasse File.
File.open ist eine Methode, die ausgeführt werden kann, ohne das eine Instanz der Klasse File erzeugt wird.

Also kurz gesagt: Hör auf Kelvin XD Einfach ein Input:: davorschreiben.