Thank you! The only problem with that is that it won't recognize two keys at once, and that is something to do with Shoes' keypress. I need to be able to detect both at once, so I need a native keydown.
To _why, I think this would be even easier to put in than the original keypress was! Keydown/keyup is generally easier, isn't it? On Sun, Jul 5, 2009 at 10:12 AM, Ehsanul Hoque<[email protected]> wrote: > Oops, that para in the animate block makes it a bit slow sometimes, get rid > of that (was just for some troubleshooting). I'm talking about the 8th line > in the code. > > ________________________________ > Subject: RE: keydown? > From: [email protected] > Date: Sun, 5 Jul 2009 17:06:38 +0000 > To: [email protected] > > I've cooked up a hack that pretty much works. It's implemented in terms of > keypress events, relying on the fact that when you hold a key down, keypress > events are sent every 0.1s or so (at most), except the keypress after the > initial event/press, which takes 0.5 seconds to be sent (these figures are > on my machine anyways, for a barebones shoes app, you can adjust values > according to yours). > > The code takes account of the pause after the initial event, with the > disadvantage being that if you just press the button, it will assume it has > been held for a full 0.505 seconds. Which may be totally acceptable for a > lot of use cases. The other choice in this hack would be to wait for the > rapid events, but that would make it feel very sluggish. > > Also, I'm sure this could be abstracted out to look more like what you > wanted, a function where you passed in the key, but I leave that as an > exercise to someone who needs it. Here's the code: > > Shoes.app do > @info = para '' > @s = stack > @t = Time.now > animate( 10 ) do > if up_pressed? > @info.replace "You pressed UP!!!" > @s.append { para "up - ", Time.now.to_f%100, " - ", @t.to_f%100 } # > Check these paras to see the reason for problems > else > @info.replace "C'mon, you know you wanna press the up button, just do > it already" > end > end > keypress do |key| > if key.inspect == ':up' and Time.now - @t < 0.15 > # Continued press, where keypress events are fired off every ~0.1s > @t = Time.now > elsif key.inspect == ':up' and Time.now - @t >= 0.15 > # Initial press, which will followed by a second keypress event after > ~0.5s pause, if held down, hence the delay > @t = Time.now + 0.505 > end > end > def up_pressed? > # If the following statement is true, the up button is probably being > held down, since the last even fired less than 0.15s ago > Time.now - @t < 0.15 > end > end > > And this code should provide the timing of keypress events, in case they're > different for your hardware (also the events are slower if lots of things > are going on I guess, so you'd have to adjust the 0.15 values): > > Shoes.app do > @t = Time.now > keypress do |key| > para "\n" if Time.now - @t > 0.15 > para Time.now - @t > @t = Time.now > end > end > > >> Subject: keydown? >> From: [email protected] >> To: [email protected] >> Date: Sat, 4 Jul 2009 10:16:27 -0700 >> >> I want to be able to do this: >> >> kd = false >> animate 24 do >> kd = keydown?(:up) >> end >> >> Can we have keydown in some form or another? >> >> -- >> ~devyn > > ________________________________ > Insert movie times and more without leaving Hotmail®. See how. > ________________________________ > Windows Live™: Keep your life in sync. Check it out. -- ~devyn
