Портируя игры частенько натыкаешься на такие подводные камни... раскладка у GP2X довольно специфичная.. В основном разработчики используют при дебагинге на хосте стандартные значения. Но в релизе оставляют только под джойстик вышеупомянутой консоли. Приходится перенастраивать... Во-первых, ищем в исходниках такие строчки: case SDL_JOYBUTTONDOWN: // Нажатая клавиша
switch (event.jbutton.button)
и case SDL_JOYBUTTONUP: // Отпущенная клавиша
switch (event.jbutton.button)
и заменяем на:
case SDL_KEYDOWN:
switch (event.key.keysym.sym) case SDL_KEYUP: switch (event.key.keysym.sym) Далее уже меняем сами значения клавиш. Они могут быть даны в GP2X_BUTTON или просто в case с SDL кодом клавиши. Я сделал небольшую табличку, в которой можно понять что на что менять) (Подходит для ZN5):
GP2X | Код SDL -> 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 |
Пример хидера: #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)
Пример исправленного хидера: #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
Коды клавиш SDL, ZN5:
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)
центр - 13 (return)
CLR - 8 (backspace)
call - 9 (tab)
red - 27 (escape)
left soft - 290
right soft - 292
camera - 19
volume - - 45
volume + - 43
Раскладка Dingoo (Dingux OS):
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
|