Re: key press events & holding keys down



On Mon, 19 Mar 2012 13:37:45 -0800
Christopher Howard <christopher howard frigidcode com> wrote:
[snip]
So, you mean, receive both key press and key release events, and then
maintain my own tracking of whether or not the key is currently being
held down? Okay, that makes sense to me, provided of course I can be
certain that all key press and key release events are properly
reported to my program (otherwise my internal state my gets screwed)
and in the correct order.

Yes, if you really want to design the game that way (see below).  To the
best of my knowledge standard PC keyboard hardware is edge triggered
anyway, although I could be wrong, and if you have a strong stomach
you could look at the linux or BSD kernel code to see if I am right.
However, many keyboards are used with serial (USB or bluetooth)
interfaces with edge triggering, so further clouding the issue.

However, I think you are allowing one particular library with which
you are familiar, namely ClanLib, to dominate your thinking.  Since (if
I am right) the hardware and its interfaces are edge triggered, and GDK
certainly is, go with the flow and construct your program by reference
to these events. That is, assume key state remains the same, and
continue your space ships in a particular direction, or keep firing
phasors on maximum stun, until a key press or key release event in the
glib main loop tells you something different.

Doing it through a timer by reference to stored state is an
alternative, but could be viewed as a cludge.  It may be a necessary
cludge if you are porting existing code and that is how it does it, but
that doesn't seem to be the case here.

However, the approach I was hoping for, i.e. simply checking the
current "reality" state of a key (whether it is actually pressed down
or not) sounds more convenient. If anyone could tell me how to do
that, I would be grateful.

This is what keeping state does.  I think you are tying yourself up in
unnecessary knots here.

Chris



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]