{"id":657,"date":"2024-03-29T20:14:04","date_gmt":"2024-03-29T19:14:04","guid":{"rendered":"https:\/\/jorgeturiel.es\/?p=657"},"modified":"2024-03-29T20:14:04","modified_gmt":"2024-03-29T19:14:04","slug":"castle-game-engine-navegacion-y-eventos","status":"publish","type":"post","link":"https:\/\/jorgeturiel.es\/?p=657","title":{"rendered":"Castle Game Engine. Navegaci\u00f3n y Eventos"},"content":{"rendered":"\n<p>Esta entrada exploraremos los diferentes tipos de navegaci\u00f3n que existen en Castle Game Engine. <\/p>\n\n\n\n<p>La navegaci\u00f3n o desplazamiento es un componente que tenemos que a\u00f1adir a nuestro proyecto. La navegaci\u00f3n es un componente que permite movernos por la escena. Al movernos lo que se hace es desplazar la c\u00e1mara,<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Tipos de navegaci\u00f3n<\/h2>\n\n\n\n<p>Se puede navegar por la escena usando <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2D<\/li>\n\n\n\n<li>Examine<\/li>\n\n\n\n<li>Fly<\/li>\n\n\n\n<li>Thrid Person<\/li>\n\n\n\n<li>Walk<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"635\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/01\/TiposDeNavegacion-1024x635.png\" alt=\"\" class=\"wp-image-660\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/01\/TiposDeNavegacion-1024x635.png 1024w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/01\/TiposDeNavegacion-300x186.png 300w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/01\/TiposDeNavegacion-768x477.png 768w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/01\/TiposDeNavegacion.png 1099w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A\u00f1ade el componente <em>Fly <\/em>y ejecuta el programa. Observa que puedes moverte por el escenario usando las teclas. La diferencia entre <em>Fly<\/em> (volar) y <em>Walk(<\/em>caminar<em>) <\/em>est\u00e1 en que caminar tiene en cuenta la gravedad. As\u00ed que si usas el componente <em>Walk<\/em>, y no est\u00e1s sobre una superficie ver\u00e1s como empiezas a caer.<\/p>\n\n\n\n<p>Este componente tiene algunas propiedades interesantes como son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>MoveSpeed<\/code>, <\/li>\n\n\n\n<li><code>MoveHorizontalSpeed<\/code>, <\/li>\n\n\n\n<li><code>MoveVerticalSpeed<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Las cuales permiten ajusta la velocidad, la velocidad horizontal y la velocidad vertical, respectivamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Eventos<\/h2>\n\n\n\n<p>Hasta ahora hemos programado todo desde el editor de <em>Castle Game Engine<\/em>. Pero para capturar o gestionar eventos, debemos hacerlo desde el c\u00f3digo. Para ello, desde el men\u00fa <em>Code<\/em>, selecciona <em>Edit Unit Associated With Open Design<\/em>. O simplemente pulsa F12<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"553\" height=\"224\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/03\/Screenshot_20240329_194612.png\" alt=\"Abrir el editor de c\u00f3digo\" class=\"wp-image-674\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/03\/Screenshot_20240329_194612.png 553w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2024\/03\/Screenshot_20240329_194612-300x122.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/figure>\n<\/div>\n\n\n<p>Se abr\u00eda Lazarus, y mostrando el c\u00f3digo que pertenece a la escena.<\/p>\n\n\n\n<p>Navega por el c\u00f3digo hasta abajo de todo y localiza el c\u00f3digo siguiente:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" >function TViewMain.Press(const Event: TInputPressRelease): Boolean;\nbegin\n  Result := inherited;\n  if Result then Exit; \/\/ allow the ancestor to handle keys\n\n  { This virtual method is executed when user presses\n    a key, a mouse button, or touches a touch-screen.\n\n    Note that each UI control has also events like OnPress and OnClick.\n    These events can be used to handle the \"press\", if it should do something\n    specific when used in that UI control.\n    The TViewMain.Press method should be used to handle keys\n    not handled in children controls.\n  }\n\n  \/\/ Use this to handle keys:\n  {\n  if Event.IsKey(keyXxx) then\n  begin\n    \/\/ DoSomething;\n    Exit(true); \/\/ key was handled\n  end;\n  }\nend;\n                                <\/pre><\/div>\n\n\n\n<p>Tal como dice el texto contenido en la funci\u00f3n, este m\u00e9todo es llamado cada vez que se pulsa una tecla o se mueve el rat\u00f3n o se toca en una pantalla t\u00e1ctil.<\/p>\n\n\n\n<p>Vamos a a\u00f1adir unas l\u00ednea de c\u00f3digo de manera que cuando se pulse la tecla escape se cierre la aplicaci\u00f3n, para ello escribe lo siguiente:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" >  if Event.IsKey(keyEscape) then\n  begin\n    Application.Terminate;\n    Exit(true);\n  end;  <\/pre><\/div>\n\n\n\n<p>Y al principio, en la cl\u00e1usula <em>Uses<\/em>, a\u00f1ade <em>CastleWindow. <\/em>Algo as\u00ed:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" >uses Classes,\n  CastleVectors, CastleComponentSerialize,\n  CastleUIControls, CastleControls, CastleKeysMouse,CastleWindow; <\/pre><\/div>\n\n\n\n<p>Es muy importante, aunque en este caso vayamos a cerrar la aplicaci\u00f3n, tras gestionar un evento no olvidarse de poner <em>Exit(true)<\/em>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta entrada exploraremos los diferentes tipos de navegaci\u00f3n que existen en Castle Game Engine. La navegaci\u00f3n o desplazamiento es un componente que tenemos que a\u00f1adir a nuestro proyecto. La navegaci\u00f3n es un componente que permite movernos por la escena. Al movernos lo que se hace es desplazar la c\u00e1mara,<\/p>\n","protected":false},"author":2,"featured_media":651,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,27,25,26,48],"tags":[49],"class_list":["post-657","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-castle-game-engine","category-lazarus","category-pascal","category-programacion","category-videojuegos","tag-castle-game-engine"],"_links":{"self":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=657"}],"version-history":[{"count":6,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/657\/revisions"}],"predecessor-version":[{"id":675,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/657\/revisions\/675"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/media\/651"}],"wp:attachment":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}