使用createjs,preoloading和caching,为什么我的画布仍然那么慢?

时间:2014-08-01 08:40:50

标签: html5 canvas bitmap createjs

我正在尝试为课程创建一个小型RPG。我创建一个Bitmap图像,缓存它,然后每次我需要相同的Bitmap,我克隆它,最后将它们添加到舞台上。然而,尽管我的努力,我的画布仍然非常慢,因为我画了所有这些灌木丛。

我会将它们放在一个容器中,但是,我需要知道X和Y的位置,我知道如果玩家试图越过它们的边界。

这是我的功能:

  parseRoom: function(mapObject, room, obj, image){
            var letter = 'X';
            //var object = obj;
            var object = null;
            var img = new createjs.Bitmap(image);
            for(var m=0; m < mapObject.length; m++){
                for(var j=0; j< mapObject[m].length; j++){

                    letter = mapObject[j][m];

                    switch (letter){
                        case 'X': 
                        //do nothing
                        break;
                        case 'O':    
                        //object = this.createObject();
                        //object.image = img.clone();
                        img.cache();
                        object = img.clone();

                        room.AddObstacle(object, m, j);
                        break;
                    }
                }
            }

        }

当我实际将它们添加到舞台时,这是我的功能:

   addObstacle: function(imgObj, x, y){
                imgObj.x = x ||imgObj.x || 0;
                imgObj.y = y ||imgObj.y || 0;
                imgObj.setVisible = function(visible){
                  this.visible = visible;  
                };
                imgObj.update = function(){
                  if(this.visible)this.visible= true;
                    else this.visible = false;
                };
                objects.push(imgObj);
                stage.addChild(imgObj);
            },

如您所见,我扩展了Bitmap类,并为其添加和更新了setVisible方法。这样我可以根据屏幕将它们全部关闭或打开。任何可以帮助我并使我的游戏更流畅的想法?谢谢!

My canvas map

1 个答案:

答案 0 :(得分:0)

我不断更新每个对象,包括灌木丛,并且不需要每次更新灌木丛。我只是从检查灌木丛中删除了逻辑,现在它运行得非常快。