shimassy
01.02.2010, 16:41
Hallo!
1.)
Ich habe vor kurzem versucht, eine Steuerung per WASD (zusätzlich zu den Pfeiltasten) in mein Projekt einzubauen.
Momentan habe ich aber auf die äußerst unelegante und teilweise nicht recht funktionieren wollende Methode zurückgegriffen, mit diesem
#===================================
# Keyboard
#---------------------------------------------------------------
# Created by Corbaque and TLN - 09/07/07
#---------------------------------------------------------------
# English conversion by Corbaque
#---------------------------------------------------------------
# Methods :
# - press
# - trigger
# - dbtrigger
# - repeat => press 1 of 3
# - hold => bloc note press
# - release
# - active => like caps lock
# - getpress
#---------------------------------------------------------------
# Update :
# - Key.update
#=> Classical
# - Key.update("enter", "esc")
#=> Only enter and escap
# - Key.update(*$arraykeys)
#=> Only the keys included on $arraykeys
#===> Think to define it before using :P
#---------------------------------------------------------------
# QWERTY version
#===================================
# Win32API constant
Key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
State = Win32API.new("user32","GetKeyState",['i'],'i')
GetPress = Win32API.new('user32', 'keybd_event', ['i', 'i', 'i'], ' ')
#---------------------------------------------------------------
# Pressed ?
#---------------------------------------------------------------
def press(n)
R[n][0]
end
#---------------------------------------------------------------
# Clicked ?
#---------------------------------------------------------------
def trigger(n)
R[n][1] >= 1
end
#---------------------------------------------------------------
# Double Clicked ?
#---------------------------------------------------------------
def dbtrigger(n)
R[n][1] == 2
end
#---------------------------------------------------------------
# Pressed ?, false, false, false, Pressed ?...
#---------------------------------------------------------------
def repeat(n)
R[n][2] %= 4; R[n][2].zero? and R[n][0]
end
#---------------------------------------------------------------
# Like when you write anything with pressing
#---------------------------------------------------------------
def hold(n)
(R[n][2] % 20).zero? and R[n][0]
end
#---------------------------------------------------------------
# Released ?
#---------------------------------------------------------------
def release(n)
R[n][1] == -1
end
#---------------------------------------------------------------
# Actived ? (Like caps lock)
#---------------------------------------------------------------
def active(n)
State.call(TAB_KEY[n]) & 1 == 1
end
#---------------------------------------------------------------
# Get pressing
#---------------------------------------------------------------
def getpress(*a)
a.each do |n|
GetPress.call(TAB_KEY[n], 0, 0)
end
a.each do |n|
GetPress.call(TAB_KEY[n], 0, 2)
end
end
#---------------------------------------------------------------
# Update keys state
#---------------------------------------------------------------
class Keys
def Keys.update(*tab)
if tab != []
tab.each do |n|
m = R[n][0]
pr = Key.call(TAB_KEY[n]) != 0
tr = m == pr ? 0 : (pr ? (R[n][2].between?(1, 9) ? 2 : 1) : -1)
count = tr > 0 ? 0 : [R[n][2]+1, 20].min
R[n] = [pr, tr, count]
end
else
TAB_KEY.keys.each do |n|
m = R[n][0]
pr = Key.call(TAB_KEY[n]) != 0
tr = m == pr ? 0 : (pr ? (R[n][2].between?(1, 9) ? 2 : 1) : -1)
count = tr > 0 ? 0 : [R[n][2]+1, 20].min
R[n] = [pr, tr, count]
end
end
end
end
# All Keys
TAB_KEY = {
"click gauche" => 1,
"sg" => 1,
"click droit" => 2,
"sd" => 2,
"click milieu" => 4,
"sm" => 4,
"del" => 8,
"tab" => 9,
"enter" => 13,
"shift" => 16,
"ctrl" => 17,
"alt" => 18,
"pause" => 19,
"caps lock" => 20,
"esc" => 27,
"space" => 32,
"pg up" => 33,
"pg down" => 34,
"end" => 35,
"home" => 36,
"left" => 37,
"up" => 38,
"right" => 39,
"down" => 40,
"impr" => 44,
"insert" => 45,
"suppr" => 46,
"0" => 48,
"1" => 49,
"2" => 50,
"3" => 51,
"4" => 52,
"5" => 53,
"6" => 54,
"7" => 55,
"8" => 56,
"9" => 57,
"a" => 65,
"b" => 66,
"c" => 67,
"d" => 68,
"e" => 69,
"f" => 70,
"g" => 71,
"h" => 72,
"i" => 73,
"j" => 74,
"k" => 75,
"l" => 76,
"m" => 77,
"n" => 78,
"o" => 79,
"p" => 80,
"q" => 81,
"r" => 82,
"s" => 83,
"t" => 84,
"u" => 85,
"v" => 86,
"w" => 87,
"x" => 88,
"y" => 89,
"z" => 90,
"lwin" => 91,
"rwin" => 92,
"apps" => 93,
"n0" => 96,
"n1" => 97,
"n2" => 98,
"n3" => 99,
"n4" => 100,
"n5" => 101,
"n6" => 102,
"n7" => 103,
"n8" => 104,
"n9" => 105,
"n*" => 106,
"+" => 107,
"num" => 108,
"n-" => 109,
"n." => 110,
"n/" => 111,
"F1" => 112,
"F2" => 113,
"F3" => 114,
"F4" => 115,
"F5" => 116,
"F6" => 117,
"F7" => 118,
"F8" => 119,
"F9" => 120,
"F10" => 121,
"F11" => 122,
"F12" => 123,
"vernum" => 144,
"verdefil" => 145,
"lmaj" => 160,
"rmaj" => 161,
"lctrl" => 162,
"rctrl" => 163,
"lalt" => 164,
"ralt" => 165,
"]" => 186,
"=" => 187,
";" => 188,
"," => 190,
"." => 191,
"'" => 192,
"-" => 219,
'\\' => 220,
"[" => 221,
"`" => 222,
"/" => 223,
"|" => 226
}
R = TAB_KEY.clone
R.keys.each { |k| R[k] = [false, false, 10]}
und 2 kleinen Codeschnipseln in Game_Player und Window_Selectable so eine Steuerung einzubauen, allerdings funktioniert das teilweise nicht (z.B. im KS, wo 2 Commandwindows gleichzeitig angezeigt werden, aber immer nur eines aktiv ist, funktioniert die WASD-Steuerung nur bei einem der beiden)
Deshalb wollte ich fragen, ob es eine einfachere Möglichkeit gibt, so eine Steuerung zu implementieren.
2.)
Kann man in Ruby irgendwie aus einer fremden Klasse auf Methoden einer anderen Klasse zugreifen?
3.)
Wie kann ich den Helden per Ruby auf eine andere Map teleportieren lassen?
Habe mir gedacht einfach folgenden Code benutzen, aber das funktioniert leider nicht...
$game_temp.player_new_map_id = 1
$game_temp.player_new_x = 1
$game_temp.player_new_y = 1
MfG und Danke im Voraus!
1.)
Ich habe vor kurzem versucht, eine Steuerung per WASD (zusätzlich zu den Pfeiltasten) in mein Projekt einzubauen.
Momentan habe ich aber auf die äußerst unelegante und teilweise nicht recht funktionieren wollende Methode zurückgegriffen, mit diesem
#===================================
# Keyboard
#---------------------------------------------------------------
# Created by Corbaque and TLN - 09/07/07
#---------------------------------------------------------------
# English conversion by Corbaque
#---------------------------------------------------------------
# Methods :
# - press
# - trigger
# - dbtrigger
# - repeat => press 1 of 3
# - hold => bloc note press
# - release
# - active => like caps lock
# - getpress
#---------------------------------------------------------------
# Update :
# - Key.update
#=> Classical
# - Key.update("enter", "esc")
#=> Only enter and escap
# - Key.update(*$arraykeys)
#=> Only the keys included on $arraykeys
#===> Think to define it before using :P
#---------------------------------------------------------------
# QWERTY version
#===================================
# Win32API constant
Key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
State = Win32API.new("user32","GetKeyState",['i'],'i')
GetPress = Win32API.new('user32', 'keybd_event', ['i', 'i', 'i'], ' ')
#---------------------------------------------------------------
# Pressed ?
#---------------------------------------------------------------
def press(n)
R[n][0]
end
#---------------------------------------------------------------
# Clicked ?
#---------------------------------------------------------------
def trigger(n)
R[n][1] >= 1
end
#---------------------------------------------------------------
# Double Clicked ?
#---------------------------------------------------------------
def dbtrigger(n)
R[n][1] == 2
end
#---------------------------------------------------------------
# Pressed ?, false, false, false, Pressed ?...
#---------------------------------------------------------------
def repeat(n)
R[n][2] %= 4; R[n][2].zero? and R[n][0]
end
#---------------------------------------------------------------
# Like when you write anything with pressing
#---------------------------------------------------------------
def hold(n)
(R[n][2] % 20).zero? and R[n][0]
end
#---------------------------------------------------------------
# Released ?
#---------------------------------------------------------------
def release(n)
R[n][1] == -1
end
#---------------------------------------------------------------
# Actived ? (Like caps lock)
#---------------------------------------------------------------
def active(n)
State.call(TAB_KEY[n]) & 1 == 1
end
#---------------------------------------------------------------
# Get pressing
#---------------------------------------------------------------
def getpress(*a)
a.each do |n|
GetPress.call(TAB_KEY[n], 0, 0)
end
a.each do |n|
GetPress.call(TAB_KEY[n], 0, 2)
end
end
#---------------------------------------------------------------
# Update keys state
#---------------------------------------------------------------
class Keys
def Keys.update(*tab)
if tab != []
tab.each do |n|
m = R[n][0]
pr = Key.call(TAB_KEY[n]) != 0
tr = m == pr ? 0 : (pr ? (R[n][2].between?(1, 9) ? 2 : 1) : -1)
count = tr > 0 ? 0 : [R[n][2]+1, 20].min
R[n] = [pr, tr, count]
end
else
TAB_KEY.keys.each do |n|
m = R[n][0]
pr = Key.call(TAB_KEY[n]) != 0
tr = m == pr ? 0 : (pr ? (R[n][2].between?(1, 9) ? 2 : 1) : -1)
count = tr > 0 ? 0 : [R[n][2]+1, 20].min
R[n] = [pr, tr, count]
end
end
end
end
# All Keys
TAB_KEY = {
"click gauche" => 1,
"sg" => 1,
"click droit" => 2,
"sd" => 2,
"click milieu" => 4,
"sm" => 4,
"del" => 8,
"tab" => 9,
"enter" => 13,
"shift" => 16,
"ctrl" => 17,
"alt" => 18,
"pause" => 19,
"caps lock" => 20,
"esc" => 27,
"space" => 32,
"pg up" => 33,
"pg down" => 34,
"end" => 35,
"home" => 36,
"left" => 37,
"up" => 38,
"right" => 39,
"down" => 40,
"impr" => 44,
"insert" => 45,
"suppr" => 46,
"0" => 48,
"1" => 49,
"2" => 50,
"3" => 51,
"4" => 52,
"5" => 53,
"6" => 54,
"7" => 55,
"8" => 56,
"9" => 57,
"a" => 65,
"b" => 66,
"c" => 67,
"d" => 68,
"e" => 69,
"f" => 70,
"g" => 71,
"h" => 72,
"i" => 73,
"j" => 74,
"k" => 75,
"l" => 76,
"m" => 77,
"n" => 78,
"o" => 79,
"p" => 80,
"q" => 81,
"r" => 82,
"s" => 83,
"t" => 84,
"u" => 85,
"v" => 86,
"w" => 87,
"x" => 88,
"y" => 89,
"z" => 90,
"lwin" => 91,
"rwin" => 92,
"apps" => 93,
"n0" => 96,
"n1" => 97,
"n2" => 98,
"n3" => 99,
"n4" => 100,
"n5" => 101,
"n6" => 102,
"n7" => 103,
"n8" => 104,
"n9" => 105,
"n*" => 106,
"+" => 107,
"num" => 108,
"n-" => 109,
"n." => 110,
"n/" => 111,
"F1" => 112,
"F2" => 113,
"F3" => 114,
"F4" => 115,
"F5" => 116,
"F6" => 117,
"F7" => 118,
"F8" => 119,
"F9" => 120,
"F10" => 121,
"F11" => 122,
"F12" => 123,
"vernum" => 144,
"verdefil" => 145,
"lmaj" => 160,
"rmaj" => 161,
"lctrl" => 162,
"rctrl" => 163,
"lalt" => 164,
"ralt" => 165,
"]" => 186,
"=" => 187,
";" => 188,
"," => 190,
"." => 191,
"'" => 192,
"-" => 219,
'\\' => 220,
"[" => 221,
"`" => 222,
"/" => 223,
"|" => 226
}
R = TAB_KEY.clone
R.keys.each { |k| R[k] = [false, false, 10]}
und 2 kleinen Codeschnipseln in Game_Player und Window_Selectable so eine Steuerung einzubauen, allerdings funktioniert das teilweise nicht (z.B. im KS, wo 2 Commandwindows gleichzeitig angezeigt werden, aber immer nur eines aktiv ist, funktioniert die WASD-Steuerung nur bei einem der beiden)
Deshalb wollte ich fragen, ob es eine einfachere Möglichkeit gibt, so eine Steuerung zu implementieren.
2.)
Kann man in Ruby irgendwie aus einer fremden Klasse auf Methoden einer anderen Klasse zugreifen?
3.)
Wie kann ich den Helden per Ruby auf eine andere Map teleportieren lassen?
Habe mir gedacht einfach folgenden Code benutzen, aber das funktioniert leider nicht...
$game_temp.player_new_map_id = 1
$game_temp.player_new_x = 1
$game_temp.player_new_y = 1
MfG und Danke im Voraus!