PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tastenbelegung und (Un)mögliches?



Gieby
07.09.2005, 15:53
Tach auch,

da im Xp ja der Tastenpatch mit schon drin is (wenn net dann schlagt mich) wollte ich mal wissen welche Nummern ich den einzelenen Tasten zuweisen
muss.

Außerdem steh ich vor einer Frage, die ich aber ohne nötiges Tastatur-Maker-Wissen nicht klären kann. Und zwar ob es möglich ist das man z.B. mit den Tasten W,A,S,D läuft und mit den Pfeiltasten die Gesichstrichtung vorgibt. Also das ich wie in einen Ego-Shooter geradeaus laufe und dabei nach rechts sehen kann. Aber ich bin mir eben nicht sicher ob dies möglich ist (Chartechnich mal ganz abegesehn).

Danke schonmal für evtl. Hilfe ^^

MfG Gieby

[KoA-Dani]
07.09.2005, 16:07
Für deine erste Frage solltest du einfach mal in den RmXP FAQ thread in diesem Forum schauen. (Es stimmt. Gepinnte threads werden einfach so gut wie NIE beachtet ^_^). Aber du kannst mit dem XP alleine nicht alle Tasten belegen. Wie das geht wirst du aber auch der FAQ entnehmen(kurz: du musst dir ein script holen).

Frage 2: Mit Ruby bekommst du alles gebacken - aber das ist wahrscheinlich keine Option für dich. Ob es ganz alleine mit clickscripting geht, kann man so nicht sagen (ohne es probiert zu haben :>). Die Sache ist die, dass die Pfeiltasten generell immer belegt sind(für die Steuerung - kann man aber höchstwahrscheinlich via Ruby ändern bzw. das entsprechende Script dafür editieren). Du könntest aber mit AutoStart experimentieren, da reagieren die Pfeiltasten nicht wie normal. Oder du verwendest nicht den Character sondern spielst mit einem Event. Generell ist das aber schon möglich.

Gieby
07.09.2005, 16:19
Ja gepinnte Threads werden nicht beachtet. (Wo sind die eigentlich ^^ --> Scherz)

Ruby ist wirklich keine Option, obwohl ich gerade versuche es irgendwie zu lernen, aber neben Schule und anderen macht sich das nicht so gut....
Wie ich das sehen und laufen nun hinbekomme muss ich sehen. Das Problem ist, dass das ganze ziemlich komplex wird. Und (ich möcht nicht sagen das ich ein noob bin) da ich net alzuviel Ahnung von Ruby&Co. habe, wird das ne lustige Angelegenheit.
Autostart würd ich mal las Variante ausschließen, denn ich hab ja noch selbständig agierende Ereignisse. Un der Player als Event, ich weiß nicht so genau. Muss einfach sehen wie ich das mache.

Trozdem Danke

MfG Gieby

Der Drake
07.09.2005, 17:35
Außerdem steh ich vor einer Frage, die ich aber ohne nötiges Tastatur-Maker-Wissen nicht klären kann. Und zwar ob es möglich ist das man z.B. mit den Tasten W,A,S,D läuft und mit den Pfeiltasten die Gesichstrichtung vorgibt. Also das ich wie in einen Ego-Shooter geradeaus laufe und dabei nach rechts sehen kann. Aber ich bin mir eben nicht sicher ob dies möglich ist (Chartechnich mal ganz abegesehn).
In etwa so:

module Input
def Input.getstate(key)
return true unless Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)
return false
end

def self.wasd
if Input.getstate(87)
return 8 unless Input.getstate(83) #W
elsif Input.getstate(65)
return 4 unless Input.getstate(68) #A
elsif Input.getstate(83)
return 2 #S
elsif Input.getstate(68)
return 6 #D
end
return 0
end
end

class Game_Player < Game_Character
def initialize
super
@direction_fix = true
end

def update
last_moving = moving?
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
case Input.dir4
when 2
@direction = 2
@stop_count = 0
when 4
@direction = 4
@stop_count = 0
when 6
@direction = 6
@stop_count = 0
when 8
@direction = 8
@stop_count = 0
end
case Input.wasd
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
end

last_real_x = @real_x
last_real_y = @real_y
super
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
$game_map.scroll_down(@real_y - last_real_y)
end
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
$game_map.scroll_left(last_real_x - @real_x)
end
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
$game_map.scroll_right(@real_x - last_real_x)
end
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
$game_map.scroll_up(last_real_y - @real_y)
end
unless moving?
if last_moving
result = check_event_trigger_here([1,2])
if result == false
unless $DEBUG and Input.press?(Input::CTRL)
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
if Input.trigger?(Input::C)
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end

Einfach als seperates Skript direkt über Main kopieren. ... ist zwar nicht sonderlich elegant, aber nur um mal zu zeigen wie schnell man so manches schwieriges Editor-Problem mit Ruby gelöst bekommt.
Wenn du also irgendwie Zeit finden solltest: lern Ruby.


da im Xp ja der Tastenpatch mit schon drin is (wenn net dann schlagt mich) wollte ich mal wissen welche Nummern ich den einzelenen Tasten zuweisen muss.
Standardmäßig drin? Nein, aber wie gesagt, Ruby rockt:
http://www.dubealex.com/index.php?showtopic=752
Das dann allerdings in den Editor einzufügen wäre ein ziemlicher Aufwand und würde das ganze zusätzlich noch langsamer machen. Von daher ist es besser solche Dinge dierekt in Skripten zu machen.

Gieby
07.09.2005, 17:52
danke werd ihn heut abend ma ausprobieren...

ich habe aber noch etwas (Un)mögliches und zwar folgendes:

Wer die FEAR SP-Demo gespielt hat weiß wovon ich rede. Wenn ich jetzt eine Granate werfe, was zweifelsohne mit dem XP machbar ist, explodiert sie ja irgendwann einaml. Logisch. Doch wenn sie explodiert gibst ja nicht nur ein Krawumm und ne Explo, nein, vielmehr entsteht ja noch eine Druckwelle. Und in FEAR ist die durch einen Krümmungseffekt dargestellt. Doch is so etwas auch für den Xp realisierbar????? Wenn es jemanden hilft, dann lad ich mir nochmal die 700MB und werf ne Granate und mach nen Screen davon. Aber nur im äußersten Notfall wenn sich keiner was drunter vorstellen kann.

Wie immer: Danke schonmal für Antworten^^

ZeroX
11.09.2005, 22:44
Hallo alle zusammen,
Hier habe ich und Bananen-Joe haben mal für euch nen Script über RGSS gemacht, mitdem man alle Tasten der Tastatur und die Maus belegen kann.
Ich hoffe es wird euch weiter helfen.


-------------------------------------------------------------------------
module Input
VK_A = 0x41
VK_B = 0x42
VK_C = 0x43
VK_D = 0x44
VK_E = 0x45
VK_F = 0x46
VK_G = 0x47
VK_H = 0x48
VK_I = 0x49
VK_J = 0x4A
VK_K = 0x4B
VK_L = 0x4C
VK_M = 0x4D
VK_N = 0x4E
VK_O = 0x4F
VK_P = 0x50
VK_Q = 0x51
VK_R = 0x52
VK_S = 0x53
VK_T = 0x54
VK_U = 0x55
VK_V = 0x56
VK_W = 0x57
VK_X = 0x58
VK_Y = 0x59
VK_Z = 0x5A
VK_ADD = 0x6B
VK_ATTN = 0xF6
VK_BACK = 0x8
VK_CANCEL = 0x3
VK_CAPITAL = 0x14
VK_CLEAR = 0xC
VK_CONTROL = 0x11
VK_CRSEL = 0xF7
VK_DECIMAL = 0x6E
VK_DELETE = 0x2E
VK_DIVIDE = 0x6F
VK_DOWN = 0x28
VK_END = 0x23
VK_EREOF = 0xF9
VK_ESCAPE = 0x1B
VK_EXECUTE = 0x2B
VK_EXSEL = 0xF8
VK_F1 = 0x70
VK_F10 = 0x79
VK_F11 = 0x7A
VK_F12 = 0x7B
VK_F13 = 0x7C
VK_F14 = 0x7D
VK_F15 = 0x7E
VK_F16 = 0x7F
VK_F17 = 0x80
VK_F18 = 0x81
VK_F19 = 0x82
VK_F2 = 0x71
VK_F20 = 0x83
VK_F21 = 0x84
VK_F22 = 0x85
VK_F23 = 0x86
VK_F24 = 0x87
VK_F3 = 0x72
VK_F4 = 0x73
VK_F5 = 0x74
VK_F6 = 0x75
VK_F7 = 0x76
VK_F8 = 0x77
VK_F9 = 0x78
VK_HELP = 0x2F
VK_HOME = 0x24
VK_INSERT = 0x2D
VK_LBUTTON = 0x1
VK_LCONTROL = 0xA2
VK_LEFT = 0x25
VK_LMENU = 0xA4
VK_LSHIFT = 0xA0
VK_MBUTTON = 0x4
VK_MENU = 0x12
VK_MULTIPLY = 0x6A
VK_NEXT = 0x22
VK_NONAME = 0xFC
VK_NUMLOCK = 0x90
VK_NUMPAD0 = 0x60
VK_NUMPAD1 = 0x61
VK_NUMPAD2 = 0x62
VK_NUMPAD3 = 0x63
VK_NUMPAD4 = 0x64
VK_NUMPAD5 = 0x65
VK_NUMPAD6 = 0x66
VK_NUMPAD7 = 0x67
VK_NUMPAD8 = 0x68
VK_NUMPAD9 = 0x69
VK_OEM_CLEAR = 0xFE
VK_PA1 = 0xFD
VK_PAUSE = 0x13
VK_PLAY = 0xFA
VK_PRINT = 0x2A
VK_PRIOR = 0x21
VK_PROCESSKEY = 0xE5
VK_RBUTTON = 0x2
VK_RCONTROL = 0xA3
VK_RETURN = 0xD
VK_RIGHT = 0x27
VK_RMENU = 0xA5
VK_RSHIFT = 0xA1
VK_SCROLL = 0x91
VK_SELECT = 0x29
VK_SEPARATOR = 0x6C
VK_SHIFT = 0x10
VK_SNAPSHOT = 0x2C
VK_SPACE = 0x20
VK_SUBTRACT = 0x6D
VK_TAB = 0x9
VK_UP = 0x26
VK_ZOOM = 0xFB
KEYEVENTF_KEYDOWN = 0x0
KEYEVENTF_EXTENDEDKEY = 0x1
KEYEVENTF_KEYUP = 0x2
class Keyboard
@keystate = Win32API.new("user32", "GetAsyncKeyState", "i", "s")
@keyevent = Win32API.new("user32", "keybd_event", "iiii", "")
def self.pressed?(key = 0)
return @keystate.call(key)
end
def self.event(vk, scan, flags, info)
@keyevent.call(vk, scan, flags, info)
end
def self.press(vk, presstype = -1)
if presstype < 0
@keyevent.call(vk, 0, Input::KEYEVENTF_KEYDOWN, 0)
@keyevent.call(vk, 0, Input::KEYEVENTF_KEYUP, 0)
else
@keyevent.call(vk, 0, presstype, 0)
end
end
end
class Mouse
@getcursorpos = Win32API.new("user32", "GetCursorPos", "p", "i")
@setcursorpos = Win32API.new("user32", "SetCursorPos", "ii", "i")
def self.getpos()
pos = " " * 8
@getcursorpos.call(pos)
return pos.unpack("ii")
end
def self.setpos(x, y)
return @setcursorpos.call(x, y)
end
end
end


Das kommt unter den neu-Angelegten RGSS Punkt Modul rein.
Die VK_????? sind die Tastenbezeichnungen mit den ihr die tasten aufrufen könnt. Wie z.b. "0x24" ist die Tasten Abfrage.
-------------------------------------------------------------------------
Hier noch die anderen sachen um die taste anzusprechen, Vollbild zu machen etc....:

Zitat:
====Cursorpos setzen====

Input::Mouse.setpos(30, 60)

=====Curspos holen=====

$game_variables[5],$game_variables[6] = Input::Mouse.getpos()

=====Tasten drücken=====

Input::Keyboard.press(Input::VK_MENU, 0)

====Vollbild machen====

Input::Keyboard.press(Input::VK_MENU, 0)
Input::Keyboard.press(Input::VK_RETURN, 0)
Input::Keyboard.press(Input::VK_MENU, 2)
Input::Keyboard.press(Input::VK_RETURN, 2)

====Taste gedrückt?====

if Input::Keyboard.pressed?(Input::VK_RIGHT) < 0
[...] //Taste ist gedrückt.
else
[...] //Taste ist nicht gedrückt.
end

-------------------------------------------------------------------------

Diese werden über Events gestartet über die Funktion"Script ausführen" im Normalen Event Editor.

Hoffe ich konnte euch ein bissl helfen.
Sorry das ich irgentwie die originale Formatierung nich hinbekommen habe.

MFG ZeroX