Портируя игры с GP2X, частенько натыкаешься на такие подводные камни, так как раскладка у этой консоли довольно специфичная. В основном разработчики используют при отладке на хостовой машине стандартные значения SDLK, но в релизе оставляют значения только под джойстик вышеупомянутой консоли. Приходится немного исправлять.
Во-первых, ищем в исходниках такие строчки:
1 2 3 4 |
case SDL_JOYBUTTONDOWN: // Нажатая клавиша switch (event.jbutton.button) case SDL_JOYBUTTONUP: // Отпущенная клавиша switch (event.jbutton.button) |
И заменяем их на:
1 2 3 4 |
case SDL_KEYDOWN: switch (event.key.keysym.sym) case SDL_KEYUP: switch (event.key.keysym.sym) |
Далее уже меняем сами значения клавиш. Они могут быть даны в GP2X_BUTTON или просто в case с SDLK-кодом клавиши.
Я сделал небольшую табличку, в которой можно понять что на что менять, она подходит для Motorola ZN5:
GP2X | Код SDLK => GP2X | SDLK (ZN5) |
GP2X_BUTTON_UP | case 0 | SDLK_UP |
GP2X_BUTTON_DOWN | case 4 | SDLK_DOWN |
GP2X_BUTTON_LEFT | case 2 | SDLK_LEFT |
GP2X_BUTTON_RIGHT | case 6 | SDLK_RIGHT |
GP2X_BUTTON_UPLEFT | case 1 | SDLK_3 |
GP2X_BUTTON_UPRIGHT | case 7 | SDLK_9 |
GP2X_BUTTON_DOWNLEFT | case 3 | SDLK_1 |
GP2X_BUTTON_DOWNRIGHT | case 5 | SDLK_7 |
GP2X_BUTTON_CLICK | case 18 | SDLK_0 |
GP2X_BUTTON_A | case 12 | SDLK_PLUS |
GP2X_BUTTON_B | case 13 | SDLK_MINUS |
GP2X_BUTTON_Y | case 14 | SDLK_F9 |
GP2X_BUTTON_X | case 15 | SDLK_F11 |
GP2X_BUTTON_L | case 10 | SDLK_HASH |
GP2X_BUTTON_R | case 11 | SDLK_ASTERISK |
GP2X_BUTTON_START | case 8 | SDLK_PAUSE |
GP2X_BUTTON_SELECT | case 9 | SDLK_RETURN |
GP2X_BUTTON_VOLUP | case 16 | SDLK_6 |
GP2X_BUTTON_VOLDOWN | case 17 | SDLK_4 |
Пример заголовочного файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#define GP2X_BUTTON_UP (0) #define GP2X_BUTTON_DOWN (4) #define GP2X_BUTTON_LEFT (2) #define GP2X_BUTTON_RIGHT (6) #define GP2X_BUTTON_UPLEFT (1) #define GP2X_BUTTON_UPRIGHT (7) #define GP2X_BUTTON_DOWNLEFT (3) #define GP2X_BUTTON_DOWNRIGHT (5) #define GP2X_BUTTON_CLICK (18) #define GP2X_BUTTON_A (12) #define GP2X_BUTTON_B (13) #define GP2X_BUTTON_Y (14) #define GP2X_BUTTON_X (15) #define GP2X_BUTTON_L (10) #define GP2X_BUTTON_R (11) #define GP2X_BUTTON_START (8) #define GP2X_BUTTON_SELECT (9) #define GP2X_BUTTON_VOLUP (16) #define GP2X_BUTTON_VOLDOWN (17) |
Пример исправленного заголовочного файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#define GP2X_BUTTON_UP SDLK_UP #define GP2X_BUTTON_DOWN SDLK_DOWN #define GP2X_BUTTON_LEFT SDLK_LEFT #define GP2X_BUTTON_RIGHT SDLK_RIGHT #define GP2X_BUTTON_UPLEFT SDLK_3 #define GP2X_BUTTON_UPRIGHT SDLK_9 #define GP2X_BUTTON_DOWNLEFT SDLK_1 #define GP2X_BUTTON_DOWNRIGHT SDLK_7 #define GP2X_BUTTON_CLICK SDLK_0 #define GP2X_BUTTON_A SDLK_PLUS #define GP2X_BUTTON_B SDLK_MINUS #define GP2X_BUTTON_Y SDLK_F9 #define GP2X_BUTTON_X SDLK_F11 #define GP2X_BUTTON_L SDLK_HASH #define GP2X_BUTTON_R SDLK_ASTERISK #define GP2X_BUTTON_START SDLK_PAUSE #define GP2X_BUTTON_SELECT SDLK_RETURN #define GP2X_BUTTON_VOLUP SDLK_6 #define GP2X_BUTTON_VOLDOWN SDLK_4 |
Коды клавиш SDLK для Motorola ZN5:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 * 42 # 35 left 273 (up) right 274 (down) down 276 (left) up 275 (right) center 13 (return) CLR 8 (backspace) call 9 (tab) red 27 (escape) left soft 290 right soft 292 camera 19 volume - 45 volume + 43 |
Раскладка Dingoo A320 (Dingux OS):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Up SDLK_UP 237 Down SDLK_DOWN 274 Left SDLK_LEFT 276 Right SDLK_RIGHT 275 A SDLK_LCTRL 306 B SDLK_LALT 308 X SDLK_SPACE 32 Y SDLK_LSHIFT 304 L SDLK_TAB 9 R SDLK_BACKSPACE 8 Select SDLK_ESCAPE 27 Start SDLK_RETURN 13 End SDLK_UNKNOWN |
Раскладка для Android OS (библиотека SDL от mamaich):
1 2 3 4 |
Menu SDLK_LCTRL Find SDLK_SPACE Back SDLK_ESCAPE D-Pad SDLK_UP, SDLK_DOWN, SDLK_LEFT, SDLK_RIGHT, SDLK_RETURN |
Раскладка Motorola A1200/E6 (MotoEZX OS):
A1200 | # | sdl name | mod N | mod sdl |
Call | 32 | SDLK_SPACE | 102 | SDLK_f |
Hangup | 27 | SDLK_ESCAPE | 97 | SDLK_a |
Camera | 19 | SDLK_PAUSE | 101 | SDLK_e |
Vol ‘+’ | 43 | SDLK_PLUS | 99 | SDLK_c |
Vol ‘-‘ | 45 | SDLK_MINUS | 100 | SDLK_d |
Fire | 13 | SDLK_RETURN | 98 | SDLK_b |
Up | 275 | SDLK_RIGHT | 106 | SDLK_j |
Down | 276 | SDLK_LEFT | 105 | SDLK_i |
Right | 274 | SDLK_DOWN | 104 | SDLK_h |
Left | 273 | SDLK_UP | 103 | SDLK_g |
A1200 mod key — клавиша между vol+ и vol-.
ROKR E6 | # | sdl name |
Forward | 113 | SDLK_q |
Pause | 112 | SDLK_p |
Back | 111 | SDLK_o |
un.Call | 114 | SDLK_r |
ROKR E6 mod key — клавиша под красной трубкой (hangup).
Nice to read your blog