Comunidad de diseño web y desarrollo en internet online

eliminar objetos creados con actionscrip

Citar            
MensajeEscrito el 11 Dic 2006 09:31 am
Hola, estoy haciendo un juego y tengo dos problemas. Intentare explicarme lo mejor posible.

El Primero:
He creado un clip de pelicula con un dibujito de una nave. lo llamo "enemy1". Lo exporto para actionscrip y le doy el mismo nombre.

Fotograma1 (inicio):
Esto funciona bien

Código :

_root.onEnterFrame = function() {
   if (_root.score == "200") {
      gotoAndPlay("nivel2", "inicio2");
   }
};



Fotograma2 (juego): Esto tambien funciona bien

Código :

numEnemy = 4;
for (i=2; i<=numEnemy; i++) {
   enemy1.duplicateMovieClip("enemy"+i, i+10);
}
score = 0;
stop();


En este fotograma, pongo el objeto "enemy1" en el escenario, dandole este otro codigo:

Código :

onClipEvent (load) {
   function reset() {
      this._x = random (550) +40;
      this._y = 1;
      enemySpeed = random(10) +10;
      this.gotoAndStop(1);
   }
   reset();
}
onClipEvent (enterFrame) {
   this._y += enemySpeed;
   if (this._y>640) {
      reset();
   }
   if (this.hitTest(_root.bird)) {
      _root.gotoAndStop("gameOver1");
   }
}


Fotograma3 (game over): Esto no funciona

Código :

for (i=2; i<=numEnemy; i++) {
   enemy1.removeMovieClip("enemy1");
}


y un boton con este codigo (elimino "enemy1" del escenario): Esto si funciona

Código :

on (release) {
   gotoAndPlay("nivel2", "inicio2");
}



PROBLEMA:
Cuando el enemigo mata al personaje, y va a la pantalla de game over, estos enemigo siguen saliendo, y no consigo el codigo correcto para que no aparezcan en la pantalla de game over. Lo he intentado de multiples formas con el removeMovieClip, tipo:

Código :

onEnterFrame= function(){;
removeMovieClip("enemy1");
}


y mas, pero nada, siguen apareciendo los enemigos en el tercer fotograma, que es el game over.

¿Que puedo hacer para que enemy1, al cual llamo por actionscrip para ser duplicado en el escenario, no aparezca en el siguienet fotograma?



Muchisimas ghracias de antemano. Un saludo

:swat: Editado zguillez : Utiliza las etiquetas [code] para postear código

Por palandam

14 de clabLevel



 



Ultima edición por palandam el 14 Dic 2006 11:05 am, editado 4 veces

firefox
Citar            
MensajeEscrito el 11 Dic 2006 01:11 pm
Deberias eliminar todos los duplicados

Código :

for (i=1; i<=numEnemy; i++) {
  removeMovieClip(this["enemy"+i]);
}

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 11 Dic 2006 05:33 pm
¡¡ GRACIAS, esta misma noche lo probare !!!

Un saludo, y de nuevo GRACIAS

Por palandam

14 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Dic 2006 10:50 am
Funciona Correctamente!!!!!!! Muchas gracias ZGUILLEZ.

Y ahora tengo otro problema,

Todo funciona bien, son 4 fases, pero cada vez que cargo la pelicula, a una de las fases, aleatoriamente, no una en concreto, le falla es sistema de puntuacion y por lo tanto nunca termina la fase. Me explico, si la fase 1 tiene que acabar a los 300 puntos, pues aleatoriamente cada vez que cargo la pelicula esa fase (u otra) no termina a los 300 puntos, si no que sigue sumando puntos convirtiendose en un bucle que no se acaba.....

Cual puede ser el problema??? por que a veces funciona y otras no, si no he cambiado nada???

El juego esta acabado a espera de este detalle, pues nunca consigo que todas las fases funcionen, y estoy un poco harto de jugar al mismo juego esperando que esta vez, funcionen todas la fases.....alguien tiene alguna idea??????

Por palandam

14 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Dic 2006 01:23 pm
La verdad es que no me queda muy claro que es lo que estás haciendo. ¿puedes dar más detalles?
pon el código que utilizas para lanzar aleatoriamente una fase, que es exactamente una fase, que código utilizas para sumar puntos y que código utilizas para controlar la puntuación a la que ha de acabar...

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 12 Dic 2006 02:44 pm
ok:

-codigo para una fase: no es aleatoria, mando a una escena determinada

Código :

_root.onEnterFrame = function() {
   if (_root.score == "200") {
      gotoAndPlay("nivel2", "inicio2");
   }
};


- que es una fase: una fase es una escena, en ella hay 3 fotogramas, el primero es para darle al play y jugar la fase, el segundo para jugar, y el tercero para gameover y try again.

Código :

numEnemy = 4;
for (i=2; i<=numEnemy; i++) {
   enemy1.duplicateMovieClip("enemy"+i, i+10);
}
score = 0;
stop();



Enemigos:

Código :

onClipEvent (load) {
   function reset() {
      this._x = random (550) +40;
      this._y = 1;
      enemySpeed = random(10) +10;
      this.gotoAndStop(1);
   }
   reset();
}
onClipEvent (enterFrame) {
   this._y += enemySpeed;
   if (this._y>640) {
      reset();
   }
   if (this.hitTest(_root.bird)) {
      _root.gotoAndStop("gameOver1");
   }
}

[b]Heroe:[/b]
onClipEvent (load) {
   moveSpeed = 15;
   _root.laser._visible = false;
   laserCounter = 1;
   maxLasers = 5;
   depthCounter = 1;
}
onClipEvent (enterFrame) {
   if (Key.isDown(Key.SPACE) and (laserCounter<=maxLasers)) {
      laserCounter++;
      _root.bird.gotoAndPlay(2);
      _root.laser.duplicateMovieClip("laser"+depthCounter, depthCounter);
      _root["laser"+depthCounter]._visible = true;
      depthCounter++;
      if (depthCounter>maxLasers) {
         depthCounter = 1;
      }
   }
   if (Key.isDown(Key.RIGHT) && this._x<600) {
      this._x += moveSpeed;
   } else if (Key.isDown(Key.LEFT) && this._x>45) {
      this._x -= moveSpeed;
   }
   if (Key.isDown(Key.DOWN) && this._y<580) {
      this._y += moveSpeed;
   } else if (Key.isDown(Key.UP) && this._y>400) {
      this._y -= moveSpeed;
   }
}


Arma del heroe:

Código :

onClipEvent (load) {
   laserMoveSpeed = 20;
   this._x = _root.bird._x;
   this._y = _root.bird._y;
}
onClipEvent (enterFrame) {
   if (this._name<>"laser") {
      this._y -= laserMoveSpeed;
      if (this._y<17.5) {
         _root.bird.laserCounter--;
         this.removeMovieClip();
      }
      for (i=1; i<=_root.numEnemy; i++) {
         if (this.hitTest(_root["enemy"+i])) {
            _root.score += 5;
            _root["enemy"+i].gotoAndPlay(2);
         }
      }
   }
}



-Puntuacion: ya definidas cuanto hay que sumarse al score cuando matas a un enemigo(1), cuando ese score llega a ciertos puntos, le ordeno pasar de nivel(2).

1.

Código :

for (i=1; i<=_root.numEnemy; i++) {
         if (this.hitTest(_root["enemy"+i])) {
            _root.score += 5;
            _root["enemy"+i].gotoAndPlay(2);
         }



2.

Código :

 if (_root.score == "200") {
      gotoAndPlay("nivel2", "inicio2");
   }


:swat: *pon las etiquetas code!!!!

Por palandam

14 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Dic 2006 12:00 pm
El problema te lo puede dar el sistema que utilizas para controlar la puntuación:

Código :

if (_root.score == "200") {

Como estás sumando 5 puntos cada vez que tocas un enemigo puede darse el caso de que toques varios a la vez y pases de 190 a 205 puntos, con lo que score== "200" no se cumple.

Por otro lado te recomiendo que no utilices escenas (personalmente creo que apestan U_U, no se porque no las eliminan de una p*** vez...). coloca los tres fotogramas que tienes en cada una y metelos dentro de MovieClips, y cada clip lo metes en un frame de la escena principal con un stop() (y un marker), así para "cambiar de escena" cambias de fotograma con gotoAndStop y listo... (en serio, la escenas apestan)

Y para controlar la puntuación no utilices un onEnterFrame, haz una función y la llamas cada vez que sumes puntos. Algo así: (en el primer fotograma)

Código :

var score:Number = 0;
var faseActual:Number = 1;
//
function controlaPuntuación()
{
   switch (faseActual)
   {
   case 1 :
      if (score >= "200")
      {
         faseActual = 2;
         gotoAndStop("fase2");
      }
      break;
   case 2 :
      if (score >= "300")
      {
         faseActual = 3;
         gotoAndStop("fase3");
      }
      break;
   case 3 :
      //etc...
   }
}

cuando sumes puntos

Código :

_root.score += 5;
_root.controlaPuntuación()

Por Zguillez

BOFH

10744 de clabLevel

85 tutoriales
17 articulos
3 ejemplos

Genero:Masculino   Bastard Operators From Hell Héroes Team Cristalab Editores

BCN

opera
Citar            
MensajeEscrito el 13 Dic 2006 05:23 pm
Gracias Zguillez!!!! Me pondré con ello ahora mimo, ya te contaré.

Por palandam

14 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Dic 2006 10:55 am
Perfecto Zguillez, en cuanto lei la primera frase que me escribiste ya lo comprendi todo, es cierto con un simple ">" ya se ha arreglado todo. Ahora va perfecto, solo queda hacer los arreglitos que me has comentado ;D.

Un saludo y muchas gracias por emplear tu tiempo en ayudarme.

Por palandam

14 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.