2017-01-01 4 views
0

У меня есть несколько таких объектов, как это (16)Как создать несколько объектов? (JavaScript)

function Baboo(x,y,size,speed,target,sps,life){ 
    MobRoot.call(this,x,y,size,speed,target,sps,life); 
    this.spsCoord = [500*0,500*3,500,500]; 
    this.coolDown = 60; 
    this.atack = 0;} 
    Baboo.prototype = Object.create(MobRoot.prototype); 

Baboo.prototype.throw = function() 
{ 
    projectiles.push(new Arrow(this.x,this.y,10,10,this.angle,150,this.target)); 
} 
Baboo.prototype.update = function(){ 
if(this.life>0) 
{ 
    this.sendBack(); 
    this.draw(); 
    this.checkClick(); 
    this.angle = CalculateSlope(this,this.target); 
    this.directionUpdate(); 
    this.updateBuffs(); 
    this.x += this.direction.x; 
    this.y += this.direction.y; 
}} 
    /*etc aditional methods*/ 

, что унаследует все из этого объекта

function MobRoot(x,y,size,speed,target,sps,life) 
{ 
    this.size = size*WindowScale; 
    this.x = x; 
    this.y = y; 
    this.angle = 0; 
    this.speed=speed; 
    this.colided=false; 
    this.maxlife = life; 
    this.life = life; 
    this.buffArray = []; 
    this.sps = sps; 
    this.target = target; 
    this.direction = 
    { 
     x:0, 
     y:0 
    } 
    //x,y,w,h 
    //ex sprite[0][0] = 0,0,500,500; 
    this.spsCoord = []; 
    this.isBoss = false; 
} 
MobRoot.prototype.directionUpdate = function() 
{ 
this.direction.x = this.speed*Math.cos(this.angle)*-1; 
this.direction.y = this.speed*Math.sin(this.angle)*-1; 
} 
    /*aditional methods for mobRoot*/ 

, и я хочу, чтобы создавать различные мобы из массив. На данный момент я назначаю число для каждого типа (например: 1-Baboo 2-Spider 3-Whatever) и сохраняя эти числа в массивах, а когда я их создаю, я использую переключатель для каждого mobIndex из массива вроде это

switch(wave[i]) 
{ 

    case 1: 
     mobs.push(new Baboo(arg1,arg2,...)); 
     break; 

    case 2: 
     mobs.push(new Spider(arg1,arg2,...)); 
     break; 

    /*...*/ 

    case 999: 
    mobs.push(new Whatever(arg1,arg2,...)); 
    break; 
} 

Есть ли более элегантный способ решения такого рода проблем?

+2

Каждый раз, когда вы создаете новый 'Baboo', вы заменяете' Baboo.prototype', так что вы потеряете все функции прототипа, которые вы присвоенные когда вы загрузили скрипт. – Barmar

+0

Итак, мне нужно «Baboo.prototype = Object.create (MobRoot.prototype);' вне конструктора? @Barmar –

+0

Да. Это нужно сделать только один раз, как и все другие настройки прототипа. – Barmar

ответ

0

Вы можете поместить все конструкторы в массив:

var constructors = [Baboo, Spider, Whatever, ...]; 
if (wave[i] < constructors.length) { 
    mobs.push(new constructors[wave[i]](arg1, arg2, arg3, ...)); 
} 
+0

Большое спасибо! –

Смежные вопросы