Loop

Bucle for in en Python

Posted on abril 4, 2007. Filed under: Loop, Python |

En Python los bucles for in no son iguales a los e flash. Los de Python, tiene un listado interno, y repite tantas veces como elementos haya en el listado. Ejemplo

for numero in [1, 5, 10]:
  print numero

Resultado
1
5
10

La variable numero recibe el valor de cada uno los valores de la lista y luego pasa al otro valor.

Rangos
Por ejemplo cuando uno tiene que hacer una repetición muy larga, en vez de escribir numero por numero, hacemos que repita en un rango de numeros. Ejemplo

for numero in range (1, 5):
  print numero
Resultado
1
2
3
4

No sale el cinco por que llega hasta el numero anterior. Estos son algunos ejemplos de lo que se puede hacer con range.

>>> range(2, 10, 2)
[2, 4, 6, 8]
>>> range(2, 10, 3)
[2, 5, 8]
>>> range(10, 5, -1)
[10, 9, 8, 7, 6]
>>> range(3, -1, -1)
[3, 2, 1, 0]

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

Bucle o Loop While

Posted on abril 4, 2007. Filed under: Loop, Python |

Asi se hace un sencillo bucle While en Python, En este link esta su equivalencia en Flash.

i = 0
while i <= 30:
  print i
  i += 1

Leer entrada completa | Make a Comment ( None 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 )

Hacer un Loop de linea de tiempo con setInterval ()

Posted on diciembre 18, 2006. Filed under: Flash, Linea de Tiempo, Loop |

setInterval()

Disponibilidad

Flash Player 6.

Sintaxis

setInterval(functionName, interval [, param1, param2, ..., paramN])

Parámetros

functionName Nombre de función o referencia a una
función anónima.

interval Tiempo entre llamada y llamada al parámetro
functionName, expresado en milisegundos.

param1,
param2, ...,
paramN Parámetros opcionales que se pasan al
parámetro function o methodName.

Valor devuelto

Identificador de intervalo que se puede pasar a clearInterval()
para cancelar el intervalo.

Descripción

Función; llama a una función, un método o un objeto a intervalos regulares
mientras se reproduce un archivo SWF. Puede utilizar una función de intervalo
para actualizar variables desde una base de datos o actualizar una visualización
de tiempo.

Si el valor de interval es menor que la velocidad de
fotogramas del archivo SWF (por ejemplo, 10 fotogramas por segundo [fps]
equivalen a 100 milisegundos), se llama a la función de intervalo tan cerca del
valor de interval como sea posible. Debe utilizar la
función updateAfterEvent() para
asegurarse de que la pantalla se actualiza con suficiente frecuencia. Si el
valor de interval es mayor que la velocidad de fotogramas
del archivo SWF, sólo se llama a la función de intervalo cada vez que la cabeza
lectora accede a un fotograma para minimizar el impacto cuando se actualiza la
pantalla.

Ejemplo

Sintaxis 1: en el ejemplo siguiente se llama a una función anónima cada 1.000
milisegundos (cada 1 segundo).

setInterval( function(){ trace("interval called"); }, 1000 );

Sintaxis 2: en el ejemplo siguiente se definen dos controladores de eventos y
se emite una llamada a cada uno de ellos. Ambas llamadas a setInterval() envían la cadena
"intervalo llamado" al panel Salida cada 1.000 milisegundos. La
primera llamada a setInterval()
llama a la función callback1(), que contiene una acción trace(). La segunda llamada a setInterval() pasa la cadena
"intervalo llamado" a la función callback2() como
parámetro.

function callback1() {  trace("interval called"); }

function callback2(arg) {  trace(arg);}

setInterval( callback1, 1000 );setInterval( callback2, 1000, "intervalo llamado" );

Sintaxis 3: en este ejemplo se utiliza un método de un objeto. Si desea
llamar a un método definido para un objeto, debe utilizar esta sintaxis.

obj = new Object();obj.interval = function() {  trace("interval function called"); }

setInterval( obj, "interval", 1000 );

obj2 = new Object();obj2.interval = function(s) {  trace(s); }setInterval( obj2, "interval", 1000, "se ha llamado a la función de intervalo" );

Para llamar a un método de un objeto, debe utilizar la segunda forma de la
sintaxis de setInterval(), tal
como se indica a continuación:

setInterval( obj2, "interval", 1000, "se ha llamado a la función de intervalo" );

Véase también

clearInterval(), updateAfterEvent()

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

Utilizar for in para descubrir todas las propiedades de los objetos

Posted on diciembre 17, 2006. Filed under: Flash, Loop, Objetos |

var pelota= new Object();
pelota.radio=50;
pelota.color=”Rojo”;

for (var asdf in pelota){
trace (“Propiedad “+ asdf +” tiene el valor ” +pelota[asdf]);
}

Resultado

Propiedad color tiene el valor Rojo
Propiedad radio tiene el valor 50

En este codigo lo que hacemos primero es crear un nuevo objeto llamado pelota con var pelota= new Object(); Luego a este objeto pelota le creamos dos propiedades. una radio pelota.radio y otra color pelota.color . a color le damos el valor de 50; y a color el valor “Rojo”;

Luego le decimos que haga una lista de las propiedades de pelota diciéndolefor for (var asdf in pelota){
trace (“Propiedad “+ asdf +” tiene el valor ” +pelota[asdf]);
}

Aca asdf se puede sustituir por cualquier cosa, esa valor no importa.

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

onEnterFrame – Un evento a la velocidad de fotogramas x segundo en la pelicula

Posted on diciembre 11, 2006. Filed under: Flash, Linea de Tiempo, Loop |

onEnterFrame es un evento que se ejecuta, a la misma velocidad de la linea de tiempo. Mas no esta ligada a ella. Osea, la película o un Movie Clip pueden parar pero esto no de tendrá el evento onEnterFrame.

El evento onEnterFrame tiene que tener esta sintaxis. Dentro de la función se encontrara lo que se ejecutara.

ruta.onEnterFrame = function (){
acción;
}

Para parar un evento onEnterFrame hay que utilizar este código

delete ruta.onEnterFrame;

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

Movimiento basico con codigo

Posted on diciembre 11, 2006. Filed under: Flash, Loop, Movimiento |

En el fotograma 1 ponemos

bola._x +=1;

Y luego en el fotograma 2 ponemos

gotoAndPlay(1);

Y así la bola se desplazara 1 pixel en el en fotograma 1, y en el fotograma 2 se devolverá al fotograma 1 repitiendo la acción hasta al infinito, produciendo un efecto de movimiento en la bola

O también podemos hacer así, que queda mejor.

_root.bola.onEnterFrame = function (){
_x +=1;
}

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

loop, lazo, bucle, repiticion etc con for

Posted on diciembre 8, 2006. Filed under: Flash, Loop |

for (Iniciación; Condición; Actualización){
declaración
}

  1. Creamos la variable.
  2. Colocamos la condición
  3. Indicamos el Contador (i++)

Queremos que sume 1 + 1 hasta llegar a 10 con el loop for

for (var x = 1; x<=10; x++){
trace (x);
}

Ahora hacemos lo mismo pero con el loop while

var x = 1
while (x<=10){
trace (x);
x++;
}

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

Loop, Lasos o Repeticiones con While y hacer operaciones matematicas a las variables

Posted on noviembre 24, 2006. Filed under: Flash, Loop |

Código Malo

var x = 20;
trace (x);
x = x + 1;
trace (x);
x = x + 1;
trace (x);
x = x + 1;

Aca esta diciento que la variable x tiene un valor de 20. luego le dice que dibuje X y una vez hecho esto a X le sume 1 y luego vuelva a dibujar a x

El resultado es. 20 21 22

Codigo Bonito

var x = 20;
while (x<=30){
trace (x);
x=x+1;
}

Acá lo que le esta diciendo es; que la variable X tiene un valor de 20. luego le dice que… Cada vez que X sea menor o igual a 30 entonces dibuje x y luego que dibuje x le sume a X 1. y que repita este procedimiento hasta que X deje de ser menor o igual a 30. Yupi. Resultado. 20 21 22 23 24 25 26 27 28 29 30

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

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