martes, 10 de marzo de 2015

javascript: Objetos y Colecciones en JavaScript - Otra Manera

function Jugador(O) {
   //I = I || {};
   var I = {}
 
   /************ Atributos *******************/
   // valores x defecto 
   I.name = I.name;
   I.active = true;
   I.color = "#00A";
   I.x = 350;
   I.y = 270;
   I.pos_x_ant = 0;
   I.pos_y_ant = 0;
   I.width = 32;
   I.height = 32;
   I.disparo = false; //si ya disparo
   I.playerBullets = [];
   I.velocidad = VELOCIDAD_JUGADOR;

   //mezclo los valores x defecto y los que vienen 
   I = $.extend({}, I, O); 

   /************ Metodos *******************/
   I.disparar = function(sentido) {
    //console.log("pium")

  if(!this.disparo){
     var bulletPosition = this.midpoint();

     if(sentido == 'abajo') velocidad = -5
      else velocidad = 5

       //agrego nuevos disparos
     this.playerBullets.push(Bullet({
       speed: velocidad,
       x: bulletPosition.x,
       y: bulletPosition.y
     }))

   this.disparo = true;
  }else{
   //this.disparo = false;
  }
   }
 }

 //////////////////////////////////////////////////////////////////

 function Bullet(I) {
   I.active = true;

   I.xVelocity = 0;
   I.yVelocity = -I.speed;
   I.width = 3;
   I.height = 10;
   I.color = "red";

   I.inBounds = function() { //true si sigue dentro de la pantalla
     return I.x >= 0 && I.x <= PANTALLA_ANCHO &&
       I.y >= 0 && I.y <= PANTALLA_ALTO;
   };

   I.draw = function() {
     canvas.fillStyle = this.color;
     canvas.fillRect(this.x, this.y, this.width, this.height);
   };

   I.update = function() {
     I.x += I.xVelocity;
     I.y += I.yVelocity;

     I.active = I.active && I.inBounds();
   };

   return I;
 }

 //////////////////////////////////////////////////////////////////
 // Ejecucion del Programa ////////////////////////////////////////
 //////////////////////////////////////////////////////////////////
 var player = Jugador({
  name: 'ric', //playerName
  color: 'red',
  x: 65,
  y: 35
 });

 player.disparar('arriba')
 player.disparar('arriba')
 player.disparar('arriba')

 //limpiar el array de balas (sacar las viejas o fuera del escenario)
 player.playerBullets = player.playerBullets.filter(function(b){
  return b.active == true   
 })

No hay comentarios:

Publicar un comentario