Commençant un moteur 3D, j'ai besoin de récupérer l'appui des touches du
clavier pour faire bouger le joueur.
Pour cela, il n'y a pas de problèmes et tout marche bien.
Pour récupérer l'appui des touches, j'utilise les messages WM_KEYDOWN et
autres (j'évite DirectInput, je préfère en rester indépendant). Mais le
problème qui se pose à moi, c'est que windows gère automatiquement
l'autorepeat des touches selon les paramètres du panneau de
configuration. Du coup, si l'utilisateur garde appuyé la touche "Z", ça
me fait : un message pour la touche "Z", une attente de quelques
secondes, puis la suite des messages de la touche "Z" enchainés...
Donc voilà, en fait je voudrais simplement mettre un temps d'autorepeat
de 0 quand mon appli a le focus, et remettre le normal après.
Je n'ai pas trouvé de fonction pour faire ça dans la MSDN ou autre...
Quelqu'un peut m'éclairer ?
--
Michaël Monerau
-= JJG =-
Oui mais ça m'oblige à vérifier chaque touche à chaque frame... Ca me ferait perdre du précieux temps j'ai l'impression. J'aimerais bien m'en passer.
-- Michaël Monerau -= JJG =-
adebaene
Michaël Monerau wrote in message news:<KLzxc.58410$...
Bonjour,
Commençant un moteur 3D, j'ai besoin de récupérer l'appui des touches du clavier pour faire bouger le joueur.
Pour cela, il n'y a pas de problèmes et tout marche bien.
Pour récupérer l'appui des touches, j'utilise les messages WM_KEYDOWN et autres
Mauvais plan : ca signifie que ta fréquence de prise en compte des appui clavier dépend de la boucle principale de ton moteur (la pompe à messages), et que potentiellement les messages vont s'entasser dans ta queue de message pendant ta boucle --> Mieux vaut lire l'état clavier quand tu en as besoin, avec GetAsyncKeyState.
(j'évite DirectInput, je préfère en rester indépendant).
Pourquoi?
Arnaud
Michaël Monerau <cortex@drag-network.com> wrote in message news:<KLzxc.58410$vP.56883@news.chello.at>...
Bonjour,
Commençant un moteur 3D, j'ai besoin de récupérer l'appui des touches du
clavier pour faire bouger le joueur.
Pour cela, il n'y a pas de problèmes et tout marche bien.
Pour récupérer l'appui des touches, j'utilise les messages WM_KEYDOWN et
autres
Mauvais plan : ca signifie que ta fréquence de prise en compte des
appui clavier dépend de la boucle principale de ton moteur (la pompe à
messages), et que potentiellement les messages vont s'entasser dans ta
queue de message pendant ta boucle --> Mieux vaut lire l'état clavier
quand tu en as besoin, avec GetAsyncKeyState.
(j'évite DirectInput, je préfère en rester indépendant).
Michaël Monerau wrote in message news:<KLzxc.58410$...
Bonjour,
Commençant un moteur 3D, j'ai besoin de récupérer l'appui des touches du clavier pour faire bouger le joueur.
Pour cela, il n'y a pas de problèmes et tout marche bien.
Pour récupérer l'appui des touches, j'utilise les messages WM_KEYDOWN et autres
Mauvais plan : ca signifie que ta fréquence de prise en compte des appui clavier dépend de la boucle principale de ton moteur (la pompe à messages), et que potentiellement les messages vont s'entasser dans ta queue de message pendant ta boucle --> Mieux vaut lire l'état clavier quand tu en as besoin, avec GetAsyncKeyState.
(j'évite DirectInput, je préfère en rester indépendant).
Pourquoi?
Arnaud
Christian ASTOR
Michaël Monerau a écrit:
Utilise une Game Loop (PeekMessage())
C'est déjà ce que je fais. Où veux-tu en venir ?
Ca rejoint ce qu'on dit les autres, Game Loop avec PeekMessage() & GetAsyncKeyState(), qu'on trouve ds tous les sources de jeux, avec les define de A. LaMothe : #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
Michaël Monerau a écrit:
Utilise une Game Loop (PeekMessage())
C'est déjà ce que je fais. Où veux-tu en venir ?
Ca rejoint ce qu'on dit les autres, Game Loop avec PeekMessage() &
GetAsyncKeyState(), qu'on trouve ds tous les sources de jeux,
avec les define de A. LaMothe :
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
Ca rejoint ce qu'on dit les autres, Game Loop avec PeekMessage() & GetAsyncKeyState(), qu'on trouve ds tous les sources de jeux, avec les define de A. LaMothe : #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
adebaene
Michaël Monerau wrote in message news:<YGCxc.58642$...
patrox a écrit :
> Autre solution : GetAsyncKeyState > > pat.
Oui mais ça m'oblige à vérifier chaque touche à chaque frame... Ca me ferait perdre du précieux temps j'ai l'impression.
"J'ai l'impression" n'est pas suffisant. Tu as mesuré effectivement les temps de réponse? Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le clavier d'un coup.
Arnaud
Michaël Monerau <cortex@drag-network.com> wrote in message news:<YGCxc.58642$vP.34821@news.chello.at>...
patrox a écrit :
> Autre solution : GetAsyncKeyState
>
> pat.
Oui mais ça m'oblige à vérifier chaque touche à chaque frame... Ca me
ferait perdre du précieux temps j'ai l'impression.
"J'ai l'impression" n'est pas suffisant. Tu as mesuré effectivement
les temps de réponse?
Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le
clavier d'un coup.
Michaël Monerau wrote in message news:<YGCxc.58642$...
patrox a écrit :
> Autre solution : GetAsyncKeyState > > pat.
Oui mais ça m'oblige à vérifier chaque touche à chaque frame... Ca me ferait perdre du précieux temps j'ai l'impression.
"J'ai l'impression" n'est pas suffisant. Tu as mesuré effectivement les temps de réponse? Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le clavier d'un coup.
Arnaud
Michaël Monerau
Arnaud Debaene a écrit :
Michaël Monerau wrote in message news:<YGCxc.58642$... "J'ai l'impression" n'est pas suffisant. Tu as mesuré effectivement les temps de réponse? Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le clavier d'un coup.
;-) En effet, c'est ce que je vais faire. C'est vrai que laisser les messages clavier dans la queue, c'est po terrible.
L'avantage de WM_KEYDOWN est que j'appelais une fonction KeyDown, sans superflu. Là il va falloir que je teste si chaque touche a changé d'état, et si oui appeler cette fonction (ou KeyUp). Mais bon, si c'est mieux c'est pas un problème :) -- Michaël Monerau -= JJG =-
Arnaud Debaene a écrit :
Michaël Monerau <cortex@drag-network.com> wrote in message news:<YGCxc.58642$vP.34821@news.chello.at>...
"J'ai l'impression" n'est pas suffisant. Tu as mesuré effectivement
les temps de réponse?
Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le
clavier d'un coup.
;-)
En effet, c'est ce que je vais faire. C'est vrai que laisser les
messages clavier dans la queue, c'est po terrible.
L'avantage de WM_KEYDOWN est que j'appelais une fonction KeyDown, sans
superflu. Là il va falloir que je teste si chaque touche a changé
d'état, et si oui appeler cette fonction (ou KeyUp). Mais bon, si c'est
mieux c'est pas un problème :)
--
Michaël Monerau
-= JJG =-
Michaël Monerau wrote in message news:<YGCxc.58642$... "J'ai l'impression" n'est pas suffisant. Tu as mesuré effectivement les temps de réponse? Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le clavier d'un coup.
;-) En effet, c'est ce que je vais faire. C'est vrai que laisser les messages clavier dans la queue, c'est po terrible.
L'avantage de WM_KEYDOWN est que j'appelais une fonction KeyDown, sans superflu. Là il va falloir que je teste si chaque touche a changé d'état, et si oui appeler cette fonction (ou KeyUp). Mais bon, si c'est mieux c'est pas un problème :) -- Michaël Monerau -= JJG =-
Michaël Monerau
Arnaud Debaene a écrit :
Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le clavier d'un coup.
J'ai regardé dans la MSDN et il est écrit : "The status changes as a thread removes keyboard messages from its message queue. The status does not change as keyboard messages are posted to the thread's message queue, nor does it change as keyboard messages are posted to or retrieved from message queues of other threads"
Du coup, on retombe sur le même problème d'entassement des messages... Mais bon, j'ai fait mon affaire avec GetAsyncKeyState, et ça marche nickel !!
Merci à tous pour votre aide.
-- Michaël Monerau -= JJG =-
Arnaud Debaene a écrit :
Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le
clavier d'un coup.
J'ai regardé dans la MSDN et il est écrit :
"The status changes as a thread removes keyboard messages from its
message queue. The status does not change as keyboard messages are
posted to the thread's message queue, nor does it change as keyboard
messages are posted to or retrieved from message queues of other threads"
Du coup, on retombe sur le même problème d'entassement des messages...
Mais bon, j'ai fait mon affaire avec GetAsyncKeyState, et ça marche
nickel !!
Sinon, il y a GetKeyBoardState pour récupérer l'état de tout le clavier d'un coup.
J'ai regardé dans la MSDN et il est écrit : "The status changes as a thread removes keyboard messages from its message queue. The status does not change as keyboard messages are posted to the thread's message queue, nor does it change as keyboard messages are posted to or retrieved from message queues of other threads"
Du coup, on retombe sur le même problème d'entassement des messages... Mais bon, j'ai fait mon affaire avec GetAsyncKeyState, et ça marche nickel !!
Merci à tous pour votre aide.
-- Michaël Monerau -= JJG =-
Michaël Monerau
Arnaud Debaene a écrit :
Michaël Monerau wrote in message news:<KLzxc.58410$...
(j'évite DirectInput, je préfère en rester indépendant).
Pourquoi?
Seulement pour rester indépendant de DirectX. Mais si c'était la dernière solution, je le ferais ;-)
Mais c'est bon, maintenant ça marche nickel avec GetAsyncKeyState ;-) -- Michaël Monerau -= JJG =-
Arnaud Debaene a écrit :
Michaël Monerau <cortex@drag-network.com> wrote in message news:<KLzxc.58410$vP.56883@news.chello.at>...
(j'évite DirectInput, je préfère en rester indépendant).
Pourquoi?
Seulement pour rester indépendant de DirectX. Mais si c'était la
dernière solution, je le ferais ;-)
Mais c'est bon, maintenant ça marche nickel avec GetAsyncKeyState ;-)
--
Michaël Monerau
-= JJG =-