[racket-dev] multiple key-press
Here's an example to see what is detectable. ALT and SHIFT are
interesting...try with lowercase first.
#lang racket
(require 2htdp/universe)
{require 2htdp/image}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Demonstrates how to detect multiple key presses ;;
;; - Only up to six or so keys are individually detectable ;;
;; -- my laptop does asdfjk ;;
;; - In some combinations, fewer individual keys are detectable ;;
;; -- my laptop does not do qzc ;;
;; - I think these limitations have to do with the hardware, ;;
;; so some keyboards may do better or worse ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NOTE: The ALT and SHIFT keys can break things in the current API
; Playing with them will generate some off but understandable behavior
; WorldState is a list of strings, indicating which keys are being held down
(define INIT_WORLD empty)
; key-handler: WorldState String -> WorldState
; purpose: Add key to the world without duplication
(define (key-handler ws key)
(if (not (member key ws))
(cons key ws)
ws))
; release-handler: WorldState String -> WorldState
; purpose: Remove all instances of key from the world
(define (release-handler ws key)
(if (member key ws)
(release-handler (remove key ws) key)
ws))
; render: WorldState -> Scene
; purpose: Provide a blank canvas in order to receive key events
(define (render ws)
(rectangle 300 300 "solid" "white"))
(big-bang INIT_WORLD (on-key key-handler) (on-release release-handler)
(state true) (on-draw render))
> -----Original Message-----
> From: dev-bounces at racket-lang.org [mailto:dev-bounces at racket-lang.org] On
> Behalf Of Matthias Felleisen
> Sent: Friday, July 23, 2010 10:14 AM
> To: PLT Developers
> Subject: Re: [racket-dev] multiple key-press
>
>
> Thanks for all the ideas. Just to clarify: this spring I modified the API
> of Universe to accommodate this form of 'multiple' keypresses. I have to
> work out examples and probably add one more handler to get this 'right'
> (for beginners). (The person who posted isn't really a beginner in the
> sense of novice but a kid who mastered a good amount of Java and was set
> loose on the beginning languages. Perhaps he should have been thrown at
> full Racket from the beginning.)
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/dev