key injection buffer nedir ne için kullanılır?
biraz karmaşık geldi incelediğim örnek kod, pek anlayamadım
örnek kod:
Kod:
// Now we let's fill our event
if(ready){
event.mouse_x = mouse_x;
event.mouse_y = mouse_y;
event.mouse_free_x = mouse_free_x;
event.mouse_free_y = mouse_free_y;
event.current_time = sys_time_passed;
// Now let's check our keyboard status, represented in the keys array
for(i=0; i<num; i++){ // for every key
// set current key to key no: i, converting from DInput key to our
// key type
key = di2in_key[keys[i].dwOfs];
if(!key) continue; // the processed key value is 0, it means it's
// not mapped
// if the key is mapped, let's update the key_states array
key_states[key] = (byte)keys[i].dwData & 0x80L;
// if the event is a press or release event
if(key_states[key] != old_key_states[key]){
event.key = key;
event.flags = 0;
if(key_states[INKEY_LEFTSHIFT] || key_states[INKEY_RIGHTSHIFT])
event.flags |= INEVF_SHIFT;
if(key_states[INKEY_LEFTCTRL] || key_states[INKEY_RIGHTCTRL])
event.flags |= INEVF_CTRL;
if(key_states[INKEY_LEFTALT] || key_states[INKEY_RIGHTALT])
event.flags |= INEVF_ALT;
check_key_events(key, &event);
// we set the current key states to old key state
old_key_states[key] = key_states[key];
// to make sure we do not call a drag event in this frame
// (we can drag while we click or release a button)
key_event_sent[key] = 1;
}
}
// handle key injection buffer in the same way
for (i=0;i<keyInjectionBufferIndex;i++){
key = keyInjectionBuffer[i][0];
// set current key state
keyStates[key] = keyInjectionBuffer[i][1];
if (keyStates[key] != oldKeyStates[key]){
// press or release event, need to handle it now
event.key = key;
event.flags = 0;
if(key_states[INKEY_LEFTSHIFT] || key_states[INKEY_RIGHTSHIFT])
event.flags |= INEVF_SHIFT;
if(key_states[INKEY_LEFTCTRL] || key_states[INKEY_RIGHTCTRL])
event.flags |= INEVF_CTRL;
if(key_states[INKEY_LEFTALT] || key_states[INKEY_RIGHTALT])
event.flags |= INEVF_ALT;
CheckKeyEvents(key, &event);
// save current key state to old
oldKeyStates[key] = keyStates[key];
// make sure we don't call a drag event in this frame
keyEventSent[key] = 1;
}
}keyInjectionBufferIndex = 0;
Ya biliyorum bunu kodu yazan adama sormalıyım aslında ama kesin ulaşamam ve çok önce yazılmış.
Bu arada key_states falam filan bazen KeyStates olarak yazılyıor. Yani bu yazımlar aynı, sadece kodları anlamak için kendim yazıyorum ondan yazılım farklılıkları var, yarısı benim yarısı orijinalini yapan adamın.
Asıl anlayamadığım şey old_key_states update olduktan sonra key_injetion_buffer lı bölümde, tekrar kullanılıyor. Şimdi bu bir hata mı yoksa bu injection buffer cahili olduğum için mi anlayamıyorum.
Lütfen, biliyorum biraz uğraştırıyorum, ama biraz zaman ayırıp yardım ediverin şu garibe
Bu forumda yeni konular açamazsınız Bu forumdaki mesajlara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız