Differences

This shows you the differences between the selected revision and the current
version of the page.


kbase:how_do_i_implement_surface-dependent_footstep_sounds 2009/02/23 14:05 kbase:how_do_i_implement_surface-dependent_footstep_sounds 2009/02/25 18:31 current
Line 1: Line 1:
-====== ¿Como implementar sonido de pasos dependiendo de la superficie? ======+====== How do I implement surface-dependent footstep sounds? ======
-Implementar el sonido de pasos es fácil, consiste en añadir un sonido a ciertos fotogramas de las animaciones de andar o correr. Pero algunas veces, puede ser necesario que el sonido de los pasos sea distinto dependiendo de la superficie  por la que se camine.+Implementing footstep sounds is easy, you just add a sound to certain frames of the walking animations. But sometimes you may need to change the footstep sounds depending on the surface the character is walking on.
-Lo primero que hay que hacer, es **definir las distintas áreas correspondientes a las distintas superficies**, tales como tierra, metal, hierba, suelo, etc. En WME, se pueden añadir variales a cualquier objeto (llamdas custom properties), incluyendo las regiones definidas en las escenas (scene regions). Vamos a suponer que en la escena tenemos una superficie de hierba, entonces en el Scene Edit crearíamos una región con la forma de la superficie que es de hierba, en las propiedades de la región, dentro del //**Scene Edit**//, seleccionaríamos el botón "Custom...". Ahí añadiremos una nueva propiedad (variable) y su valor correspondiente, en este ejemplo de la hierba:+First, we need to **define scene areas for different surfaces** (sand, metal, grass...). In WME, you can add custom properties to any game object, including the scene regions. Let's say we have a grassy field in our scene. Create a scene region covering the entire grass area. In the region properties in //**Scene Edit**//?, click the “Custom...” button. Add a new property, and fill in 
 +Name: xSurface 
 +Value: grass. 
 +Now the character will know he/she is walking on grass.
-Nombre: superficie +WME allows you to **trigger script events from within the animations**. We well use this to call a piece of script whenever character's feet hit the ground. Open your walking animations in //**Sprite Edit**//?, and edit each frame where the foot is on ground (there should be two such frames in each walking animation, one for each foot). In the frame properties, there is an “Event” field. Fill in “footstep” in those hit-the-ground frames. 
-Valor: hierba+Now the animation will trigger a “footstep” event everytime the character should play a sound.
-Ahora ya tenemos una zona definida en la escena y accediendo a esta variable, sabremos que es hierba lo que el actor pisa cuando anda por esta región.+Last thing we need to do is to **handle the event in a script**. Open a script attached to your actor in a text editor and type in a code similar to this:
-Bien, lo siguiente que debemos hacer es la comprobación de que está pisando el personaje cuando anda, para eso WME permite **lanzar eventos para ejecutar un código en un fotograma de una animación**, lo que pretendemos es que cuando el personaje pise en el suelo, ejecutar un programa que compruebe donde esta pisando y reproduzca el sonido de un paso dependiendo de la superficie. Dependiendo de si estamos haciendo un juego 2D o 2.5D, la programación del evento la tendremos que hacer en un sitio o en otro. +<code script>on "footstep"
- +
-En el caso de 2D. +
- +
-Abrimos la animación en el //**Sprite Edit**//? y editamos los fotogramas donde el actopr pone el pie en el suelo, que es cuando suena el paso, normalmente hay dos fotogramas en una animación de andar, uno cuando pisa con el pie izquierdo y otro cuando pisa con el pie derecho. En las propiedades del fotograma "Frame properties" hay un campo para indicar el evento que se va a lanzar cuando ese fotograma se reproduzca, este campo está indicado como "Event". Ahí introduciremos el nombre del evento, en nuestro ejemplo le llamaremos "paso".  +
- +
-En el caso de 2.5D +
- +
-Si estamos utilizando un actor 3D, el evento se lo tenemos que indicar en el fichero nombre_del_actor.act3d, ahí estan definidas las animaciones y sus características, en el ejemplo siguiente suponemos que tenemos una animación que se llama andar, de 20 fotogramas y que en el Nº 10 y el 20 es cuando el actor pone cada uno de los pies en el suelo. +
- +
-<code script> +
-ANIMATION +
-  { +
-    NAME="andar" +
-    LOOPING=TRUE +
- +
-    EVENT +
-    { +
-      FRAME = 10 +
-      NAME = "paso" +
-    } +
-    EVENT +
-    { +
-      FRAME = 20 +
-      NAME = "paso" +
-    } +
-+
-</code> +
- +
-El código, como veis, no tiene misterio, simplemente le dice que en la niamación andar, cuando se reproduzca el fotograma 10 o el 20, que lance el evento paso. +
- +
-Ahora, lo que hay que hacer, es programar el evento, el evento lo lanza el actor cuando se reproduce su animación, por lo que hay que programar el codigo en el script del actor, lo que vamos a hacer es que cuando se produzca el evento "paso" vamos a comprobar que esta pisando el actor y reproducir un sonido de paso en hierba o en suelo. +
- +
-<code script>on "paso"  //Cuando se produzca el evento "paso", es decir en los fotogramas 10 y 20.+
{ {
- // Cogemos la región en la que está el actor+ // get a region the actor is standing in
var Reg = Scene.GetRegionAt(this.X, this.Y); var Reg = Scene.GetRegionAt(this.X, this.Y);
- // Si la región no es nula, es decir, si esta pisando en una región que hayamos definido en el Scene Edit 
if (Reg!=null) if (Reg!=null)
{ {
-  // Vamos a hacer las comprobaciones de la región +  // play a sound depenging on a surface 
-  // "superficie" es la variable que habíamos definbido para la región en el Scene Edit +  // "xSurface" is a custom property we defined in SceneEdit 
-  switch(Reg.superficie)+  switch(Reg.xSurface)
  {   {
-    case "hierba": // Si la región que esta pìsando tiene el valor "hierba" +    case "grass": 
-      this.PlaySound("paso_hierba.ogg");+      this.PlaySound("footsteps\grass.ogg");
    break;     break;
-    case "madera": // Si la región que esta pìsando tiene el valor "madera", suponiendo que tengamos varias regiones con varios tipos de superficie +    case "wood": 
-      this.PlaySound("paso_madera.ogg"); +      this.PlaySound("footsteps\wood.ogg");
-    break; +
- +
-    default+
-      this.PlaySound("paso_normal.ogg"); // este sería el sonido en el caso de que la región no tuviera la superficie definida+
    break;     break;
 +
 +    // add more sounds here...
  }   }
} }
}</code> }</code>
- 
-Logicamente, podemos definir las regiones que queramos y poner un bloque case .... break; para comprobar cada superficie y reproducir cada sonido. 
- 
 
kbase/how_do_i_implement_surface-dependent_footstep_sounds.1235394306.txt.gz · Last modified: 2009/02/23 14:05 by HelLRaiseR
Recent changes RSS feed Creative Commons License Driven by DokuWiki