{"id":1189,"date":"2025-12-21T08:00:00","date_gmt":"2025-12-21T07:00:00","guid":{"rendered":"https:\/\/jorgeturiel.es\/?p=1189"},"modified":"2025-11-13T15:04:26","modified_gmt":"2025-11-13T14:04:26","slug":"ghosts-n-goblins-y-cge-parte-6","status":"publish","type":"post","link":"https:\/\/jorgeturiel.es\/?p=1189","title":{"rendered":"Ghosts \u2018n Goblins y CGE. Parte 6"},"content":{"rendered":"\n<p>\u00bfQu\u00e9 es un juego sin m\u00fasica y efectos especiales?. Es como quitarle la guinda al pastel.<\/p>\n\n\n\n<p>En esta entrada seguimos construyendo  Ghost&#8217;n Goblins y le a\u00f1adiremos m\u00fasica y efectos especiales.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><a><\/a> Un poco de m\u00fasica<\/h2>\n\n\n\n<p>Para darle m\u00e1s ambiente a el juego, podemos ponerle m\u00fasica y efectos especiales.<\/p>\n\n\n\n<p>Para ejecutar un sonido, desde el editor, debemos a\u00f1adir el componente <em>TcastleSound<\/em>. Este es un componente no visual, para ello ve al \u00e1rbol de componentes, y con bot\u00f3n derecho selecciona <em>Non-Visual Components<\/em>. Y el men\u00fa que se despliega selecciona <em>Add Non-Visual <\/em>Component. Y en el nuevo men\u00fa selecciona <em>Sound(TCastleSound)<\/em>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"797\" height=\"472\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-12.png\" alt=\"\" class=\"wp-image-1190\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-12.png 797w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-12-300x178.png 300w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-12-768x455.png 768w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><figcaption class=\"wp-element-caption\">A\u00f1adir sonidos<\/figcaption><\/figure>\n<\/div>\n\n\n<p>C\u00f3mo vamos tener dos sonidos, uno la m\u00fasica y el otro el efecto especial de lanzar el arma, a\u00f1ade dos componentes de estos.<\/p>\n\n\n\n<p>Pulsa sobre cada uno de ellos con el bot\u00f3n derecho o bien pulsando la tecla<em> F2, <\/em>y as\u00edgnales los siguientes nombres: <em>ArthurShot<\/em> y <em>MusicaDeFondo.<\/em><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"473\" height=\"353\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-13.png\" alt=\"\" class=\"wp-image-1191\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-13.png 473w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-13-300x224.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><figcaption class=\"wp-element-caption\">Cambiar nombre<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Ahora crea una carpeta llamada <em>Sonidos <\/em>dentro de ella pondremos los sonidos que usemos. El formato que usaremos ser\u00e1 <em>WAV<\/em>, el cual es reconocido por CGE. Pero los archivos que usaremos est\u00e1n en <em>MP3, <\/em>as\u00ed que hay que convertirlos. Puedes usar cualquier programa o servicio web. O sino puedes usar los archivos ya convertidos del c\u00f3digo fuente del proyecto.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"592\" height=\"205\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-14.png\" alt=\"\" class=\"wp-image-1192\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-14.png 592w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-14-300x104.png 300w\" sizes=\"auto, (max-width: 592px) 100vw, 592px\" \/><figcaption class=\"wp-element-caption\">Carpeta de sonidos y sonidos<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"343\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-15.png\" alt=\"\" class=\"wp-image-1193\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-15.png 515w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-15-300x200.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><figcaption class=\"wp-element-caption\">Asignar archivo de sonidos a <em>MusicaDeFondo<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p><em>Y <\/em>a la propiedad <em>URL<\/em> de <em>ARTHURHIT<\/em> as\u00edgnale el archivo de sonido <em>ARTHURHIT.<\/em><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"343\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-16.png\" alt=\"\" class=\"wp-image-1194\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-16.png 515w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-16-300x200.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><figcaption class=\"wp-element-caption\">Asignar archivo de sonidos a <em>ArthutShot<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p><br>Con este paso yo tenemos ya tenemos los recursos de sonido cargados. Ahora selecciona con el bot\u00f3n derecho al elemento que representa a <em>Arthur<\/em>, en el men\u00fa selecciona <em>Add Behavior (Extends Parent Transform)<\/em>, para luego seleccionar <em>Sound Source (TcastleSoundSource).<\/em><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"457\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-17.png\" alt=\"\" class=\"wp-image-1196\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-17.png 778w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-17-300x176.png 300w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-17-768x451.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><figcaption class=\"wp-element-caption\">A\u00f1adir sonido a TCastleScene<\/figcaption><\/figure>\n<\/div>\n\n\n<p><br>Renombra el componente reci\u00e9n creado como <em>MusicaActual<\/em>. En su propiedad <em>Sound <\/em>selecciona <em>MusicaDeFondo<\/em>. La propiedad <em>SoundPlaying<\/em>, ponla a <em>False<\/em>, para que no empiece a sonar. Y la propiedad <em>Spatial<\/em>, tambi\u00e9n ponla a <em>False, <\/em>esta propiedad ajusta el volumen seg\u00fan la distancia d\u00f3nde se genera el sonido. Pero en este caso deseamos el efecto contrario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a><\/a> Controlando el sonido desde c\u00f3digo<\/h2>\n\n\n\n<p>En la secci\u00f3n <em>uses<\/em> a\u00f1ade la unidades <em>CastleSoundEngine <\/em>para que est\u00e9 disponible el motor de sonido de CGE.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"667\" height=\"116\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-18.png\" alt=\"\" class=\"wp-image-1197\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-18.png 667w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-18-300x52.png 300w\" sizes=\"auto, (max-width: 667px) 100vw, 667px\" \/><figcaption class=\"wp-element-caption\">Clausula Uses con <em>CastleSoundEngine<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<p>Ahora en c\u00f3digo del programa, en la secci\u00f3n <em>published<\/em> de <em>TmainView<\/em> a\u00f1ade los dos componentes <em>TCastleSound<\/em> que hemos creado en el editor.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"195\" src=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-19.png\" alt=\"\" class=\"wp-image-1198\" srcset=\"https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-19.png 602w, https:\/\/jorgeturiel.es\/wp-content\/uploads\/2025\/11\/image-19-300x97.png 300w\" sizes=\"auto, (max-width: 602px) 100vw, 602px\" \/><figcaption class=\"wp-element-caption\">A\u00f1adir componentes TCastlesound<\/figcaption><\/figure>\n<\/div>\n\n\n<p>En el evento <em>Start<\/em>, iniciaremos la m\u00fasica. A\u00f1ade una variable llamada <em>Sonido<\/em> del tipo <em>TcastleSoundSource <\/em>en el evento <em>Start<\/em><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" >procedure TViewMain.Start;\nvar\n  Sonido: TCastleSoundSource; \nbegin<\/pre><\/div>\n\n\n\n<p>Y dentro de este evento escribe el siguiente c\u00f3digo.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" > Sonido := Arthur.FindBehavior(TCastleSoundsource) as TCastleSoundSource;\n Sonido.SoundPlaying := True; <\/pre><\/div>\n\n\n\n<p>Creamos una fuente de sonido que el componente<em> TCastleSoundSource <\/em>que hemos a\u00f1adido a Arthur en el editor. Y empezamos a reproducirlo.<\/p>\n\n\n\n<p>Si queremos tener la opci\u00f3n de apagar la m\u00fasica, podemos asignarle una tecla. En el evento <em>Press<\/em>, podemos capturar la tecla <em>M<\/em> y cambiar su propiedad <em>SoundPlaying<\/em>.<\/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;\nvar\n  Sonido: TCastleSoundSource;\nbegin\n  Result := inherited;\n  if Result then Exit; \/\/ allow the ancestor to handle keys  \n\n  if Event.IsKey(keyM) then\n  begin\n    Sonido := Arthur.FindBehavior(TCastleSoundSource) as TCastleSoundSource;\n    Sonido.SoundPlaying := not Sonido.SoundPlaying;\n    Exit(True);\n  end;\nend;\n<\/pre><\/div>\n\n\n\n<p>Para simplemente ejecutar un sonido cuando <em>Arthur<\/em> lanza su arma. En el evento <em>Update<\/em> tenemos un condicional que usamos lanzar el arma. Dentro de este, simplemente a\u00f1ade la l\u00ednea: <em>SoundEngine.Play(ArthurShot);<\/em><\/p>\n\n\n\n<p>Ya solo queda ejecutar el programa, y probar.<\/p>\n\n\n\n<p>C\u00f3mo siempre tiene todo el c\u00f3digo fuente el <a href=\"https:\/\/github.com\/Blueicaro\/GhostAndGoblins_CGE-.git\">github<\/a>.<\/p>\n\n\n\n<p>Saludos<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es un juego sin m\u00fasica y efectos especiales?. Es como quitarle la guinda al pastel.<br \/>\nEn esta entrada seguimos construyendo  Ghost&#8217;n Goblins y le a\u00f1adiremos m\u00fasica y efectos especiales.<\/p>\n","protected":false},"author":2,"featured_media":1200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,56,25,48],"tags":[49,32,23,21,24],"class_list":["post-1189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-castle-game-engine","category-cge","category-pascal","category-videojuegos","tag-castle-game-engine","tag-free-pascal","tag-lazarus","tag-pascal","tag-programacion"],"_links":{"self":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/1189","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=1189"}],"version-history":[{"count":4,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/1189\/revisions"}],"predecessor-version":[{"id":1202,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/1189\/revisions\/1202"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/media\/1200"}],"wp:attachment":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}