Comunidad de diseño web y desarrollo en internet online

Duda en un videojuego flash

Citar            
MensajeEscrito el 28 May 2009 03:47 pm
Hola, buenas

Os explico más o menos. Estoy intentando desarrollar un videojuego basado en un mini-juego de la nintendoDS del juego el profesor Layton. En este juego, hay 3 conejos y 3 lobos, y tienes que hacer cruzar a los animales a través de un río por medio de una barca. Las condiciones son las siguientes:

- No puede haber más conejos que lobos en cualquiera de los dos lados, solo puede haber el mismo número de lobos y conejos; o más conejos que lobos.
- Para que puedas moverse la barca, debe de haber un animal encima de la misma.
- En la barca no puede haber más de 2 animales subidos.

Ahora mismo tengo el siguiente código:

Código :

var ListaPasajeros:Array = new Array ();
var posicionPasajerosIni:Array = new Array (90, 120, 150);
var orillaA:Number = Math.round (rio_mc._x);
var orillaB:Number = Math.round (rio_mc._x + rio_mc._width - barca_mc._width);
var contador:Number = 0;

pulsa_txt.text = contador;

//Esta función introduce los animales dentro de un array, y comprueba que hay 2 o menos animales en la barca.
function agregarPasajeros (mc) {
   if (ListaPasajeros.length < 2) {
      ListaPasajeros.push (mc);
      mc.X = mc._x;
      barca_mc.X = barca_mc._x;
   }
   else {
      mc.stopDrag ();
      movimiento (mc,mc.X,mc.Y);
   }
}

//Comprueba los elementos del Array, que hay dentro de la barca para conocer que elemento se ha introducido.
function comprobarListaPasajeros (mc) {
   for (var i = 0; i < ListaPasajeros.length; i++) {
      if (mc._name == ListaPasajeros[i]._name) {
         ListaPasajeros.splice (i);
      }
   }
   trace (ListaPasajeros);
}
//Determina si hay los elementos suficientes en la barca para que pueda navegar
function navegar () {
   if (ListaPasajeros.length > 0 && ListaPasajeros.length < 3) {
      poderNavegar = true;
   }
   else {
      poderNavegar = false;
   }
   return poderNavegar;
}
//Permite arrastrar los animales dentro de la barca
function arrastrar () {
   this.onPress = function () {
      this.startDrag (false);

   };
   this.onRelease = function () {
      this.stopDrag ();
      choque (this);
   };
}


//Comprueba cuando los elementos son alojados dentro de la barca
function choque (mc) {
   if (barca_mc.hitTest (mc)) {
      agregarPasajeros (mc);

   }
   else {
      movimiento (mc,mc.X,mc.Y);
      comprobarListaPasajeros (mc);
   }
}
//Evalúa el número de conejos y lobos que hay y los posiciona en el escenario en un orden específico
for (var i = 1; i <= 3; i++) {
   var conejos:MovieClip = eval ("co" + i);
   var lobos:MovieClip = eval ("lo" + i);
   arrastrar.apply (lobos);
   arrastrar.apply (conejos);
   lobos.X = lobos._x;
   lobos.Y = lobos._y;
   conejos.X = conejos._x;
   conejos.Y = conejos._y;

   lobos._x = 80;
   lobos._y = posicionPasajerosIni[i - 1];
   conejos._x = 120;
   conejos._y = posicionPasajerosIni[i - 1];
}
//Movimiento con efecto easing para el movimiento de los animales cuando son colocados en el otro lado o cuando no te permite añadir más animales a la barca
function movimiento (mc:MovieClip, X:Number, Y:Number) {
   var vel:Number = 3;
   mc.onEnterFrame = function () {
      this._x = this._x + (X - this._x) / vel;
      this._y = this._y + (Y - this._y) / vel;
      var dif:Number = Math.abs (this._y - Y) + Math.abs (this._x - X);
      if (dif < 2) {
         this._x = X;
         this._y = Y;
         //trace ("SI");
         descargarPasajeros (pasajero);
         delete this.onEnterFrame;
      }
   };
}

//Movimiento que realiza la barca para moverse de un lado a otro. De momento es igual que la anterior
function movimientoBarca (mc:MovieClip, X:Number, Y:Number) {
   var vel:Number = 3;
   mc.onEnterFrame = function () {
      this._x = this._x + (X - this._x) / vel;
      this._y = this._y + (Y - this._y) / vel;
      var dif:Number = Math.abs (this._y - Y) + Math.abs (this._x - X);
      if (dif < 2) {
         this._x = X;
         this._y = Y;
         //trace ("SI");
         delete this.onEnterFrame;
      }
   };
}

//Cuando pulsas sobre este MovieClip, ejecuta el movimiento de la barca y cuenta el número de veces la barca se ha movido.
navegar_mc.onRelease = function () {
   if (barca_mc._x == orillaA && navegar ()) {
      desplazarPasajeros (orillaB);
      movimientoBarca (barca_mc,orillaB,barca_mc._y);
      contador++;
      pulsa_txt.text = contador;
   }
   else if (barca_mc._x == orillaB && navegar () == true) {
      desplazarPasajeros (orillaA);
      movimientoBarca (barca_mc,orillaA,barca_mc._y);
      contador++;
      pulsa_txt.text = contador;
   }

};

//Desplaza a los pasajeros a la vez que se mueve la barca
function desplazarPasajeros (orilla) {
   for (var i = 0; i < ListaPasajeros.length; i++) {
      var pasajero:MovieClip = ListaPasajeros[i];
      var dif = pasajero.X - barca_mc.X;
      movimiento (pasajero,orilla + dif,pasajero._y);
      descargarPasajero (pasajero);


   }
}

//Esta es la última función que he realizado, y es la que no me funciona. En teoría es la que tendría que mover a los elementos que hay dentro de la barca al otro lado y posicionarlos en su posición correcta.
function descargarPasajeros (pasajero) {
   for (var i = 1; i <= ListaPasajeros.length; i++) {
      var conejos:MovieClip = eval ("co" + i);
      var lobos:MovieClip = eval ("lo" + i);
      if (conejos._name == ListaPasajeros [i].toString());
      lobos._x = 490;
      lobos._y = posicionPasajerosIni[i - 1];
      conejos._x = 520;
      conejos._y = posicionPasajerosIni[i - 1];
      lobos.X = lobos._x;
      lobos.Y = lobos._y;
      conejos.X = conejos._x;
      conejos.Y = conejos._y;
   }
}


He explicado más o menos en qué consiste cada parte del código. Lo que busco es que cuando la barca llega al otro lado del río, los elementos que hay en la barca se posicionen en la otra orilla. Y no consigo sacarlo... xD

Un saludo y gracias

Por coris

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 May 2009 11:07 am
Nadie puede ayudarme? :(

Por coris

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 May 2009 03:43 pm
Traté de ponerme a leerlo, pero es demasiado largo el código como para ehcarle una mirada rápida. Trata de aislar el problema y publica sólo el código que corresponde, es más fácil que consigas ayuda si planteas sólo lo necesario y no nos obligas a leer todo el código.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox

 

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