input_handling.html 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>Input Handling :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/3.8/core/input/input_handling.html">
  8. <link rel="prev" href="../renderer/render_pipeline.html">
  9. <link rel="next" href="combo_moves.html">
  10. <meta name="keywords" content="keyinput, input, documentation">
  11. <meta name="generator" content="Antora 3.0.1">
  12. <link rel="stylesheet" href="../../../../_/css/site.css">
  13. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  14. <meta property="og:description" content="Input Handling">
  15. <meta property="og:title" content="jMonkeyEngine Docs">
  16. <link rel="stylesheet" href="../../../../_/css/site-extra.css">
  17. <link rel="stylesheet" href="../../../../_/css/vendor/docsearch.min.css">
  18. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css -->
  19. <link rel="icon" href="../../../../_/img/favicon.ico" type="image/x-icon">
  20. </head>
  21. <body class="article">
  22. <header class="header">
  23. <nav class="navbar">
  24. <div class="navbar-brand">
  25. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  26. <img alt="" src="../../../../_/img/jme-logo.png" height="32" type="image/x-icon">
  27. </a>
  28. <div class="navbar-item hide-for-print">
  29. <input id="search-input" type="text" placeholder="Search docs">
  30. </div>
  31. <button class="navbar-burger" data-target="topbar-nav">
  32. <span></span>
  33. <span></span>
  34. <span></span>
  35. </button>
  36. </div>
  37. <div id="topbar-nav" class="navbar-menu">
  38. <div class="navbar-end">
  39. <div class="navbar-item theme-switch-wrapper">
  40. <label class="theme-switch" for="checkbox">
  41. <input type="checkbox" id="checkbox" />
  42. <div class="slider round"></div>
  43. </label>
  44. </div>
  45. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  46. </div>
  47. </div>
  48. </nav>
  49. </header>
  50. <div class="body">
  51. <div class="nav-container" data-component="docs" data-version="3.8">
  52. <aside class="nav">
  53. <div class="panels">
  54. <div class="nav-panel-menu is-active" data-panel="menu">
  55. <nav class="nav-menu">
  56. <h3 class="title"><a href="../../documentation.html">JME</a></h3>
  57. <ul class="nav-list">
  58. <li class="nav-item" data-depth="0">
  59. <ul class="nav-list">
  60. <li class="nav-item" data-depth="1">
  61. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  62. </li>
  63. <li class="nav-item" data-depth="1">
  64. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.4.1-stable">JavaDoc</a>
  65. </li>
  66. <li class="nav-item" data-depth="1">
  67. <a class="nav-link" href="../../release.html">Release Guide</a>
  68. </li>
  69. </ul>
  70. </li>
  71. <li class="nav-item" data-depth="0">
  72. <ul class="nav-list">
  73. <li class="nav-item" data-depth="1">
  74. <button class="nav-item-toggle"></button>
  75. <a class="nav-link" href="../../tutorials/beginner/beginner.html">Beginner Tutorials</a>
  76. <ul class="nav-list">
  77. <li class="nav-item" data-depth="2">
  78. <a class="nav-link" href="../../tutorials/beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  79. </li>
  80. <li class="nav-item" data-depth="2">
  81. <a class="nav-link" href="../../tutorials/beginner/hello_node.html">Hello Node</a>
  82. </li>
  83. <li class="nav-item" data-depth="2">
  84. <a class="nav-link" href="../../tutorials/beginner/hello_asset.html">Hello Asset</a>
  85. </li>
  86. <li class="nav-item" data-depth="2">
  87. <a class="nav-link" href="../../tutorials/beginner/hello_main_event_loop.html">Hello Update Loop</a>
  88. </li>
  89. <li class="nav-item" data-depth="2">
  90. <a class="nav-link" href="../../tutorials/beginner/hello_input_system.html">Hello Input System</a>
  91. </li>
  92. <li class="nav-item" data-depth="2">
  93. <a class="nav-link" href="../../tutorials/beginner/hello_material.html">Hello Material</a>
  94. </li>
  95. <li class="nav-item" data-depth="2">
  96. <a class="nav-link" href="../../tutorials/beginner/hello_animation.html">Hello Animation</a>
  97. </li>
  98. <li class="nav-item" data-depth="2">
  99. <a class="nav-link" href="../../tutorials/beginner/hello_picking.html">Hello Picking</a>
  100. </li>
  101. <li class="nav-item" data-depth="2">
  102. <a class="nav-link" href="../../tutorials/beginner/hello_collision.html">Hello Collision</a>
  103. </li>
  104. <li class="nav-item" data-depth="2">
  105. <a class="nav-link" href="../../tutorials/beginner/hello_terrain.html">Hello Terrain</a>
  106. </li>
  107. <li class="nav-item" data-depth="2">
  108. <a class="nav-link" href="../../tutorials/beginner/hello_audio.html">Hello Audio</a>
  109. </li>
  110. <li class="nav-item" data-depth="2">
  111. <a class="nav-link" href="../../tutorials/beginner/hello_effects.html">Hello Effects</a>
  112. </li>
  113. <li class="nav-item" data-depth="2">
  114. <a class="nav-link" href="../../tutorials/beginner/hello_physics.html">Hello Physics</a>
  115. </li>
  116. </ul>
  117. </li>
  118. <li class="nav-item" data-depth="1">
  119. <button class="nav-item-toggle"></button>
  120. <span class="nav-text">Key Concepts</span>
  121. <ul class="nav-list">
  122. <li class="nav-item" data-depth="2">
  123. <a class="nav-link" href="../../tutorials/concepts/best_practices.html">Best Practices</a>
  124. </li>
  125. <li class="nav-item" data-depth="2">
  126. <a class="nav-link" href="../../tutorials/concepts/optimization.html">Optimization</a>
  127. </li>
  128. <li class="nav-item" data-depth="2">
  129. <a class="nav-link" href="../../tutorials/concepts/faq.html">Frequently Asked Questions</a>
  130. </li>
  131. <li class="nav-item" data-depth="2">
  132. <a class="nav-link" href="../../tutorials/concepts/math_for_dummies.html">Math for Dummies</a>
  133. </li>
  134. <li class="nav-item" data-depth="2">
  135. <a class="nav-link" href="../../tutorials/concepts/math.html">Math overview</a>
  136. </li>
  137. <li class="nav-item" data-depth="2">
  138. <a class="nav-link" href="../../tutorials/concepts/math_cheet_sheet.html">3D math "cheat sheet"</a>
  139. </li>
  140. <li class="nav-item" data-depth="2">
  141. <a class="nav-link" href="../../tutorials/concepts/rotate.html">3-D Rotation</a>
  142. </li>
  143. <li class="nav-item" data-depth="2">
  144. <a class="nav-link" href="../../tutorials/concepts/math_video_tutorials.html">Math video tutorial series</a>
  145. </li>
  146. <li class="nav-item" data-depth="2">
  147. <a class="nav-link" href="../../tutorials/concepts/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  148. </li>
  149. <li class="nav-item" data-depth="2">
  150. <a class="nav-link" href="../../tutorials/concepts/the_scene_graph.html">The Scene Graph</a>
  151. </li>
  152. <li class="nav-item" data-depth="2">
  153. <a class="nav-link" href="../../tutorials/concepts/scenegraph_for_dummies.html">Scene Graph for Dummies</a>
  154. </li>
  155. <li class="nav-item" data-depth="2">
  156. <a class="nav-link" href="../../tutorials/concepts/terminology.html">3D Graphics Terminology</a>
  157. </li>
  158. <li class="nav-item" data-depth="2">
  159. <a class="nav-link" href="../../tutorials/concepts/transparency_sorting.html">Transparency Sorting</a>
  160. </li>
  161. </ul>
  162. </li>
  163. <li class="nav-item" data-depth="1">
  164. <button class="nav-item-toggle"></button>
  165. <span class="nav-text">Articles and How-to&#8217;s</span>
  166. <ul class="nav-list">
  167. <li class="nav-item" data-depth="2">
  168. <button class="nav-item-toggle"></button>
  169. <span class="nav-text">How to Model</span>
  170. <ul class="nav-list">
  171. <li class="nav-item" data-depth="3">
  172. <a class="nav-link" href="../../tutorials/how-to/modeling/3dsmax/3dsmax.html">3dsmax</a>
  173. </li>
  174. <li class="nav-item" data-depth="3">
  175. <button class="nav-item-toggle"></button>
  176. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/blender.html">Blender</a>
  177. <ul class="nav-list">
  178. <li class="nav-item" data-depth="4">
  179. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/blender_buffer_clearing.html">Buffer Clearing</a>
  180. </li>
  181. <li class="nav-item" data-depth="4">
  182. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/blender_gltf.html">Export as GlTF</a>
  183. </li>
  184. <li class="nav-item" data-depth="4">
  185. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/blender_ogre_export.html">Export as Ogre XML</a>
  186. </li>
  187. <li class="nav-item" data-depth="4">
  188. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/blender_ogre_compatibility.html">Ogre Compatibility</a>
  189. </li>
  190. <li class="nav-item" data-depth="4">
  191. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/makehuman.html">MakeHuman</a>
  192. </li>
  193. <li class="nav-item" data-depth="4">
  194. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/makehuman_blender_ogrexml_toolchain.html">MakeHuman toolchain</a>
  195. </li>
  196. </ul>
  197. </li>
  198. </ul>
  199. </li>
  200. <li class="nav-item" data-depth="2">
  201. <button class="nav-item-toggle"></button>
  202. <span class="nav-text">How to Animate</span>
  203. <ul class="nav-list">
  204. <li class="nav-item" data-depth="3">
  205. <button class="nav-item-toggle"></button>
  206. <span class="nav-text">Mixamo</span>
  207. <ul class="nav-list">
  208. <li class="nav-item" data-depth="4">
  209. <a class="nav-link" href="../../tutorials/how-to/modeling/blender/mixamo.html">Blender Models</a>
  210. </li>
  211. </ul>
  212. </li>
  213. </ul>
  214. </li>
  215. <li class="nav-item" data-depth="2">
  216. <a class="nav-link" href="../../tutorials/how-to/debugging.html">Debugging with Wireframes</a>
  217. </li>
  218. <li class="nav-item" data-depth="2">
  219. <a class="nav-link" href="../../tutorials/how-to/util/free_skymaps.html">How to create free skymaps</a>
  220. </li>
  221. <li class="nav-item" data-depth="2">
  222. <button class="nav-item-toggle"></button>
  223. <span class="nav-text">Java Tips</span>
  224. <ul class="nav-list">
  225. <li class="nav-item" data-depth="3">
  226. <a class="nav-link" href="../../tutorials/how-to/java/localization.html">Localization</a>
  227. </li>
  228. <li class="nav-item" data-depth="3">
  229. <a class="nav-link" href="../../tutorials/how-to/java/swing_canvas.html">Swing Canvas</a>
  230. </li>
  231. <li class="nav-item" data-depth="3">
  232. <a class="nav-link" href="../../tutorials/how-to/java/logging.html">Logging</a>
  233. </li>
  234. <li class="nav-item" data-depth="3">
  235. <a class="nav-link" href="../../tutorials/how-to/java/read_graphic_card_capabilites.html">Read Graphics Capabilities</a>
  236. </li>
  237. </ul>
  238. </li>
  239. <li class="nav-item" data-depth="2">
  240. <button class="nav-item-toggle"></button>
  241. <span class="nav-text">Articles</span>
  242. <ul class="nav-list">
  243. <li class="nav-item" data-depth="3">
  244. <button class="nav-item-toggle"></button>
  245. <span class="nav-text">Physically Based Rendering</span>
  246. <ul class="nav-list">
  247. <li class="nav-item" data-depth="4">
  248. <a class="nav-link" href="../../tutorials/how-to/articles/pbr/pbr_part1.html">PBR – Part one</a>
  249. </li>
  250. <li class="nav-item" data-depth="4">
  251. <a class="nav-link" href="../../tutorials/how-to/articles/pbr/pbr_part2.html">PBR – Part two</a>
  252. </li>
  253. <li class="nav-item" data-depth="4">
  254. <a class="nav-link" href="../../tutorials/how-to/articles/pbr/pbr_part3.html">PBR – Part three</a>
  255. </li>
  256. </ul>
  257. </li>
  258. </ul>
  259. </li>
  260. </ul>
  261. </li>
  262. </ul>
  263. </li>
  264. <li class="nav-item" data-depth="0">
  265. <ul class="nav-list">
  266. <li class="nav-item" data-depth="1">
  267. <button class="nav-item-toggle"></button>
  268. <span class="nav-text">Core Engine</span>
  269. <ul class="nav-list">
  270. <li class="nav-item" data-depth="2">
  271. <a class="nav-link" href="../app/simpleapplication.html">SimpleApplication</a>
  272. </li>
  273. <li class="nav-item" data-depth="2">
  274. <a class="nav-link" href="../system/appsettings.html">AppSettings</a>
  275. </li>
  276. </ul>
  277. </li>
  278. <li class="nav-item" data-depth="1">
  279. <button class="nav-item-toggle"></button>
  280. <span class="nav-text">Controlling Game Logic</span>
  281. <ul class="nav-list">
  282. <li class="nav-item" data-depth="2">
  283. <a class="nav-link" href="../app/update_loop.html">Update Loop</a>
  284. </li>
  285. <li class="nav-item" data-depth="2">
  286. <a class="nav-link" href="../app/state/application_states.html">Application States</a>
  287. </li>
  288. <li class="nav-item" data-depth="2">
  289. <button class="nav-item-toggle"></button>
  290. <a class="nav-link" href="../scene/control/custom_controls.html">Custom Controls</a>
  291. <ul class="nav-list">
  292. <li class="nav-item" data-depth="3">
  293. <button class="nav-item-toggle"></button>
  294. <span class="nav-text">Video</span>
  295. <ul class="nav-list">
  296. <li class="nav-item" data-depth="4">
  297. <a class="nav-link" href="https://www.youtube.com/watch?v=MNDiZ9YHIpM">Control any scene node</a>
  298. </li>
  299. <li class="nav-item" data-depth="4">
  300. <a class="nav-link" href="https://www.youtube.com/watch?v=-OzRZscLlHY">Control a character</a>
  301. </li>
  302. <li class="nav-item" data-depth="4">
  303. <a class="nav-link" href="https://wiki.jmonkeyengine.org/Scenes/SDK-UsecaseDemo_1.zip">Video Source Code</a>
  304. </li>
  305. </ul>
  306. </li>
  307. </ul>
  308. </li>
  309. <li class="nav-item" data-depth="2">
  310. <a class="nav-link" href="../app/multithreading.html">Multithreading</a>
  311. </li>
  312. </ul>
  313. </li>
  314. <li class="nav-item" data-depth="1">
  315. <button class="nav-item-toggle"></button>
  316. <span class="nav-text">Scene Graph</span>
  317. <ul class="nav-list">
  318. <li class="nav-item" data-depth="2">
  319. <a class="nav-link" href="../scene/traverse_scenegraph.html">Traverse SceneGraph</a>
  320. </li>
  321. <li class="nav-item" data-depth="2">
  322. <a class="nav-link" href="../scene/spatial.html">Spatial: Node vs Geometry</a>
  323. </li>
  324. <li class="nav-item" data-depth="2">
  325. <button class="nav-item-toggle"></button>
  326. <a class="nav-link" href="../scene/mesh.html">Mesh</a>
  327. <ul class="nav-list">
  328. <li class="nav-item" data-depth="3">
  329. <a class="nav-link" href="../scene/custom_meshes.html">Custom Meshes</a>
  330. </li>
  331. <li class="nav-item" data-depth="3">
  332. <a class="nav-link" href="../scene/shape/shape.html">Shape</a>
  333. </li>
  334. <li class="nav-item" data-depth="3">
  335. <a class="nav-link" href="../scene/3d_models.html">3D Models</a>
  336. </li>
  337. </ul>
  338. </li>
  339. <li class="nav-item" data-depth="2">
  340. <a class="nav-link" href="../asset/asset_manager.html">Asset Manager</a>
  341. </li>
  342. <li class="nav-item" data-depth="2">
  343. <a class="nav-link" href="../export/save_and_load.html">Saving and Loading Nodes</a>
  344. </li>
  345. <li class="nav-item" data-depth="2">
  346. <a class="nav-link" href="../collision/collision_and_intersection.html">Collision and Intersection</a>
  347. </li>
  348. <li class="nav-item" data-depth="2">
  349. <a class="nav-link" href="../scene/control/level_of_detail.html">Level of Detail</a>
  350. </li>
  351. </ul>
  352. </li>
  353. <li class="nav-item" data-depth="1">
  354. <button class="nav-item-toggle"></button>
  355. <span class="nav-text">Animation, Scene</span>
  356. <ul class="nav-list">
  357. <li class="nav-item" data-depth="2">
  358. <a class="nav-link" href="../animation/animation_new.html">Animation with AnimComposer</a>
  359. </li>
  360. <li class="nav-item" data-depth="2">
  361. <a class="nav-link" href="../animation/animation.html">Animation-Old (AnimControl)</a>
  362. </li>
  363. <li class="nav-item" data-depth="2">
  364. <a class="nav-link" href="../cinematic/cinematics.html">Cinematics (cutscenes, fake destruction physics)</a>
  365. </li>
  366. <li class="nav-item" data-depth="2">
  367. <a class="nav-link" href="../cinematic/motionpath.html">MotionPaths and Waypoints</a>
  368. </li>
  369. </ul>
  370. </li>
  371. <li class="nav-item" data-depth="1">
  372. <button class="nav-item-toggle"></button>
  373. <span class="nav-text">Material, Light, Shadow</span>
  374. <ul class="nav-list">
  375. <li class="nav-item" data-depth="2">
  376. <a class="nav-link" href="../material/how_to_use_materials.html">How to use Materials</a>
  377. </li>
  378. <li class="nav-item" data-depth="2">
  379. <a class="nav-link" href="../material/j3m_material_files.html">.j3m Material Files</a>
  380. </li>
  381. <li class="nav-item" data-depth="2">
  382. <a class="nav-link" href="../material/material_definitions.html">.j3md Material Definitions</a>
  383. </li>
  384. <li class="nav-item" data-depth="2">
  385. <a class="nav-link" href="../material/materials_overview.html">.j3md Properties</a>
  386. </li>
  387. <li class="nav-item" data-depth="2">
  388. <a class="nav-link" href="../shader/jme3_shaders.html">Shaders and JME3</a>
  389. </li>
  390. <li class="nav-item" data-depth="2">
  391. <a class="nav-link" href="../shader/jme3_shadernodes.html">Shader Node System</a>
  392. </li>
  393. <li class="nav-item" data-depth="2">
  394. <a class="nav-link" href="../shader/shader_video_tutorials.html">Shader Video Tutorials</a>
  395. </li>
  396. <li class="nav-item" data-depth="2">
  397. <a class="nav-link" href="../light/light_and_shadow.html">Light and Shadow</a>
  398. </li>
  399. <li class="nav-item" data-depth="2">
  400. <a class="nav-link" href="../texture/anisotropic_filtering.html">Anisotropic Filtering</a>
  401. </li>
  402. <li class="nav-item" data-depth="2">
  403. <a class="nav-link" href="../system/jme3_srgbpipeline.html">Gamma Correction</a>
  404. </li>
  405. <li class="nav-item" data-depth="2">
  406. <a class="nav-link" href="../material/normal_types.html">Normal Map Conventions</a>
  407. </li>
  408. </ul>
  409. </li>
  410. <li class="nav-item" data-depth="1">
  411. <button class="nav-item-toggle"></button>
  412. <span class="nav-text">Audio, Video</span>
  413. <ul class="nav-list">
  414. <li class="nav-item" data-depth="2">
  415. <a class="nav-link" href="../audio/audio.html">Playing Sounds</a>
  416. </li>
  417. <li class="nav-item" data-depth="2">
  418. <a class="nav-link" href="../audio/audio_environment_presets.html">Audio Environment Presets</a>
  419. </li>
  420. <li class="nav-item" data-depth="2">
  421. <a class="nav-link" href="../app/state/screenshots.html">Capture Screenshots</a>
  422. </li>
  423. <li class="nav-item" data-depth="2">
  424. <a class="nav-link" href="../app/state/capture_audio_video_to_a_file.html">Capture Audio/Video</a>
  425. </li>
  426. </ul>
  427. </li>
  428. <li class="nav-item" data-depth="1">
  429. <button class="nav-item-toggle"></button>
  430. <span class="nav-text">Filter, Effect</span>
  431. <ul class="nav-list">
  432. <li class="nav-item" data-depth="2">
  433. <a class="nav-link" href="../effect/effects_overview.html">Overview</a>
  434. </li>
  435. <li class="nav-item" data-depth="2">
  436. <a class="nav-link" href="../effect/bloom_and_glow.html">Bloom and Glow</a>
  437. </li>
  438. <li class="nav-item" data-depth="2">
  439. <a class="nav-link" href="../effect/particle_emitters.html">Particle Emitters</a>
  440. </li>
  441. </ul>
  442. </li>
  443. <li class="nav-item" data-depth="1">
  444. <button class="nav-item-toggle"></button>
  445. <span class="nav-text">Landscapes</span>
  446. <ul class="nav-list">
  447. <li class="nav-item" data-depth="2">
  448. <a class="nav-link" href="../util/sky.html">Sky</a>
  449. </li>
  450. <li class="nav-item" data-depth="2">
  451. <a class="nav-link" href="../terrain/terrain.html">Terrain (TerraMonkey)</a>
  452. </li>
  453. <li class="nav-item" data-depth="2">
  454. <a class="nav-link" href="../collision/terrain_collision.html">Terrain Collision</a>
  455. </li>
  456. <li class="nav-item" data-depth="2">
  457. <a class="nav-link" href="../effect/water.html">Simple Water</a>
  458. </li>
  459. <li class="nav-item" data-depth="2">
  460. <a class="nav-link" href="../effect/post-processor_water.html">Post-Processor Water</a>
  461. </li>
  462. </ul>
  463. </li>
  464. <li class="nav-item" data-depth="1">
  465. <button class="nav-item-toggle"></button>
  466. <span class="nav-text">Camera</span>
  467. <ul class="nav-list">
  468. <li class="nav-item" data-depth="2">
  469. <a class="nav-link" href="../renderer/camera.html">Camera</a>
  470. </li>
  471. <li class="nav-item" data-depth="2">
  472. <a class="nav-link" href="../renderer/making_the_camera_follow_a_character.html">Follow a Character</a>
  473. </li>
  474. <li class="nav-item" data-depth="2">
  475. <a class="nav-link" href="../renderer/remote-controlling_the_camera.html">Remote-Controlling</a>
  476. </li>
  477. <li class="nav-item" data-depth="2">
  478. <a class="nav-link" href="../renderer/multiple_camera_views.html">Multiple Camera Views</a>
  479. </li>
  480. <li class="nav-item" data-depth="2">
  481. <a class="nav-link" href="../renderer/jme3_renderbuckets.html">Render Buckets</a>
  482. </li>
  483. </ul>
  484. </li>
  485. <li class="nav-item" data-depth="1">
  486. <button class="nav-item-toggle"></button>
  487. <span class="nav-text">Rendering</span>
  488. <ul class="nav-list">
  489. <li class="nav-item" data-depth="2">
  490. <a class="nav-link" href="../renderer/render_pipeline.html">Render Pipelines</a>
  491. </li>
  492. </ul>
  493. </li>
  494. <li class="nav-item" data-depth="1">
  495. <button class="nav-item-toggle"></button>
  496. <span class="nav-text">User Interaction</span>
  497. <ul class="nav-list">
  498. <li class="nav-item is-current-page" data-depth="2">
  499. <a class="nav-link" href="input_handling.html">Input Handling</a>
  500. </li>
  501. <li class="nav-item" data-depth="2">
  502. <a class="nav-link" href="combo_moves.html">Combo Moves</a>
  503. </li>
  504. <li class="nav-item" data-depth="2">
  505. <a class="nav-link" href="mouse_picking.html">Mouse Picking</a>
  506. </li>
  507. </ul>
  508. </li>
  509. <li class="nav-item" data-depth="1">
  510. <button class="nav-item-toggle"></button>
  511. <a class="nav-link" href="../gui/topic_gui.html">Graphical User Interface</a>
  512. <ul class="nav-list">
  513. <li class="nav-item" data-depth="2">
  514. <button class="nav-item-toggle"></button>
  515. <span class="nav-text">Nifty GUI</span>
  516. <ul class="nav-list">
  517. <li class="nav-item" data-depth="3">
  518. <a class="nav-link" href="../gui/nifty_gui.html">Integration Tutorial</a>
  519. </li>
  520. <li class="nav-item" data-depth="3">
  521. <a class="nav-link" href="../gui/nifty_gui_best_practices.html">Best Practices</a>
  522. </li>
  523. <li class="nav-item" data-depth="3">
  524. <a class="nav-link" href="../gui/nifty_gui_scenarios.html">Scenarios</a>
  525. </li>
  526. </ul>
  527. </li>
  528. <li class="nav-item" data-depth="2">
  529. <a class="nav-link" href="../ui/hud.html">Head-Up Display (HUD)</a>
  530. </li>
  531. </ul>
  532. </li>
  533. <li class="nav-item" data-depth="1">
  534. <button class="nav-item-toggle"></button>
  535. <span class="nav-text">Virtual Reality</span>
  536. <ul class="nav-list">
  537. <li class="nav-item" data-depth="2">
  538. <a class="nav-link" href="../vr/virtualreality.html">Virtual Reality</a>
  539. </li>
  540. <li class="nav-item" data-depth="2">
  541. <a class="nav-link" href="../vr/legacyOpenVr.html">Virtual Reality Legacy Support</a>
  542. </li>
  543. <li class="nav-item" data-depth="2">
  544. <a class="nav-link" href="../vr/virtualrealitycontrollers.html">Virtual Reality Legacy Controller Support</a>
  545. </li>
  546. </ul>
  547. </li>
  548. </ul>
  549. </li>
  550. <li class="nav-item" data-depth="0">
  551. <ul class="nav-list">
  552. <li class="nav-item" data-depth="1">
  553. <button class="nav-item-toggle"></button>
  554. <a class="nav-link" href="../../physics/physics.html">Physics</a>
  555. <ul class="nav-list">
  556. <li class="nav-item" data-depth="2">
  557. <a class="nav-link" href="../../physics/bullet_multithreading.html">Multi-Threaded Physics</a>
  558. </li>
  559. <li class="nav-item" data-depth="2">
  560. <a class="nav-link" href="../../physics/collision/physics_listeners.html">Collision Detection</a>
  561. </li>
  562. <li class="nav-item" data-depth="2">
  563. <a class="nav-link" href="../../physics/joint/hinges_and_joints.html">Hinges and Joints</a>
  564. </li>
  565. <li class="nav-item" data-depth="2">
  566. <a class="nav-link" href="../../physics/control/walking_character.html">Walking Character</a>
  567. </li>
  568. <li class="nav-item" data-depth="2">
  569. <a class="nav-link" href="../../physics/control/ragdoll.html">Ragdoll</a>
  570. </li>
  571. <li class="nav-item" data-depth="2">
  572. <a class="nav-link" href="../../physics/control/vehicles.html">Vehicles</a>
  573. </li>
  574. <li class="nav-item" data-depth="2">
  575. <a class="nav-link" href="../../physics/control/softbody.html">Softbody</a>
  576. </li>
  577. <li class="nav-item" data-depth="2">
  578. <a class="nav-link" href="../../physics/bullet_pitfalls.html">Bullet Physics Pitfalls</a>
  579. </li>
  580. </ul>
  581. </li>
  582. </ul>
  583. </li>
  584. <li class="nav-item" data-depth="0">
  585. <ul class="nav-list">
  586. <li class="nav-item" data-depth="1">
  587. <button class="nav-item-toggle"></button>
  588. <span class="nav-text">Networking</span>
  589. <ul class="nav-list">
  590. <li class="nav-item" data-depth="2">
  591. <a class="nav-link" href="../../networking/networking.html">Networking (SpiderMonkey)</a>
  592. </li>
  593. <li class="nav-item" data-depth="2">
  594. <a class="nav-link" href="../../networking/headless_server.html">Headless Server</a>
  595. </li>
  596. <li class="nav-item" data-depth="2">
  597. <a class="nav-link" href="../../networking/monkey_zone.html">Multi-Player Demo Code</a>
  598. </li>
  599. <li class="nav-item" data-depth="2">
  600. <a class="nav-link" href="../../networking/networking_video_tutorials.html">Networking Video Tutorials</a>
  601. </li>
  602. </ul>
  603. </li>
  604. </ul>
  605. </li>
  606. <li class="nav-item" data-depth="0">
  607. <ul class="nav-list">
  608. <li class="nav-item" data-depth="1">
  609. <button class="nav-item-toggle"></button>
  610. <span class="nav-text">User Contributions</span>
  611. <ul class="nav-list">
  612. <li class="nav-item" data-depth="2">
  613. <a class="nav-link" href="../../contributions/contributions.html">User Made Utilities</a>
  614. </li>
  615. <li class="nav-item" data-depth="2">
  616. <button class="nav-item-toggle"></button>
  617. <span class="nav-text">Shader</span>
  618. <ul class="nav-list">
  619. <li class="nav-item" data-depth="3">
  620. <a class="nav-link" href="../../contributions/shader/shaderblow_project.html">ShaderBlow Project</a>
  621. </li>
  622. </ul>
  623. </li>
  624. <li class="nav-item" data-depth="2">
  625. <button class="nav-item-toggle"></button>
  626. <span class="nav-text">Landscapes</span>
  627. <ul class="nav-list">
  628. <li class="nav-item" data-depth="3">
  629. <a class="nav-link" href="../../contributions/lanscapes/vegetationsystem/vegetationsystem.html">Vegetation System</a>
  630. </li>
  631. </ul>
  632. </li>
  633. <li class="nav-item" data-depth="2">
  634. <button class="nav-item-toggle"></button>
  635. <span class="nav-text">Networking</span>
  636. <ul class="nav-list">
  637. <li class="nav-item" data-depth="3">
  638. <a class="nav-link" href="../../contributions/networking/open_game_finder.html">Open Game Finder</a>
  639. </li>
  640. </ul>
  641. </li>
  642. <li class="nav-item" data-depth="2">
  643. <button class="nav-item-toggle"></button>
  644. <span class="nav-text">Entity System</span>
  645. <ul class="nav-list">
  646. <li class="nav-item" data-depth="3">
  647. <a class="nav-link" href="#es/entitysystem.adoc">The Zay-ES Entity System</a>
  648. </li>
  649. </ul>
  650. </li>
  651. <li class="nav-item" data-depth="2">
  652. <button class="nav-item-toggle"></button>
  653. <span class="nav-text">Artificial Intelligence</span>
  654. <ul class="nav-list">
  655. <li class="nav-item" data-depth="3">
  656. <a class="nav-link" href="../../contributions/ai/recast.html">Recast Navigation</a>
  657. </li>
  658. <li class="nav-item" data-depth="3">
  659. <a class="nav-link" href="../../contributions/ai/building_recast.html">Updating and building Recast Native Bindings</a>
  660. </li>
  661. <li class="nav-item" data-depth="3">
  662. <a class="nav-link" href="../../contributions/ai/monkey_brains.html">Monkey Brains</a>
  663. </li>
  664. <li class="nav-item" data-depth="3">
  665. <a class="nav-link" href="../../contributions/ai/steer_behaviours.html">Steer Behaviours</a>
  666. </li>
  667. <li class="nav-item" data-depth="3">
  668. <a class="nav-link" href="../../contributions/ai/jme3_ai.html">jME3 Artificial Intelligence</a>
  669. </li>
  670. </ul>
  671. </li>
  672. <li class="nav-item" data-depth="2">
  673. <button class="nav-item-toggle"></button>
  674. <a class="nav-link" href="../../contributions/gui/topic_contributions_gui.html">GUI</a>
  675. <ul class="nav-list">
  676. <li class="nav-item" data-depth="3">
  677. <a class="nav-link" href="../../contributions/contributions.html#lemur-gui-library">Lemur - a native jME3 GUI library with scene graph tools</a>
  678. </li>
  679. <li class="nav-item" data-depth="3">
  680. <a class="nav-link" href="../../contributions/contributions.html#tonegodgui">tonegodGUI - a native jME3 GUI library</a>
  681. </li>
  682. <li class="nav-item" data-depth="3">
  683. <a class="nav-link" href="../../contributions/contributions.html#immediate-graphical-user-interface">Immediate graphical user interface</a>
  684. </li>
  685. </ul>
  686. </li>
  687. <li class="nav-item" data-depth="2">
  688. <button class="nav-item-toggle"></button>
  689. <span class="nav-text">Tools</span>
  690. <ul class="nav-list">
  691. <li class="nav-item" data-depth="3">
  692. <a class="nav-link" href="../../contributions/tools/navigation.html">Mercator Projection Tool (Marine Navigation)</a>
  693. </li>
  694. <li class="nav-item" data-depth="3">
  695. <a class="nav-link" href="../../contributions/tools/charts.html">Visualizing Maps in JME3 (Marine Charts)</a>
  696. </li>
  697. </ul>
  698. </li>
  699. <li class="nav-item" data-depth="2">
  700. <button class="nav-item-toggle"></button>
  701. <a class="nav-link" href="../../contributions/vr/topic_contributions_vr.html">Virtual Reality (And augmented reality)</a>
  702. <ul class="nav-list">
  703. <li class="nav-item" data-depth="3">
  704. <a class="nav-link" href="../../contributions/contributions.html#tamarin-openxr">Tamarin OpenXR</a>
  705. </li>
  706. </ul>
  707. </li>
  708. <li class="nav-item" data-depth="2">
  709. <button class="nav-item-toggle"></button>
  710. <span class="nav-text">Projects</span>
  711. <ul class="nav-list">
  712. <li class="nav-item" data-depth="3">
  713. <a class="nav-link" href="../../contributions/projects/rise_of_mutants_project.html">Rise of Mutants Project</a>
  714. </li>
  715. </ul>
  716. </li>
  717. </ul>
  718. </li>
  719. </ul>
  720. </li>
  721. <li class="nav-item" data-depth="0">
  722. <ul class="nav-list">
  723. <li class="nav-item" data-depth="1">
  724. <button class="nav-item-toggle"></button>
  725. <a class="nav-link" href="../../sdk/sdk.html">SDK</a>
  726. <ul class="nav-list">
  727. <li class="nav-item" data-depth="2">
  728. <button class="nav-item-toggle"></button>
  729. <span class="nav-text">Video Tutorials</span>
  730. <ul class="nav-list">
  731. <li class="nav-item" data-depth="3">
  732. <button class="nav-item-toggle"></button>
  733. <span class="nav-text">SDK Use Case Tutorials</span>
  734. <ul class="nav-list">
  735. <li class="nav-item" data-depth="4">
  736. <a class="nav-link" href="http://www.youtube.com/watch?v=-OzRZscLlHY">Demo 1 (Quixote demo)</a>
  737. </li>
  738. <li class="nav-item" data-depth="4">
  739. <a class="nav-link" href="http://www.youtube.com/watch?v=6-YWxD3JByE">Demo 2 (Models and Materials)</a>
  740. </li>
  741. </ul>
  742. </li>
  743. <li class="nav-item" data-depth="3">
  744. <button class="nav-item-toggle"></button>
  745. <span class="nav-text">SDK Tutorials</span>
  746. <ul class="nav-list">
  747. <li class="nav-item" data-depth="4">
  748. <a class="nav-link" href="http://www.youtube.com/watch?v=M1_0pbeyJzI">Basics</a>
  749. </li>
  750. <li class="nav-item" data-depth="4">
  751. <a class="nav-link" href="http://www.youtube.com/watch?v=nL7woH40i5c">Importing Models</a>
  752. </li>
  753. <li class="nav-item" data-depth="4">
  754. <a class="nav-link" href="http://www.youtube.com/watch?v=DUmgAjiNzhY">Dragging&amp;Dropping Nodes</a>
  755. </li>
  756. <li class="nav-item" data-depth="4">
  757. <a class="nav-link" href="http://www.youtube.com/watch?v=ntPAmtsQ6eM">Scene Composing</a>
  758. </li>
  759. <li class="nav-item" data-depth="4">
  760. <a class="nav-link" href="http://www.youtube.com/watch?v=zgPV3W6dD4s">Terrain with Collision Shape</a>
  761. </li>
  762. <li class="nav-item" data-depth="4">
  763. <a class="nav-link" href="http://www.youtube.com/watch?v=Feu3-mrpolc">Working with Materials</a>
  764. </li>
  765. <li class="nav-item" data-depth="4">
  766. <a class="nav-link" href="http://www.youtube.com/watch?v=MNDiZ9YHIpM">Custom Controls</a>
  767. </li>
  768. <li class="nav-item" data-depth="4">
  769. <a class="nav-link" href="http://www.youtube.com/watch?v=oZnssg8TBWQ">WebStart Deployment</a>
  770. </li>
  771. <li class="nav-item" data-depth="4">
  772. <a class="nav-link" href="http://www.youtube.com/watch?v=D7JM4VMKqPc">Animation and Effect TrackEditing</a>
  773. </li>
  774. </ul>
  775. </li>
  776. </ul>
  777. </li>
  778. <li class="nav-item" data-depth="2">
  779. <button class="nav-item-toggle"></button>
  780. <span class="nav-text">Getting Started</span>
  781. <ul class="nav-list">
  782. <li class="nav-item" data-depth="3">
  783. <a class="nav-link" href="../../sdk/update_center.html">Updating jMonkeyEngine SDK</a>
  784. </li>
  785. <li class="nav-item" data-depth="3">
  786. <a class="nav-link" href="../../sdk/troubleshooting.html">Troubleshooting</a>
  787. </li>
  788. </ul>
  789. </li>
  790. <li class="nav-item" data-depth="2">
  791. <button class="nav-item-toggle"></button>
  792. <span class="nav-text">Java Development Features</span>
  793. <ul class="nav-list">
  794. <li class="nav-item" data-depth="3">
  795. <a class="nav-link" href="../../sdk/project_creation.html">Project Creation</a>
  796. </li>
  797. <li class="nav-item" data-depth="3">
  798. <a class="nav-link" href="../../sdk/code_editor.html">Code Editor and Palette</a>
  799. </li>
  800. <li class="nav-item" data-depth="3">
  801. <a class="nav-link" href="../../sdk/version_control.html">File Version Control</a>
  802. </li>
  803. <li class="nav-item" data-depth="3">
  804. <a class="nav-link" href="../../sdk/debugging_profiling_testing.html">Debug, Profile, Test</a>
  805. </li>
  806. <li class="nav-item" data-depth="3">
  807. <button class="nav-item-toggle"></button>
  808. <a class="nav-link" href="../../sdk/application_deployment.html">Application Deployment</a>
  809. <ul class="nav-list">
  810. <li class="nav-item" data-depth="4">
  811. <a class="nav-link" href="../../sdk/default_build_script.html">Default Build Script</a>
  812. </li>
  813. <li class="nav-item" data-depth="4">
  814. <a class="nav-link" href="../../sdk/android.html">Android</a>
  815. </li>
  816. <li class="nav-item" data-depth="4">
  817. <a class="nav-link" href="../../sdk/android_cheat_sheet.html">Android Cheat Sheet</a>
  818. </li>
  819. <li class="nav-item" data-depth="4">
  820. <a class="nav-link" href="../../sdk/ios.html">iOS</a>
  821. </li>
  822. </ul>
  823. </li>
  824. </ul>
  825. </li>
  826. <li class="nav-item" data-depth="2">
  827. <button class="nav-item-toggle"></button>
  828. <span class="nav-text">Unique Features</span>
  829. <ul class="nav-list">
  830. <li class="nav-item" data-depth="3">
  831. <button class="nav-item-toggle"></button>
  832. <a class="nav-link" href="../../sdk/model_loader_and_viewer.html">Import, View, Convert Models</a>
  833. <ul class="nav-list">
  834. <li class="nav-item" data-depth="4">
  835. <a class="nav-link" href="../../sdk/asset_packs.html">Asset Packs</a>
  836. </li>
  837. </ul>
  838. </li>
  839. <li class="nav-item" data-depth="3">
  840. <a class="nav-link" href="../../sdk/scene_explorer.html">The SceneExplorer</a>
  841. </li>
  842. <li class="nav-item" data-depth="3">
  843. <a class="nav-link" href="../../sdk/scene_composer.html">Composing a Scene</a>
  844. </li>
  845. <li class="nav-item" data-depth="3">
  846. <a class="nav-link" href="../../sdk/terrain_editor.html">Terrain Editor</a>
  847. </li>
  848. <li class="nav-item" data-depth="3">
  849. <a class="nav-link" href="../../sdk/sample_code.html">Sample Code</a>
  850. </li>
  851. <li class="nav-item" data-depth="3">
  852. <a class="nav-link" href="../../sdk/material_editing.html">Material Editing</a>
  853. </li>
  854. <li class="nav-item" data-depth="3">
  855. <a class="nav-link" href="../../sdk/font_creation.html">Creating Bitmap Fonts</a>
  856. </li>
  857. <li class="nav-item" data-depth="3">
  858. <button class="nav-item-toggle"></button>
  859. <a class="nav-link" href="https://hub.jmonkeyengine.org/t/effecttrack-and-audiotrack-editing-in-the-sdk/23378">Audio and Effect Track Editing</a>
  860. <ul class="nav-list">
  861. <li class="nav-item" data-depth="4">
  862. <a class="nav-link" href="https://www.youtube.com/watch?v=D7JM4VMKqPc">Video: Effect and AudioTrack editing in jMonkeyEngine 3 sdk</a>
  863. </li>
  864. </ul>
  865. </li>
  866. <li class="nav-item" data-depth="3">
  867. <a class="nav-link" href="../../sdk/filters.html">Post-Processor Filter Editor and Viewer</a>
  868. </li>
  869. <li class="nav-item" data-depth="3">
  870. <a class="nav-link" href="../app/state/application_states.html">Application States</a>
  871. </li>
  872. <li class="nav-item" data-depth="3">
  873. <a class="nav-link" href="../scene/control/custom_controls.html">Custom Controls</a>
  874. </li>
  875. <li class="nav-item" data-depth="3">
  876. <a class="nav-link" href="../../sdk/vehicle_creator.html">Vehicle Creator</a>
  877. </li>
  878. <li class="nav-item" data-depth="3">
  879. <a class="nav-link" href="../../sdk/assetbrowser.html">Asset Browser</a>
  880. </li>
  881. <li class="nav-item" data-depth="3">
  882. <a class="nav-link" href="../../sdk/animations.html">Animations</a>
  883. </li>
  884. </ul>
  885. </li>
  886. <li class="nav-item" data-depth="2">
  887. <button class="nav-item-toggle"></button>
  888. <span class="nav-text">Advanced Usage</span>
  889. <ul class="nav-list">
  890. <li class="nav-item" data-depth="3">
  891. <a class="nav-link" href="../../sdk/build_platform.html">Building jMonkeyEngine SDK</a>
  892. </li>
  893. <li class="nav-item" data-depth="3">
  894. <a class="nav-link" href="../../sdk/use_own_jme.html#.adoc">Using your own (modified) version of jME3 in jMonkeyEngine SDK</a>
  895. </li>
  896. <li class="nav-item" data-depth="3">
  897. <a class="nav-link" href="../../sdk/increasing_heap_memory.html">Increasing Heap Memory</a>
  898. </li>
  899. <li class="nav-item" data-depth="3">
  900. <a class="nav-link" href="../../sdk/log_files.html">Log Files</a>
  901. </li>
  902. </ul>
  903. </li>
  904. <li class="nav-item" data-depth="2">
  905. <button class="nav-item-toggle"></button>
  906. <span class="nav-text">Available external plugins</span>
  907. <ul class="nav-list">
  908. <li class="nav-item" data-depth="3">
  909. <a class="nav-link" href="../../contributions/contributions.html">Contributions</a>
  910. </li>
  911. <li class="nav-item" data-depth="3">
  912. <a class="nav-link" href="../../sdk/neotexture.html">Neo Texture Editor for procedural textures</a>
  913. </li>
  914. <li class="nav-item" data-depth="3">
  915. <a class="nav-link" href="http://www.youtube.com/watch?v=yS9a9o4WzL8">Video: Mesh Tool &amp; Physics Editor</a>
  916. </li>
  917. </ul>
  918. </li>
  919. <li class="nav-item" data-depth="2">
  920. <button class="nav-item-toggle"></button>
  921. <a class="nav-link" href="../../sdk/development.html">Developing plugins for jMonkeyEngine SDK</a>
  922. <ul class="nav-list">
  923. <li class="nav-item" data-depth="3">
  924. <a class="nav-link" href="../../sdk/development/setup.html">Creating a plugin</a>
  925. </li>
  926. <li class="nav-item" data-depth="3">
  927. <a class="nav-link" href="../../sdk/development/general.html">Creating components</a>
  928. </li>
  929. <li class="nav-item" data-depth="3">
  930. <a class="nav-link" href="../../sdk/development/scene.html">The Main Scene</a>
  931. </li>
  932. <li class="nav-item" data-depth="3">
  933. <a class="nav-link" href="../../sdk/development/sceneexplorer.html">The Scene Explorer</a>
  934. </li>
  935. <li class="nav-item" data-depth="3">
  936. <a class="nav-link" href="../../sdk/development/projects_assets.html">Projects and Assets</a>
  937. </li>
  938. <li class="nav-item" data-depth="3">
  939. <a class="nav-link" href="../../sdk/development/extension_library.html">Create a library plugin from a jar file</a>
  940. </li>
  941. <li class="nav-item" data-depth="3">
  942. <a class="nav-link" href="../../sdk/development/model_loader.html">Create a new or custom model filetype and loader</a>
  943. </li>
  944. </ul>
  945. </li>
  946. </ul>
  947. </li>
  948. </ul>
  949. </li>
  950. </ul>
  951. </nav>
  952. </div>
  953. <div class="nav-panel-explore" data-panel="explore">
  954. <div class="context">
  955. <span class="title">JME</span>
  956. <span class="version">3.8</span>
  957. </div>
  958. <ul class="components">
  959. <li class="component is-current">
  960. <span class="title">JME</span>
  961. <ul class="versions">
  962. <li class="version is-current">
  963. <a href="../../documentation.html">3.8</a>
  964. </li>
  965. <li class="version">
  966. <a href="../../../3.4/documentation.html">3.4</a>
  967. </li>
  968. <li class="version">
  969. <a href="../../../3.3/documentation.html">3.3</a>
  970. </li>
  971. <li class="version">
  972. <a href="../../../3.2/documentation.html">3.2</a>
  973. </li>
  974. </ul>
  975. </li>
  976. <li class="component">
  977. <span class="title">Wiki Contribution</span>
  978. <ul class="versions">
  979. <li class="version">
  980. <a href="../../../../docs-wiki/3.8/wiki_contributor.html">3.8</a>
  981. </li>
  982. </ul>
  983. </li>
  984. <li class="component">
  985. <span class="title">Wiki UI</span>
  986. <ul class="versions">
  987. <li class="version">
  988. <a href="../../../../wiki-ui/index.html">master</a>
  989. </li>
  990. </ul>
  991. </li>
  992. </ul>
  993. </div>
  994. </div>
  995. </aside>
  996. </div>
  997. <main class="article">
  998. <div class="toolbar" role="navigation">
  999. <button class="nav-toggle"></button>
  1000. <nav class="breadcrumbs" aria-label="breadcrumbs">
  1001. <ul>
  1002. <li><a href="../../documentation.html">JME</a></li>
  1003. <li>User Interaction</li>
  1004. <li><a href="input_handling.html">Input Handling</a></li>
  1005. </ul>
  1006. </nav>
  1007. <div class="page-versions">
  1008. <button class="version-menu-toggle" title="Show other versions of page">3.8</button>
  1009. <div class="version-menu">
  1010. <a class="version is-current" href="input_handling.html">3.8</a>
  1011. <a class="version" href="../../../3.4/core/input/input_handling.html">3.4</a>
  1012. <a class="version" href="../../../3.3/core/input/input_handling.html">3.3</a>
  1013. <a class="version" href="../../../3.2/core/input/input_handling.html">3.2</a>
  1014. </div>
  1015. </div>
  1016. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/core/pages/input/input_handling.adoc">Edit this Page</a></div>
  1017. </div>
  1018. <div class="content">
  1019. <article class="doc">
  1020. <h1 class="page">Input Handling</h1>
  1021. <div id="preamble">
  1022. <div class="sectionbody">
  1023. <div class="paragraph">
  1024. <p>Users interact with your jME3 application with different input devices – the mouse, the keyboard, or a joystick. To respond to inputs we use the <code>inputManager</code> object in <code>SimpleApplication</code>.</p>
  1025. </div>
  1026. <div class="paragraph">
  1027. <p>This is how you add interaction to your game:</p>
  1028. </div>
  1029. <div class="olist arabic">
  1030. <ol class="arabic">
  1031. <li>
  1032. <p>For each action, choose the trigger(s) (a key or mouse click etc)</p>
  1033. </li>
  1034. <li>
  1035. <p>For each action, add a trigger mapping to the inputManager</p>
  1036. </li>
  1037. <li>
  1038. <p>Create at least one listener in SimpleApplication</p>
  1039. </li>
  1040. <li>
  1041. <p>For each action, register its mappings to a listener</p>
  1042. </li>
  1043. <li>
  1044. <p>Implement each action in the listener</p>
  1045. </li>
  1046. </ol>
  1047. </div>
  1048. </div>
  1049. </div>
  1050. <div class="sect1">
  1051. <h2 id="code-samples"><a class="anchor" href="#code-samples"></a>Code Samples</h2>
  1052. <div class="sectionbody">
  1053. <div class="ulist">
  1054. <ul>
  1055. <li>
  1056. <p><a href="https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-examples/src/main/java/jme3test/input/TestControls.java">TestControls.java</a></p>
  1057. </li>
  1058. <li>
  1059. <p><a href="https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-examples/src/main/java/jme3test/input/TestJoystick.java">TestJoystick.java</a></p>
  1060. </li>
  1061. </ul>
  1062. </div>
  1063. </div>
  1064. </div>
  1065. <div class="sect1">
  1066. <h2 id="1-choose-trigger"><a class="anchor" href="#1-choose-trigger"></a>1. Choose Trigger</h2>
  1067. <div class="sectionbody">
  1068. <div class="paragraph">
  1069. <p>Choose one or several key/mouse events for the interaction. We use <code>KeyTrigger</code>, <code>MouseAxisTrigger</code>, <code>MouseButtonTrigger</code>, <code>JoyAxisTrigger</code> and <code>JoyButtonTrigger</code> constants from the <code>com.jme3.input.controls</code> package.</p>
  1070. </div>
  1071. <div class="admonitionblock note">
  1072. <table>
  1073. <tr>
  1074. <td class="icon">
  1075. <i class="fa icon-note" title="Note"></i>
  1076. </td>
  1077. <td class="content">
  1078. <div class="paragraph">
  1079. <p>The MouseAxis and JoyAxis triggers go along the X axis (right/left) or Y axis (up/down). These Triggers come with extra booleans for the negative half of the axis (left, down). Remember to write code that listens to the negative (true) and positive (false) axis!</p>
  1080. </div>
  1081. </td>
  1082. </tr>
  1083. </table>
  1084. </div>
  1085. <table class="tableblock frame-all grid-all stretch">
  1086. <colgroup>
  1087. <col style="width: 50%;">
  1088. <col style="width: 50%;">
  1089. </colgroup>
  1090. <thead>
  1091. <tr>
  1092. <th class="tableblock halign-left valign-top">Trigger</th>
  1093. <th class="tableblock halign-left valign-top">Code</th>
  1094. </tr>
  1095. </thead>
  1096. <tbody>
  1097. <tr>
  1098. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1099. <p>Mouse button: Left Click</p>
  1100. </div></div></td>
  1101. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1102. <p>MouseButtonTrigger(MouseInput.BUTTON_LEFT)</p>
  1103. </div></div></td>
  1104. </tr>
  1105. <tr>
  1106. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1107. <p>Mouse button: Right Click</p>
  1108. </div></div></td>
  1109. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1110. <p>MouseButtonTrigger(MouseInput.BUTTON_RIGHT)</p>
  1111. </div></div></td>
  1112. </tr>
  1113. <tr>
  1114. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1115. <p>Mouse button: Middle Click</p>
  1116. </div></div></td>
  1117. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1118. <p>MouseButtonTrigger(MouseInput.BUTTON_MIDDLE)</p>
  1119. </div></div></td>
  1120. </tr>
  1121. <tr>
  1122. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1123. <p>Mouse movement: Right</p>
  1124. </div></div></td>
  1125. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1126. <p>MouseAxisTrigger(MouseInput.AXIS_X, true)</p>
  1127. </div></div></td>
  1128. </tr>
  1129. <tr>
  1130. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1131. <p>Mouse movement: Left</p>
  1132. </div></div></td>
  1133. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1134. <p>MouseAxisTrigger(MouseInput.AXIS_X, false)</p>
  1135. </div></div></td>
  1136. </tr>
  1137. <tr>
  1138. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1139. <p>Mouse movement: Up</p>
  1140. </div></div></td>
  1141. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1142. <p>MouseAxisTrigger(MouseInput.AXIS_Y, true)</p>
  1143. </div></div></td>
  1144. </tr>
  1145. <tr>
  1146. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1147. <p>Mouse movement: Down</p>
  1148. </div></div></td>
  1149. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1150. <p>MouseAxisTrigger(MouseInput.AXIS_Y, false)</p>
  1151. </div></div></td>
  1152. </tr>
  1153. <tr>
  1154. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1155. <p>Mouse wheel: Up</p>
  1156. </div></div></td>
  1157. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1158. <p>MouseAxisTrigger(MouseInput.AXIS_WHEEL,false)</p>
  1159. </div></div></td>
  1160. </tr>
  1161. <tr>
  1162. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1163. <p>Mouse wheel: Down</p>
  1164. </div></div></td>
  1165. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1166. <p>MouseAxisTrigger(MouseInput.AXIS_WHEEL,true)</p>
  1167. </div></div></td>
  1168. </tr>
  1169. <tr>
  1170. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1171. <p>NumPad: 1, 2, 3, …</p>
  1172. </div></div></td>
  1173. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1174. <p>KeyTrigger(KeyInput.KEY_NUMPAD1) …</p>
  1175. </div></div></td>
  1176. </tr>
  1177. <tr>
  1178. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1179. <p>Keyboard: 1, 2 , 3, …</p>
  1180. </div></div></td>
  1181. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1182. <p>KeyTrigger(KeyInput.KEY_1) …</p>
  1183. </div></div></td>
  1184. </tr>
  1185. <tr>
  1186. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1187. <p>Keyboard: A, B, C, …</p>
  1188. </div></div></td>
  1189. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1190. <p>KeyTrigger(KeyInput.KEY_A) …</p>
  1191. </div></div></td>
  1192. </tr>
  1193. <tr>
  1194. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1195. <p>Keyboard: Spacebar</p>
  1196. </div></div></td>
  1197. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1198. <p>KeyTrigger(KeyInput.KEY_SPACE)</p>
  1199. </div></div></td>
  1200. </tr>
  1201. <tr>
  1202. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1203. <p>Keyboard: Shift</p>
  1204. </div></div></td>
  1205. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1206. <p>KeyTrigger(KeyInput.KEY_RSHIFT),<br>
  1207. KeyTrigger(KeyInput.KEY_LSHIFT)</p>
  1208. </div></div></td>
  1209. </tr>
  1210. <tr>
  1211. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1212. <p>Keyboard: F1, F2, …</p>
  1213. </div></div></td>
  1214. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1215. <p>KeyTrigger(KeyInput.KEY_F1) …</p>
  1216. </div></div></td>
  1217. </tr>
  1218. <tr>
  1219. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1220. <p>Keyboard: Return, Enter</p>
  1221. </div></div></td>
  1222. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1223. <p>KeyTrigger(KeyInput.KEY_RETURN),<br>
  1224. KeyTrigger(KeyInput.KEY_NUMPADENTER)</p>
  1225. </div></div></td>
  1226. </tr>
  1227. <tr>
  1228. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1229. <p>Keyboard: PageUp, PageDown</p>
  1230. </div></div></td>
  1231. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1232. <p>KeyTrigger(KeyInput.KEY_PGUP),<br>
  1233. KeyTrigger(KeyInput.KEY_PGDN)</p>
  1234. </div></div></td>
  1235. </tr>
  1236. <tr>
  1237. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1238. <p>Keyboard: Delete, Backspace</p>
  1239. </div></div></td>
  1240. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1241. <p>KeyTrigger(KeyInput.KEY_BACK),<br>
  1242. KeyTrigger(KeyInput.KEY_DELETE)</p>
  1243. </div></div></td>
  1244. </tr>
  1245. <tr>
  1246. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1247. <p>Keyboard: Escape</p>
  1248. </div></div></td>
  1249. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1250. <p>KeyTrigger(KeyInput.KEY_ESCAPE)</p>
  1251. </div></div></td>
  1252. </tr>
  1253. <tr>
  1254. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1255. <p>Keyboard: Arrows</p>
  1256. </div></div></td>
  1257. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1258. <p>KeyTrigger(KeyInput.KEY_DOWN),<br>
  1259. KeyTrigger(KeyInput.KEY_UP)<br>
  1260. KeyTrigger(KeyInput.KEY_LEFT), KeyTrigger(KeyInput.KEY_RIGHT)</p>
  1261. </div></div></td>
  1262. </tr>
  1263. <tr>
  1264. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1265. <p>Joystick Button:</p>
  1266. </div></div></td>
  1267. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1268. <p>JoyButtonTrigger(0, JoyInput.AXIS_POV_X),<br>
  1269. JoyButtonTrigger(0, JoyInput.AXIS_POV_Y) ?</p>
  1270. </div></div></td>
  1271. </tr>
  1272. <tr>
  1273. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1274. <p>Joystick Movement: Right</p>
  1275. </div></div></td>
  1276. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1277. <p>JoyAxisTrigger(0, JoyInput.AXIS_POV_X, true)</p>
  1278. </div></div></td>
  1279. </tr>
  1280. <tr>
  1281. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1282. <p>Joystick Movement: Left</p>
  1283. </div></div></td>
  1284. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1285. <p>JoyAxisTrigger(0, JoyInput.AXIS_POV_X, false)</p>
  1286. </div></div></td>
  1287. </tr>
  1288. <tr>
  1289. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1290. <p>Joystick Movement: Forward</p>
  1291. </div></div></td>
  1292. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1293. <p>JoyAxisTrigger(0, JoyInput.AXIS_POV_Z, true)</p>
  1294. </div></div></td>
  1295. </tr>
  1296. <tr>
  1297. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1298. <p>Joystick Movement: Backward</p>
  1299. </div></div></td>
  1300. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1301. <p>JoyAxisTrigger(0, JoyInput.AXIS_POV_Z, false)</p>
  1302. </div></div></td>
  1303. </tr>
  1304. </tbody>
  1305. </table>
  1306. <div class="paragraph">
  1307. <p>In your IDE, use code completion to quickly look up Trigger literals. In the jMonkeyEngine SDK for example, press ctrl-space or ctrl-/ after <code>KeyInput.|</code> to choose from the list of all keys.</p>
  1308. </div>
  1309. </div>
  1310. </div>
  1311. <div class="sect1">
  1312. <h2 id="2-remove-default-trigger-mappings"><a class="anchor" href="#2-remove-default-trigger-mappings"></a>2. Remove Default Trigger Mappings</h2>
  1313. <div class="sectionbody">
  1314. <div class="listingblock">
  1315. <div class="content">
  1316. <pre class="highlightjs highlight"><code class="language-none hljs">inputManager.deleteMapping( SimpleApplication.INPUT_MAPPING_MEMORY );</code></pre>
  1317. </div>
  1318. </div>
  1319. <table class="tableblock frame-all grid-all stretch">
  1320. <colgroup>
  1321. <col style="width: 33.3333%;">
  1322. <col style="width: 33.3333%;">
  1323. <col style="width: 33.3334%;">
  1324. </colgroup>
  1325. <thead>
  1326. <tr>
  1327. <th class="tableblock halign-left valign-top">Default Mapping</th>
  1328. <th class="tableblock halign-left valign-top">Key</th>
  1329. <th class="tableblock halign-left valign-top">Description</th>
  1330. </tr>
  1331. </thead>
  1332. <tbody>
  1333. <tr>
  1334. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1335. <p>INPUT_MAPPING_HIDE_STATS</p>
  1336. </div></div></td>
  1337. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1338. <p>F5</p>
  1339. </div></div></td>
  1340. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1341. <p>Hides the statistics in the bottom left.</p>
  1342. </div></div></td>
  1343. </tr>
  1344. <tr>
  1345. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1346. <p>INPUT_MAPPING_CAMERA_POS</p>
  1347. </div></div></td>
  1348. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1349. <p>KEY_C</p>
  1350. </div></div></td>
  1351. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1352. <p>Prints debug output about the camera.</p>
  1353. </div></div></td>
  1354. </tr>
  1355. <tr>
  1356. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1357. <p>INPUT_MAPPING_MEMORY</p>
  1358. </div></div></td>
  1359. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1360. <p>KEY_M</p>
  1361. </div></div></td>
  1362. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1363. <p>Prints debug output for memory usage.</p>
  1364. </div></div></td>
  1365. </tr>
  1366. <tr>
  1367. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1368. <p>INPUT_MAPPING_EXIT</p>
  1369. </div></div></td>
  1370. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1371. <p>KEY_ESCAPE</p>
  1372. </div></div></td>
  1373. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1374. <p>Closes the application by calling <code>stop();</code>. Typically you do not remove this, unless you replace it by another way of quitting gracefully.</p>
  1375. </div></div></td>
  1376. </tr>
  1377. </tbody>
  1378. </table>
  1379. </div>
  1380. </div>
  1381. <div class="sect1">
  1382. <h2 id="3-add-custom-trigger-mapping"><a class="anchor" href="#3-add-custom-trigger-mapping"></a>3. Add Custom Trigger Mapping</h2>
  1383. <div class="sectionbody">
  1384. <div class="paragraph">
  1385. <p>When initializing the application, add a Mapping for each Trigger.</p>
  1386. </div>
  1387. <div class="paragraph">
  1388. <p>Give the mapping a meaningful name. The name should reflect the action, not the button/key (because buttons/keys can change). Here some examples:</p>
  1389. </div>
  1390. <div class="listingblock">
  1391. <div class="content">
  1392. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">inputManager.addMapping("Pause Game", new KeyTrigger(KeyInput.KEY_P));
  1393. inputManager.addMapping("Rotate", new KeyTrigger(KeyInput.KEY_SPACE));
  1394. ...</code></pre>
  1395. </div>
  1396. </div>
  1397. <div class="paragraph">
  1398. <p>There are cases where you may want to provide more then one trigger for one action. For example, some users prefer the WASD keys to navigate, while others prefer the arrow keys. Add several triggers for one mapping, by separating the Trigger objects with commas:</p>
  1399. </div>
  1400. <div class="listingblock">
  1401. <div class="content">
  1402. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_A),
  1403. new KeyTrigger(KeyInput.KEY_LEFT)); // A and left arrow
  1404. inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_D),
  1405. new KeyTrigger(KeyInput.KEY_RIGHT)); // D and right arrow
  1406. ...</code></pre>
  1407. </div>
  1408. </div>
  1409. </div>
  1410. </div>
  1411. <div class="sect1">
  1412. <h2 id="4-create-listeners"><a class="anchor" href="#4-create-listeners"></a>4. Create Listeners</h2>
  1413. <div class="sectionbody">
  1414. <div class="paragraph">
  1415. <p>The jME3 input manager supports two types of event listeners for inputs: AnalogListener and ActionListener. You can use one or both listeners in the same application. Add one or both of the following code snippets to your main SimpleApplication-based class to activate the listeners.</p>
  1416. </div>
  1417. <div class="admonitionblock note">
  1418. <table>
  1419. <tr>
  1420. <td class="icon">
  1421. <i class="fa icon-note" title="Note"></i>
  1422. </td>
  1423. <td class="content">
  1424. <div class="paragraph">
  1425. <p>The two input listeners do not know, and do not care, which actual key was pressed. They only know which <em>named input mapping</em> was triggered.</p>
  1426. </div>
  1427. </td>
  1428. </tr>
  1429. </table>
  1430. </div>
  1431. <div class="sect2">
  1432. <h3 id="actionlistener"><a class="anchor" href="#actionlistener"></a>ActionListener</h3>
  1433. <div class="paragraph">
  1434. <p><code>com.jme3.input.controls.ActionListener</code></p>
  1435. </div>
  1436. <div class="ulist">
  1437. <ul>
  1438. <li>
  1439. <p>Use for absolute &#8220;button&#8221; pressed or released?, on or off? actions.</p>
  1440. <div class="ulist">
  1441. <ul>
  1442. <li>
  1443. <p>Examples: Pause/unpause, a rifle or revolver shot, jump, click to select.</p>
  1444. </li>
  1445. </ul>
  1446. </div>
  1447. </li>
  1448. <li>
  1449. <p>JME gives you access to:</p>
  1450. <div class="ulist">
  1451. <ul>
  1452. <li>
  1453. <p>The mapping name of the triggered action.</p>
  1454. </li>
  1455. <li>
  1456. <p>A boolean whether the trigger is still pressed or has just been released.</p>
  1457. </li>
  1458. <li>
  1459. <p>A float of the current time-per-frame as timing factor</p>
  1460. </li>
  1461. </ul>
  1462. </div>
  1463. </li>
  1464. </ul>
  1465. </div>
  1466. <div class="listingblock">
  1467. <div class="content">
  1468. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">private ActionListener actionListener = new ActionListener() {
  1469. public void onAction(String name, boolean keyPressed, float tpf) {
  1470. /** TODO: test for mapping names and implement actions */
  1471. }
  1472. };</code></pre>
  1473. </div>
  1474. </div>
  1475. </div>
  1476. <div class="sect2">
  1477. <h3 id="analoglistener"><a class="anchor" href="#analoglistener"></a>AnalogListener</h3>
  1478. <div class="paragraph">
  1479. <p><code>com.jme3.input.controls.AnalogListener</code></p>
  1480. </div>
  1481. <div class="ulist">
  1482. <ul>
  1483. <li>
  1484. <p>Use for continuous and gradual actions.</p>
  1485. <div class="ulist">
  1486. <ul>
  1487. <li>
  1488. <p>Examples: Walk, run, rotate, accelerate vehicle, strafe, (semi-)automatic weapon shot</p>
  1489. </li>
  1490. </ul>
  1491. </div>
  1492. </li>
  1493. <li>
  1494. <p>JME gives you access to:</p>
  1495. <div class="ulist">
  1496. <ul>
  1497. <li>
  1498. <p>The mapping name of the triggered action.</p>
  1499. </li>
  1500. <li>
  1501. <p>A gradual float value between how long the trigger has been pressed.</p>
  1502. </li>
  1503. <li>
  1504. <p>A float of the current time-per-frame as timing factor</p>
  1505. </li>
  1506. </ul>
  1507. </div>
  1508. </li>
  1509. </ul>
  1510. </div>
  1511. <div class="listingblock">
  1512. <div class="content">
  1513. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">private AnalogListener analogListener = new AnalogListener() {
  1514. public void onAnalog(String name, float keyPressed, float tpf) {
  1515. /** TODO: test for mapping names and implement actions */
  1516. }
  1517. };</code></pre>
  1518. </div>
  1519. </div>
  1520. </div>
  1521. </div>
  1522. </div>
  1523. <div class="sect1">
  1524. <h2 id="4-register-mappings-to-listeners"><a class="anchor" href="#4-register-mappings-to-listeners"></a>4. Register Mappings to Listeners</h2>
  1525. <div class="sectionbody">
  1526. <div class="paragraph">
  1527. <p>To activate the mappings, you must register them to a Listener. Write your registration code after the code block where you have added the mappings to the inputManager.</p>
  1528. </div>
  1529. <div class="paragraph">
  1530. <p>In the following example, you register the &#8220;Pause Game&#8221; mapping to the <code>actionListener</code> object, because pausing a game is in &#8220;either/or&#8221; decision.</p>
  1531. </div>
  1532. <div class="listingblock">
  1533. <div class="content">
  1534. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">inputManager.addListener(actionListener, new String[]{"Pause Game"});</code></pre>
  1535. </div>
  1536. </div>
  1537. <div class="paragraph">
  1538. <p>In the following example, you register navigational mappings to the <code>analogListener</code> object, because walking is a continuous action. Players typically keep the key pressed to express continuity, for example when they want to &#8220;walk&#8221; on or &#8220;accelerate&#8221;.</p>
  1539. </div>
  1540. <div class="listingblock">
  1541. <div class="content">
  1542. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">inputManager.addListener(analogListener, new String[]{"Left", "Right"});</code></pre>
  1543. </div>
  1544. </div>
  1545. <div class="paragraph">
  1546. <p>As you see, you can add several listeners in one String array. You can call the addListener() method more than once, each time with a subset of your list, if that helps you keep you code tidy. Again, the Listeners do not care about actual which keys are configured, you only register named trigger mappings.</p>
  1547. </div>
  1548. <div class="admonitionblock tip">
  1549. <table>
  1550. <tr>
  1551. <td class="icon">
  1552. <i class="fa icon-tip" title="Tip"></i>
  1553. </td>
  1554. <td class="content">
  1555. <div class="paragraph">
  1556. <p>Did you register an action, but it does not work? Check the string&#8217;s capitalization and spelling, it&#8217;s case sensitive!</p>
  1557. </div>
  1558. </td>
  1559. </tr>
  1560. </table>
  1561. </div>
  1562. </div>
  1563. </div>
  1564. <div class="sect1">
  1565. <h2 id="5-implement-actions-in-listeners"><a class="anchor" href="#5-implement-actions-in-listeners"></a>5. Implement Actions in Listeners</h2>
  1566. <div class="sectionbody">
  1567. <div class="paragraph">
  1568. <p>You specify the action to be triggered where it says TODO in the Listener code snippets. Typically, you write a series of if/else conditions, testing for all the mapping names, and then calling the respective action.</p>
  1569. </div>
  1570. <div class="paragraph">
  1571. <p>Make use of the distinction between <code>if</code> and <code>else if</code> in this conditional.</p>
  1572. </div>
  1573. <div class="ulist">
  1574. <ul>
  1575. <li>
  1576. <p>If several actions can be triggered simultaneously, test for all of these with a series of bare `if`s. For example, a character can be running forward <em>and</em> to the left.</p>
  1577. </li>
  1578. <li>
  1579. <p>If certain actions exclude one another, test for them with <code>else if</code>, the the rest of the exclusive tests can be skipped and you save some milliseconds. For example, you either shoot or pick something up.</p>
  1580. </li>
  1581. </ul>
  1582. </div>
  1583. <div class="sect2">
  1584. <h3 id="actionlistener-2"><a class="anchor" href="#actionlistener-2"></a>ActionListener</h3>
  1585. <div class="paragraph">
  1586. <p>In the most common case, you want an action to be triggered once, in the moment when the button or key trigger is released. For example, when the player presses a key to open a door, or clicks to pick up an item. For these cases, use an ActionListener and test for <code>&amp;&amp; !keyPressed</code>, like shown in the following example.</p>
  1587. </div>
  1588. <div class="listingblock">
  1589. <div class="content">
  1590. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">private ActionListener actionListener = new ActionListener() {
  1591. public void onAction(String name, boolean keyPressed, float tpf) {
  1592. if (name.equals("Pause Game") &amp;&amp; !keyPressed) { // test?
  1593. isRunning = !isRunning; // action!
  1594. }
  1595. if ...
  1596. }
  1597. };</code></pre>
  1598. </div>
  1599. </div>
  1600. </div>
  1601. <div class="sect2">
  1602. <h3 id="analoglistener-2"><a class="anchor" href="#analoglistener-2"></a>AnalogListener</h3>
  1603. <div class="paragraph">
  1604. <p>The following example shows how you define actions with an AnalogListener. These actions are triggered continuously, as long (intensity <code>value</code>) as the named key or mouse button is down. Use this listeners for semi-automatic weapons and navigational actions.</p>
  1605. </div>
  1606. <div class="listingblock">
  1607. <div class="content">
  1608. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">private AnalogListener analogListener = new AnalogListener() {
  1609. public void onAnalog(String name, float value, float tpf) {
  1610. if (name.equals("Rotate")) { // test?
  1611. player.rotate(0, value*speed, 0); // action!
  1612. }
  1613. if ...
  1614. }
  1615. };</code></pre>
  1616. </div>
  1617. </div>
  1618. </div>
  1619. </div>
  1620. </div>
  1621. <div class="sect1">
  1622. <h2 id="let-users-remap-keys"><a class="anchor" href="#let-users-remap-keys"></a>Let Users Remap Keys</h2>
  1623. <div class="sectionbody">
  1624. <div class="paragraph">
  1625. <p>It is likely that your players have different keyboard layouts, are used to &#8220;reversed&#8221; mouse navigation, or prefer different navigational keys than the ones that you defined. You should create an options screen that lets users customize their mouse/key triggers for your mappings. Replace the trigger literals in the <code>inputManager.addMapping()</code> lines with variables, and load sets of triggers when the game starts.</p>
  1626. </div>
  1627. <div class="paragraph">
  1628. <p>The abstraction of separating triggers and mappings has the advantage that you can remap triggers easily. Your code only needs to remove and add some trigger mappings. The core of the code (the listeners and actions) remains unchanged.</p>
  1629. </div>
  1630. </div>
  1631. </div>
  1632. <div class="sect1">
  1633. <h2 id="detecting-joystick-connection-states"><a class="anchor" href="#detecting-joystick-connection-states"></a>Detecting Joystick Connection States</h2>
  1634. <div class="sectionbody">
  1635. <div class="paragraph">
  1636. <p>For information regarding the connection state of a joystick see <a href="../../tutorials/beginner/hello_input_system.html#listening-for-joystick-connections" class="xref page">Listening for Joystick Connections</a>.</p>
  1637. </div>
  1638. </div>
  1639. </div>
  1640. <nav class="pagination">
  1641. <span class="prev"><a href="../renderer/render_pipeline.html">Render Pipelines</a></span>
  1642. <span class="next"><a href="combo_moves.html">Combo Moves</a></span>
  1643. </nav>
  1644. </article>
  1645. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  1646. <div class="toc-menu"></div>
  1647. </aside>
  1648. </div>
  1649. </main>
  1650. </div>
  1651. <footer class="footer">
  1652. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  1653. </footer>
  1654. <script src="../../../../_/js/vendor/docsearch.min.js"></script>
  1655. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js -->
  1656. <script>
  1657. var search = docsearch({
  1658. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  1659. indexName: 'jmonkeyengine',
  1660. inputSelector: '#search-input',
  1661. autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
  1662. algoliaOptions: { hitsPerPage: 10 }
  1663. }).autocomplete
  1664. search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
  1665. function focusSearchInput () { document.querySelector('#search-input').focus() }
  1666. if (document.querySelector('.home-link.is-current')) window.addEventListener('load', focusSearchInput)
  1667. </script>
  1668. <script src="../../../../_/js/site.js"></script>
  1669. <script async src="../../../../_/js/vendor/highlight.js"></script>
  1670. </body>
  1671. </html>