你可以访问数组中的javascript自定义类对象吗?

时间:2018-02-15 12:23:35

标签: javascript arrays class

我正在开发一个用普通javascript制作的RPG游戏项目只是为了好玩,但似乎无法理解javascript内置类是如何工作的,因为它们的行为与我在Java或C#中的习惯有很大不同。所以这就是问题所在:

如果我按照以下方式制作了自定义类:

Class Player_animation{

        constructor(animationX,animationY,animation_state,xPos,yPos,destX,destY){
                 this.animationX = animationX;
                 . 
                 . (the basic setup for all the attributes as the first one);
                 .

           set animationX(value){
               this._animationX = value;
           }
           //all the setters as that one


        update(){

            if(this._animationX===480 && this._animation_state==='idle')
               this._animationX=0;


            else if(this._animationX===720 && this._animation_state !== 'attack'){
               this._animationX=0;            
            }

            else if(this._animationX===840){
              this._animationX=0;
              this._animationY = 0;
              this._animation_state = 'idle';
           }

           if(this._xPos!== this._destX || this._yPos!== this._destY){

            if(this._xPos<this._destX){
                this._animation_state = 'facing_right';
                this._animationY = 240;
            }
            if(this._xPos>this._destX){
                this._animation_state = 'facing_left';
                this._animationY = 360;
            }           
          }
          else{
            if(this._animation_state === 'facing_right')
                this._animationY = 0;
            if(this._animation_state === 'facing_left')
                this._animationY = 120;
            if(this._animation_state!=='attack'){
                this._animation_state = 'idle';
            }
        }        


  }

}

我可以在我的程序中调用一个新制作的类对象没问题:

var player_animation = new Player_animation(0,0,'idle',0,0,0,0);

player_animation.update();

我可以以某种方式创建我使用该函数调用的这些自定义类的数组。我尝试过以下两种方法:

var array = [];
array.push[player_animation,player_animation2];
for(var unit in array){
   unit.update();
}

我试过的第二种方法不起作用:

var array = [];
array.push[player_animation,player_animation2];
for(var i = 0; i < array.Lenght; i++){
  array[i].update();
}

工作代码经历了这个循环(我知道我应该在这里限制fps):

function frame(){
    update();

    requestAnimationFrame(frame);
}

function update(){

    player_animation.update();
    enemy_animation.update();

}

requestAnimationFrame(frame);

在普通的javascript中甚至可以这样吗? 我的游戏循环和更新工作正常,所有定义的对象分别调用,但在游戏中有10个以上的对象之后会很麻烦。 在Java中,我能够将所有game_object存储在一个数组中,其中的函数将通过for循环调用,因此很难理解为什么它在javascript中不起作用。

1 个答案:

答案 0 :(得分:0)

你遇到很多问题,其中没有一个与JavaScript中的类如何相关。

array.push[player_animation,player_animation2];

push功能。您可以使用()而不是[]来调用它。

for(var unit in array){

in遍历对象中的属性名称。避免将它用于数组。如果您确实使用它,那么您需要array[unit]来获取值,而不仅仅是unit

for(var i = 0; i < array.Lenght; i++){
  • JavaScript区分大小写
  • JavaScript要求正确拼写属性名称

length而非Lenght