Пытаюсь разобраться почему на Dingoo Pixilang не опрашивает три кнопки: Y, B, A. С остальными все в порядке.
Как выяснилось они имеют коды клавиш left_shift, left_alt и left_ctrl соответственно.
Pixilang их просто не опрашивает. Ребята подсказывают нужно в исходниках подправить коды клавиш.
Так вот вопрос NightRadio - действительно ли таким образом удастся решить проблему, если да, то где менять?
Pixilang на Dingux (кнопки)
Pixilang на Dingux (кнопки)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
- NightRadio
- Site Admin
- Posts: 3955
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Pixilang на Dingux (кнопки)
Странно, вроде и правые и левые отрабатываются. Обработка этих событий находится в файлах sundog_engine/code/wm_unixgraphics.h (для X11) и в sundog_engine/code/wm_unixgraphics_sdl.h (для SDL версии).
Re: Pixilang на Dingux (кнопки)
Действительно странно, но похоже это глюк Пикси.
Проверил на Dingux и на Windows - одинаково, на left_shift, left_alt и left_ctrl не откликается.
Проверял вот этим примерчиком:
Поменял в исходниках значения left_shift, left_alt и left_ctrl на F1, F2 и F3 соответственно - так кнопки работают как будто жмутся F1, F2, F3.
Но по-хорошему конечно лучше исправить глюк и сделать именно left_shift, left_alt и left_ctrl.
Проверил на Dingux и на Windows - одинаково, на left_shift, left_alt и left_ctrl не откликается.
Проверял вот этим примерчиком:
Code: Select all
//pixilang (2007) - http://pixi.gif.ru
urod = new_pixi( 7, 7, 1 )
regen_status = 0
px = -70
py = -70
clear( #FFFFFF )
print("Press buttons",-60,-100,BLACK)
start:
pixi( urod, px, py, 0 )
//handle_keys( { regen_status = 1 }, {}, { regen_status = 0 } )
handle_hard_keys({regen_status = 1},{regen_status = 0})
if regen_status
{
regen
px + 9
if px > 70 { px = -70 py + 9 }
if py > 70 { py = -70 }
}
frame(0)
go start
regen:
set_screen( urod )
xs = get_pixi_xsize( urod )
ys = get_pixi_ysize( urod )
y = 0 x = 0
yloop:
x = 0
xloop:
xx = x - xs / 2
yy = y - ys / 2
dot( xx, yy, #FFFFFF )
dot( -xx, yy, #FFFFFF )
dot( -xx, -yy, #FFFFFF )
dot( xx, -yy, #FFFFFF )
if rand & 1
{
dot( xx, yy, #101010 )
dot( -xx, yy, #101010 )
dot( -xx, -yy, #101010 )
dot( xx, -yy, #101010 )
}
x + 1
if x < xs { go xloop }
y + 1
if y < ys { go yloop }
set_screen( 0 )
ret
Но по-хорошему конечно лучше исправить глюк и сделать именно left_shift, left_alt и left_ctrl.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
Re: Pixilang на Dingux (кнопки)
По этому адресу: http://www.libsdl.org/cgi/docwiki.cgi/SDLKey описание кнопок SDL, можно поробовать в файле wm_unuxgraphics_sdl.h, а конкретнее в этом участке кода переопределить L_SHIFT, L_CTRL, L_ALT. Например, для L_SHIFT:
Code: Select all
case SDL_KEYUP:
button = event.key.keysym.sym;
if( button > 255 )
{
switch( button )
{
case SDLK_UP: button = KEY_UP; break;
case SDLK_DOWN: button = KEY_DOWN; break;
case SDLK_LEFT: button = KEY_LEFT; break;
case SDLK_RIGHT: button = KEY_RIGHT; break;
case SDLK_INSERT: button = KEY_INSERT; break;
case SDLK_HOME: button = KEY_HOME; break;
case SDLK_END: button = KEY_END; break;
case SDLK_PAGEUP: button = KEY_PAGEUP; break;
case SDLK_PAGEDOWN: button = KEY_PAGEDOWN; break;
case SDLK_F1: button = KEY_F1; break;
case SDLK_F2: button = KEY_F2; break;
case SDLK_F3: button = KEY_F3; break;
case SDLK_F4: button = KEY_F4; break;
case SDLK_F5: button = KEY_F5; break;
case SDLK_F6: button = KEY_F6; break;
case SDLK_F7: button = KEY_F7; break;
case SDLK_F8: button = KEY_F8; break;
case SDLK_CAPSLOCK: button = KEY_CAPS; break;
case SDLK_RSHIFT:
case SDLK_LSHIFT:
if( event.type == SDL_KEYDOWN ) mod_keys |= KEY_SHIFT; else mod_keys &= ~KEY_SHIFT;
button = 0;
break;
case SDLK_RCTRL:
case SDLK_LCTRL:
if( event.type == SDL_KEYDOWN ) mod_keys |= KEY_CTRL; else mod_keys &= ~KEY_CTRL;
button = 0;
break;
case SDLK_RALT:
case SDLK_LALT:
if( event.type == SDL_KEYDOWN ) mod_keys |= KEY_ALT; else mod_keys &= ~KEY_ALT;
button = 0;
break;
default: button = 0; break;
}
}
Code: Select all
case SDLK_LSHIFT:
if( event.type == SDL_KEYDOWN )
{
mod_keys |= KEY_SHIFT;
button = KEY_SHIFT;
}
else mod_keys &= ~KEY_SHIFT;
button = 0;
break;
Re: Pixilang на Dingux (кнопки)
Al_Rado а не можешь выложить исправленную версию для dinux`а, с поменянными кнопками? На A320 и так кнопочек маловато -а если убрать из них еще 5 (влючая select нажатие которого приводит к выход из интерпритатора и power_off -соответсвенно выключающий плейер), то вообще становится трудновато разрабатывать всяческие интерфейсы будущих прог.Al_Rado wrote: Поменял в исходниках значения left_shift, left_alt и left_ctrl на F1, F2 и F3 соответственно - так кнопки работают как будто жмутся F1, F2, F3.
Но по-хорошему конечно лучше исправить глюк и сделать именно left_shift, left_alt и left_ctrl.
Re: Pixilang на Dingux (кнопки)
Честно говоря, не хотелось плодить версии пиксиленга с разными кодами клавиш, да и select c power_off я не трогал... Но если тебе нужно для отладки так сказать - то как доберусь домой, скину то что есть.
Да, есть ли смысл менять значение клавиши select (escape)? Пиксиленг может блокировать выход в ОСь, и можно попадать в отдельную менюшку, например.
Да, есть ли смысл менять значение клавиши select (escape)? Пиксиленг может блокировать выход в ОСь, и можно попадать в отдельную менюшку, например.
Re: Pixilang на Dingux (кнопки)
Ну насчет select`а я немного погорячился, его менять нет необходимости. Еще кстати кнопка power_off у меня не определяется, а вот ее положение блокировки hold находит -может есть смысл и ее переназначить?Al_Rado wrote:Да, есть ли смысл менять значение клавиши select (escape)? Пиксиленг может блокировать выход в ОСь, и можно попадать в отдельную менюшку, например.
Re: Pixilang на Dingux (кнопки)
Относительно слайдера power_off - если найти keycode нажатия, подправить можно... Нашел такое - POWER UP button: KEY_PAUSE, но не ясно в каком положении слайдер
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!