{"id":156,"date":"2012-07-01T13:46:43","date_gmt":"2012-07-01T13:46:43","guid":{"rendered":"http:\/\/ifdesignelseart.com\/?p=156"},"modified":"2012-07-01T13:46:43","modified_gmt":"2012-07-01T13:46:43","slug":"savoir-si-plusieurs-touches-sont-pressees-simultanement","status":"publish","type":"post","link":"https:\/\/ifdesignelseart.com\/?p=156","title":{"rendered":"Savoir si plusieurs touches sont press\u00e9es simultan\u00e9ment"},"content":{"rendered":"<p>Pour les besoins d&rsquo;un jeu, par exemple, on peut avoir besoin de tester si plusieurs touches du clavier sont press\u00e9es en m\u00eame temps, mais Processing ne le permet pas directement et ses variables <strong>key<\/strong> (caract\u00e8re de la touche enfonc\u00e9e) et <strong>keyCode<\/strong> (code num\u00e9rique de la touche enfonc\u00e9e) ne conservent qu&rsquo;une seule r\u00e9f\u00e9rence, la derni\u00e8re.<\/p>\n<p>L&rsquo;astuce qui suit consiste \u00e0 cr\u00e9er un tableau\u00a0bool\u00e9en\u00a0(une \u00e9num\u00e9ration de valeurs qui sont soit<strong> true<\/strong> soit <strong>false<\/strong>) dont les valeurs sont chang\u00e9es \u00e0 chaque <strong>keyPressed()<\/strong> et <strong>keyReleased()<\/strong>, c&rsquo;est \u00e0 dire lorsque l&rsquo;on appuie sur une touche et lorsqu&rsquo;on l\u00e2che une touche. Ce tableau a une longueur de 128 \u00e9l\u00e9ments, ce qui doit suffire \u00e0 traiter tous les cas puisque le codage de caract\u00e8res ASCII contient 128 caract\u00e8res.<br \/>\nPour v\u00e9rifier si un caract\u00e8re est enfonc\u00e9, on utilise la fonction \u00ab\u00a0verifieClavier(n)\u00a0\u00bb o\u00f9 <strong>n<\/strong> sera soit un caract\u00e8re (&lsquo;a&rsquo;, &lsquo;z&rsquo;), soit un code (10 pour la touche Return, 32 pour la touche espace, etc.). La fonction renverra <strong>true<\/strong> ou <strong>false<\/strong>, selon le cas.<\/p>\n<pre class=\"brush:java\">\r\n\r\nboolean[] touches=new boolean[128];\r\n\r\nvoid draw(){\r\nbackground(0);\r\ntext(\" a : \"+verifieClavier('a')+\"\\n b : \"+verifieClavier('b')+\"\\n return : \"+verifieClavier(10)+\"\\n espace : \"+verifieClavier(32), 10, 10);\r\n}\r\n\r\nvoid keyPressed(){\r\ntouches[keyCode]=true;\r\n}\r\n\r\nvoid keyReleased(){\r\ntouches[keyCode]=false;\r\n}\r\n\r\nboolean verifieClavier(char c){\r\nint cc = int(c);\r\nif(cc&gt;96 &amp;&amp; cc&lt;123)cc-=32;\r\nreturn touches[cc];\r\n}\r\n\r\nboolean verifieClavier(int c){\r\nreturn touches[c];\r\n}\r\n\r\n<\/pre>\n<p>On peut imaginer beaucoup de variantes \u00e0 ces fonctions.<br \/>\nOn remarquera qu&rsquo;il existe deux <strong>verifieClavier()<\/strong>, \u00a0l&rsquo;un pour traiter les chiffres (ex. : <em>verifieClavier(32)<\/em> pour savoir si la touche \u00ab\u00a0espace\u00a0\u00bb est enfonc\u00e9e) et l&rsquo;autre pour traiter les caract\u00e8res (<em>verifieClavier(&lsquo;a&rsquo;)<\/em>).<br \/>\nLa seconde version fait une petite conversion afin qu&rsquo;il n&rsquo;y ait pas de diff\u00e9rence entre minuscules et majuscules : A et a sont trait\u00e9es comme une seule et m\u00eame lettre.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour les besoins d&rsquo;un jeu, par exemple, on peut avoir besoin de tester si plusieurs touches du clavier sont press\u00e9es en m\u00eame temps, mais Processing ne le permet pas directement et ses variables key (caract\u00e8re de la touche enfonc\u00e9e) et keyCode (code num\u00e9rique de la touche enfonc\u00e9e) ne conservent qu&rsquo;une seule r\u00e9f\u00e9rence, la derni\u00e8re. L&rsquo;astuce [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-156","post","type-post","status-publish","format-standard","hentry","category-tips"],"_links":{"self":[{"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=\/wp\/v2\/posts\/156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=156"}],"version-history":[{"count":0,"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=\/wp\/v2\/posts\/156\/revisions"}],"wp:attachment":[{"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ifdesignelseart.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}