2016-12-29 409 views
0

我在PIXI.js上编写游戏。底线是一切按预期运作。但是在控制台的某个位置会弹出一个警告“WebGL:INVALID_ENUM:activeTexture:纹理单元超出范围”,并且游戏中的纹理有点闪光。Pixi.js游戏中的警告“WebGL:INVALID_ENUM:activeTexture:纹理单元超出范围”

此错误出现在一个奇怪的时间,并在同一时间失去

有用于创建移动的怪物怪物和他的方法的类:

function Monster (monsterImages, startX) { 
    this.hideEnemy = false; 
    var frames = []; 

    for (var i = 0; i < monsterImages.length; i++) { 
     var texture = Texture.fromImage(monsterImages[i]); 
     frames.push(texture); 
    } 

    this.movieclip = new PIXI.extras.AnimatedSprite(frames); 

    this.movieclip.scale.x = -1; 
    this.movieclip.anchor.set(0.5); 
    this.movieclip.width = 170; 
    this.movieclip.height = 140; 
    this.movieclip.x = startX; 
    this.movieclip.y = getRandomIntValue(Position.START_Y + this.movieclip.height/2, Position.END_Y + this.movieclip.height/2); 
    this.movieclip.animationSpeed = 0.4; 

    this.movieclip.play(); 
    gameScene.addChild(this.movieclip); 
} 

Monster.prototype.updatePosition = function() { 
    if (this.movieclip.x > Position.END_X - this.movieclip.width/2) { 
     this.movieclip.x -= Position.STEP_X; 
    } else { 
     // this.hideEnemy = true; 

     this.movieclip.x = Position.START_X; 
     this.movieclip.y = getRandomIntValue(Position.START_Y + this.movieclip.height/2, Position.END_Y + this.movieclip.height/2); 
    } 
}; 

创建4怪物:

for (var i = 0; i < 4; i++) { 
    enemy[i] = new Monster(monsterSprites[i], 1920 + 170 + gapBetweenBirds); 
    gapBetweenBirds+=500; 
} 

然后我MOV通过法“updatePosition” E他们,如果是出现场,然后我砍这个怪物的阵列出来,并插入新:

for (var i = 0; i < enemy.length; i++) { 
     enemy[i].updatePosition(); 
     if (enemy[i].hideEnemy) { 
      enemy.splice(i, 1, new Monster(monsterSprites[getRandomIntValue(0,monsterSprites.length - 1)], 1920 + 170)); 
     } 
    } 

的问题来了,当我开始替换阵列中的怪物。我认为问题在那里,但由于一点经验,我无法赶上她。

回答

0

我决定问题。我需要销毁从数组中删除的对象,因为它用于渲染。

我添加

this.movieclip.destroy(); 
this.movieclip = null; 

在Monster.prototype.updatePosition

所以我

Monster.prototype.updatePosition = function() { 
    if (this.movieclip.x > Position.END_X - this.movieclip.width/2) { 
     this.movieclip.x -= Position.STEP_X; 
    } else { 
     this.hideEnemy = true; 
     this.movieclip.destroy(); 
     this.movieclip = null; 
    } 
};