Ejemplos Mios

Ya NO siguo con Flash… Voy con Python

Posted on abril 3, 2007. Filed under: Ejemplos Mios |

La razon por a cual comenze a aprender flash, era por que lo consideraba la mejor opción para el proyecto que estoy realizando. Pero me encontré con unas fallas en Flash que me hacen imposible seguir con flash para continuar con mi sonido.

El proyecto que estoy desarrollando esta relacionado con la música, mas precisamente hacer un instrumento musical con flash. Pero el problema que ser me presento es que es imposible hacer un ritmo en tiempo real con flash corriendo en windows. Es difícil de explicar, solo un músico lo entendería. Por ejemplo, uno trata de hacer un ritmo tropical, y el ritmo sale como si fuera rock.

Probé con Flash corriendo en linux, y si funciono bien lo de los ritmos, pero el problema que tenia con linux era peor, los sonidos se demoraban medio segundo en sonar después que uno hacia un golpe. Y eso en música es fatal.

Ahora tenia que cambiar de plataforma para hacer mis juegos musicales. Esta plataforma tenia que correr en Linux, tenia que ser por lo menos tan fácil de aprender como Flash y tenia que darme buen rendimiento. Después de investigar bastante en varios sitios, (Meneame, Linux Juegos y otros) llegue a la conclusion, que el lenguaje de programación que me pude dar todo eso es Python. El lenguaje que Utiliza Google y YouTube para desarrollar sus enormes proyectos.

Es sorprendente lo facil que es Python. Es mucho mas fácil que Flash. Ya baje varias guias y las estoy leyendo.

Bueno, aunque realemnte no es que vaya a desarrollar los juegos en Python, los voy a desarrollar en una especie de framework llamado PyGame, que estaba basado en Python, C y SDL, pero que la sintaxis es muy similar a la de Python. Uno tiene que aprender primero Python para luego si aprender PyGame, aunque se ve bien facil. el unico lio es todo esta en Ingues. La unica guia en español que hay, es una que esta en LinuxJugos que son tres capitulo, y esta muy bien.

De ahora en adelante no se que voy a hacer con el blog, si dejarlo asi, y no publicar mas, y crear uno nuevo que hable de Python únicamente, o seguir con este y pero hablando con Python. En fin

Anuncios
Leer entrada completa | Make a Comment ( 7 so far )

Colisiones entre infinitos MovieClip para Juego de Disparos – Juegos Flash ActionScript

Posted on enero 12, 2007. Filed under: Array, Clases, Colisiones, Condicionales, Ejemplos Mios, Eventos, Flash, Funciones, Guias, Loop, Movie Clips, Movimiento, Objetos |

Bueno, ya conseguí hace mi primer juego de disparos aca esta el link

Aca el los archivos fuente. Aunque hay que actualizarlos con este codigo

El problema de hacer un juegos con infinitos disparos y enemigos, es como asignar los nombres para efectuar las colaciones. No sabia como hacerlo al comienzo, pero pregunte en cristalab me ayudaron y lo termine. Aca el post

El código es este
Película principal

Código Película principal :
////////// Inicio Muros
// Crea la Array que va a guardar los nombres de todas las rocas que caen
var MiArray:Array = new Array();
// Variable que nos sirve de contador para que cada nuevo clip tenga nombre nuevo
var contaMuros:Number = 0;
// Funcion que hace que apareca un nuevo Muro en la pelicula
function crearMuros() {
   // Cada vez que se ejecuta la funcion crearMuros se aumenta en 1 el contador
   contaMuros++;
   // Agrega en la ultima posicion de la array un attachMovie y queda como valor el nombre de el mouro.
   // El movieClip id_muro sirve de padre de todas las rocas. Hereda las propiedades de la Clase Muro.as
   _root.MiArray.push(_root.attachMovie("id_muro", "muro"+contaMuros, getNextHighestDepth()));
}
// Intervalo que hace que se ejecute la funcion crearMuros
var miInterval:Number = setInterval(crearMuros, 500);
////////// Fin Muros

////////// Inicio Laser
// Variable que nos sirve de contador para que cada nuevo clip tenga nombre nuevo
var contaLaser:Number = 0;
this.boton.onPress = function() {
   // Cada vez que se pulsa el boton se aumenta en 1 contaLaser
   contaLaser++;
   // Agrega un laser en la pelicula. Este larser hereda todas las propiedades de la Clase Laser.as
   _root.attachMovie("id_laser", "laser"+contaLaser, getNextHighestDepth());
};
////////// Fin Laser

////////// Inicio Explosion y Puntaje
// Funcion que hace que aparesca la explosion. Se activa cuando hay una colisión.
// Cada vez que explota  cambia el puntaje
_global.contaExplosion = 0;
function Explosion() {
   // Variable que nos sirve de contador para que cada nuevo clip tenga nombre nuevo
   contaExplosion++;
   _root.attachMovie("id_explosion", "explosion"+contaExplosion, getNextHighestDepth(), {_y:115, _x:350});
   // Hay un texto dinamico con variable llamada Puntaje.
   Puntaje = "Puntos: "+(contaExplosion*20);
}
////////// Fin Explosion y Puntaje

////////// Inicio Cronometro
// Esto hace que el juego dure 15 segundos.
var Cronometro:Number = 15;
// Funcion que se repetira cada 1000 milisegundos osea 1 segundo
function cuentaAtras() {
//   Cada vez que se ejectua esta funcion se le resta 1 a el Cronometro
   Cronometro--;
   // cuando la variable cronometro llega a 0 para los muros y va al frame 3
   if (Cronometro<0) {
      _root.gotoAndStop(3);
      clearInterval(miInterval);
   }
   // Esto hace que aparesca el tiempo en un texto dinamico
   tiempo = "Tiempo: "+Cronometro;
}
var Reloj:Number = setInterval(cuentaAtras, 1000);
////////// Fin Cronometro

Código Clase laser Laser.as  :

// Importa la clase Tween que nos va a servir para darle movimiento  a la bala
import mx.transitions.Tween;
// La Clase Laser hereda las propiedades del objeto MovieClip, para que pueda hacer todas las cosas que
// hace un MovieClip y no de error. Esta Clase la hereda el MovieClip id_laser en la película principal desde la biblioteca
class Laser extends MovieClip {
    // Funcion Constructora. Se ejecuta cuando el MovieClip que hereda esta clase se crea con un attachMovie
   function Laser() {
      // Posicion vertical
      this._y = 115;
      // Este codigo hace que el disparo se mueva.
      var miDisparo:Tween = new Tween(this, "_x", mx.transitions.easing.None.easeNone, 70, 500, 15, false);
      // variable que ayuda a que no se pierda la referencia de this en las siguientes funciones.
       var scope = this;
      // un evento de la clase Tween que ejecuta un codigo cuando el movimiento termina el recorrido.
      // Parecido a enterFrame
      miDisparo.onMotionFinished = function():Void  {
         // Cuando termina el recorrido el Movieclip, este es eliminado
         scope.removeMovieClip();
      };
      // un evento de la clase Tween que ejecuta un codigo cuando el movimiento se esta produciendo. Parecido a enterFrame
      miDisparo.onMotionChanged = function():Void  {
         // Este pedazo es la razon de este post y la parte mas dificil. Asi que veneradlo. Si lees el post entenderas este pedazo
         // Cada vez que nace un muro, este deja el registro de su nombre en la array MiArray.
         // Y cada vez que un muro es eliminado o termina su recorrido, su nombre tambien es eliminado de la array.
         // Cada vez que nace un laser, este revisa todos los muros que hay en la pelicula,
         // revisando todos los datos que hay en la array MiArray.
         for (var i:Number = 0; i<_root.MiArray.length; i++) {
            if (scope.hitTest(_root.MiArray[i])) {
               // Si choca contra algun movieClip que tenga el nombre archivado en la Array MiArray
               // de la pelicula principal, el movieClip que herede esta clase se elimina
               scope.removeMovieClip();
               // elimina tambien la roca con la que choco
               _root.MiArray[i].removeMovieClip();
               // ejecuta la funcion Explosion de la pelicula principal. Esta funcion hace que salga la explosion
               _root.Explosion();
            }
         }
      };
   }
}

Código Clase Muro Muro.as:

// Lo mismo que la Clase Laser :)
import mx.transitions.Tween;
class Muro extends MovieClip {
   public function Muro() {
      this._x = 342;
      var miDisparo:Tween = new Tween(this, "_y", mx.transitions.easing.None.easeNone, -35, 200, 25, false);
      var scope = this;
      miDisparo.onMotionFinished = function() {
         scope.removeMovieClip();
// Cuando una roca termina su recorrido, elimina el primer elemento de la array, Osea, el nombre del MovieClip que heredo esta clase
         _root.MiArray.shift();
      };
   }
}

Leer entrada completa | Make a Comment ( 17 so far )

Robot Maniatico disparando contra una roca en Flash con Action Script – Colisiones

Posted on diciembre 30, 2006. Filed under: Colisiones, Ejemplos Mios, Flash |

He aca el link
Bueno, ya aprendí ha hacer colisiones. esto sirve para hacer una nave personaje enemigo etc que dispara balas proyectiles misiles, en este caso son láser contra una pared.

Solo voy a explicar lo nuevo. Lo que hay en este juego esta en los 4 últimos post.

El código

var contador = 1;
var contaExplocion = 20;
import mx.transitions.Tween;
function disparo() {
    contador++;
    _root.attachMovie(“laser”, “miLaser”+[contador], contador);
    _root[“miLaser”+contador]._y = 86;
    var miDisparo:Tween = new Tween(_root[“miLaser”+contador], “_x”, mx.transitions.easing.None.easeNone, 55, 500, 15, false);
}
function F_explocion() {
    contaExplocion++;
    _root.attachMovie(“explocion”, “explo”+[contaExplocion], contaExplocion);
    _root[“explo”+contaExplocion]._x = 345;
    _root[“explo”+contaExplocion]._y = 90;
}
this.boton.onPress = function() {
    disparo();
};

El problema que tenia, y que me llevo varias horas en resolver era el siguiente. Cuando un dispara un, se crea un movie clip con el nombre miLaser# el # es un numero que va creciendo, miLaser1, miLaser2 miLaser3 así hasta el infinito. Ahora, para hacer que un movie clip cualquiera con el nombre miLaser# colisionara con el muro tenia que colocar  miLaser#.hitTest(muro) pero no encontre la forma de que cada miLaser# se le asignara el nombre correcto para que colisionaran.

Después de mucho pensar soluciones le me prendio el bombillito. El padre de todos los miLaser# es un Movie clip que esta en la biblioteca de la pelicula que se llama laser. De el nacen todos los miLaser#. entonses lo que hice fue colocar el siguiente codigo en el padre

this.onEnterFrame = function() {
    if (this.hitTest(_root.muro)) {
        removeMovieClip(this);
        F_explocion();
    }
};

La razón por la que no había hecho esto antes, es que quería que todo el código estuviera en el primer fotograma bien ordenadito. Pero no consegi hacerlo, la única forma fue esta.

Aun creo que la mejor forma seria con una clase y un método con herencias. Pero me dio pereza estudiar como funcionaban las herencias. aunque no estoy seguro que funcione. En fin. Logre hacer que un bicho dispare y pase algo cuando toque algo.

Leer entrada completa | Make a Comment ( None so far )

Detección de Colisiones en Flash con Action Script

Posted on diciembre 30, 2006. Filed under: Colisiones, Ejemplos Mios, Eventos, Movimiento |

Acá esta el archivo para ver

Y el código es este

Codigo que hace aparecer el misil de mario bros en la posición que sale

this.attachMovie(“Misil_0″,”Misil”,1)
this.Misil._x = 0;
this.Misil._y = 135;

Codigo que hace que cuando se pulse el botón el misil se mueva

import mx.transitions.Tween;
this.boton.onRelease = function (){
    var myTween:Tween = new Tween(Misil, “_x”, mx.transitions.easing.None.easeOut, 0, 300, 1, true);
}

Codigo que hace que cuando la película sienta que el misil y el muro se toquen, el misil desaparezca y haya una explosión

this.onEnterFrame = function (){
    if (this.Misil.hitTest(this.Muro)){
        removeMovieClip(Misil);
        this.attachMovie(“explocion”,”explocion1″,2)
        this.explocion1._x = 265;
        this.explocion1._y = 148;
    }
}

Lo importante de todo esto es el hitTest Con el detectamos las colisiones,

if (Misil.hitTest(Muro))

Acá esta diciendo, que si Misil toca Muro entonces

removeMovieClip(Misil);

Misil se removerá y

this.attachMovie(“explocion”,”explocion1″,2)

La explosión aparecerá

Leer entrada completa | Make a Comment ( 9 so far )

Robot Disparando Mortales Rayos Laser

Posted on diciembre 29, 2006. Filed under: Ejemplos Mios, Movie Clips, Movimiento |

Bueno… Ya aprendí a hacer que un robot volador dispare en Flash Yupi!!!.  Aca esta la película.

Esto es resultado de los dos últimos post. Hay que verlos para entender este codigo. Aca se explica como hacer para que salgan los rayos láser cada vez que se dispara. Aca explica como hacer el movimiento de los rayos laser.

Bueno este es el código

var contador = 1;
import mx.transitions.Tween;
function disparo() {
    contador++;
    _root.attachMovie("laser", "miLaser"+[contador], contador);
    _root["miLaser"+contador]._y = 86;
    var miDisparo:Tween = new Tween(_root["miLaser"+contador], "_x", mx.transitions.easing.None.easeNone, 55, 500, 15, false);
}

this.boton.onPress = function() {
    disparo();
};

Lo único que voy a explicar de este código es _root["miLaser"+contador]._y = 86;
Lo que hace esta linea es darle la posición vertical _y a los disparos laser

Ahora a por las Colisiones!!!

Leer entrada completa | Make a Comment ( 3 so far )

Animación o Movimiento con código o Action Script con la clase Tween – Sabroso

Posted on diciembre 29, 2006. Filed under: Clases, Ejemplos Mios, Guias, Movie Clips, Movimiento |

Estoy aprendiendo a manejar la clase Tween que conocí y estoy aprendiendo como funciona de Tutoriales-Flash y también de la ayuda de flash. La verdad es que esta genial. Facilita mucho el trabajo para hacer una animación, y claro esta, para hacer proyectiles en un juego.

Para que sirve?
Sirve para mover gráficos solo con código

Cual es su estructura?

import mx.transitions.Tween;
var myTween:Tween = new Tween(misil1, “_x”, mx.transitions.easing.Back.easeOut, 0, 300, 4, true);

La primera linea, sirve para invocar la clase y hacer que funcione la animación. La segunda crea una instancia de la clase Tween “var myTween:Tween = new Tween”
Hay que decir que en myTween podemos colocar el nombre que queramos y que :Tween sirve para decir que tipo de dato es var myTween pero no es indispensable, pero si hace que se ejecute mas rapido.

Lo sabroso
Lo realmente que es importante es lo que esta dentro de el paréntesis, y que paso a explicar.

(misil1, “_x”, mx.transitions.easing.Back.easeOut, 0, 300, 4, true);
(1, “2”, 3-1.3-2.3-3, 4, 5, 6, 7);

1. Nombre del Clip a Animar
2. La caracteristica del clip a animar. Puede ser Posicion, Transparencia, Escala, dimensiones, Ver acá las caracterizas mas importantes
3-1. Declaración de tramite que no entiendo muy bien
3-2. Tipo de aceleración que se le va a aplicar
3-3. Como inicia la aceleración
4. Donde inicia la animación. Valor de la caracteristica (ver punto dos) que va tener al inicio. Aca la pocicion inicial de _x va ser 0
5. Donde Termina la animación
6. La duración de segundos o fotogramas
7. Si se coloca true el punto 6  va ser segundos, si se coloca false va ser fotogramas

Los valores mas importantes son Tipo de aceleración 3-2 y como inicia la aceleración 3-3 ya que con estas se le da el aspecto que tendrá la animación
Los valores que puede tener 3-2 son

  • Back
  • Bounce
  • Elastic
  • Regular
  • Strong
  • None

Los valores que puede tener 3-3 son

  • easeIn
  • easeOut
  • easeInOut
  • easeNone

Para entender mejor todo ver esta película que hice. En la pelicula esta el codigo

Código para Copiar y Pegar

import mx.transitions.Tween;
this.boton.onRelease = function (){
var myTween:Tween = new Tween(misil, "_x", mx.transitions.easing.Back.easeIn, 0, 300, 4, true);
}
-----------------
Back
Bounce
Elastic
Regular
Strong
None
-----------------
easeIn
easeOut
easeInOut
easeNone
-------------

Leer entrada completa | Make a Comment ( 5 so far )

Pepitas aleatorias al oprimir boton y tecla

Posted on diciembre 28, 2006. Filed under: Ejemplos Mios, Eventos, Flash, Movie Clips |

Aca la Pelicula original

Lo que queremos, es tener un botón, que al pulsaro haga apareser una bolita en una ubicación aleatoria.

el codigo es este
var contador = 0;
function pepitas() {
    contador++;
    _root.attachMovie("bola", "pepa"+[contador], contador);
    _root["pepa"+contador]._x = Math.floor(Math.random()*300);
    _root["pepa"+contador]._y = Math.floor(Math.random()*200);
}
this.boton.onRelease = function() {
    pepitas();
};

Lo vamos a ver en detalle. Lo primero que hacemos es vincular a action script la bolita que queremos que aparezca, desde la biblioteca. Esa bolita es una imagen y tiene el nombre “bola”. Entonces con esta parte del código le decimos que  cree un nuevo movie clip (attachMovie) y que tome como base bola (“bola”,) y que le coloque como nombre pepa mas el numero que tenga la variable contador .
   _root.attachMovie("bola", "pepa"+[contador], contador);
Luego con el siguiente codigo le decimos que cada bola que cree la coloque en una posición aleatoria
    _root["pepa"+contador]._x = Math.floor(Math.random()*300);
    _root["pepa"+contador]._y = Math.floor(Math.random()*200);

Todo esto va estar dentro de una función que se llama pepitas. Esta funcion tambien a a tener
    contador++;
Que nos va a servir para que cada vez que cada pepita tenga un nombre diferente.

Lo importante

Aleatorio
Para hacer que la posición sea aleatoria utilizamos la declaraciones
    Math.floor(Math.random()*300);
Lo que hace esto es multiplicar un numero aleatorio entre 0 y 0.9 por 300 y 200  que son las dimensiones de la película
Nombres
    "pepa"+[contador]
y
    _root["pepa"+contador]

Que nos sirven para crear infinitos clips de pelicula con diferente nombre y nivel

Leer entrada completa | Make a Comment ( 2 so far )

Crear un contador basico en flash

Posted on diciembre 22, 2006. Filed under: Ejemplos Mios, Flash, Texto, Variables |

Actualizacion: El contador de este Link es Muuucho mejor 

Creamos la Variable que nos va servir de contador y le colocamos como nombre “contador y como valor 1

var contador = 1;

Creamos el campo de texto donde va aparecer la variable

this.createTextField(“texto_txt”,1,50,50,50,50);

Decimos que en todo momento se escriba en el campo de texto, el valor de la variable contador

onEnterFrame = function(){
this.texto_txt.text = contador;
}

Creamos un boton que al oprimirlo le suma 1 a la variable contador

boton.onPress = function (){
contador++;
};

YA esta el contador : )

var contador = 1;
this.createTextField(“texto_txt”,1,50,50,50,50);
onEnterFrame = function(){
this.texto_txt.text = contador;
}
boton.onPress = function (){
contador++;
};

Leer entrada completa | Make a Comment ( 14 so far )

Liked it here?
Why not try sites on the blogroll...