2013-12-18 1 views
1

У меня проблема, когда растровые изображения, похоже, загружаются после их создания и добавления на сцену. Вы можете увидеть весь этот код, работающий right here. Вы можете посмотреть журнал консоли для операторов журнала, которые я получаю (также показано ниже).Растровые изображения EaselJS, не показывающие

Я создаю растровые изображения в функции здесь (я знаю, что этот код работает исправно - вам не обязательно это читать, но обратите внимание, что в конце игры значение true.).

for (i = -r; i <= r; i++){ 
     var min = Math.max(-r, -r - i); 
     var max = Math.min(r, r - i); 

     for (j = min; j <= max; j++){ 
      k = -1 * (i + j); 
      //var a = length)Math.floor(Math.random() * t_imgs.; 
      //var a = mountain; 
      var a; 
      if(game.grid[i][j].height == null){ 
       a = mountain; 
      } else if (game.grid[i][j].height > .5){ 
       a = plain; 
      } else{ 
       a = water; 
      } 
      var b = Math.floor(Math.random() * (game.t_imgs[a].length)); 
      if(game.t_imgs[a][b] == null){ 
       console.log("NULL:", a, b); 
      } 
      bitmap = new createjs.Bitmap(game.t_imgs[a][b]); 
      container.addChild(bitmap); 
      bitmap.regX = game.hexwidth/2; 
      bitmap.regY = game.hexheight/2; 
      bitmap.x = game.xcenter + game.hexwidth * .75 * i; 
      bitmap.y = game.ycenter + game.hexheight * .5 * (j - k); 
      game.grid[i][j].termap = bitmap; 
     } 
    } 



    document.getElementById("loader").className = ""; 
    createjs.Ticker.addEventListener("tick", tick); 

    console.log("finished loading images and creating bitmaps. Game update set to true"); 
    game.update = true; 
} 

Моя проблема заключается в функции галочки, которая называется 60 раз в секунду. Я хочу, чтобы карта обновлялась, если что-то изменилось (когда game.update == true).

function tick(event) { 
      if(game.update == true){ 
       game.update = false; 
       var i,j,k; 
       var r = game.radius; 
       for (i = -r; i <= r; i++){ 
        var min = Math.max(-r, -r - i); 
        var max = Math.min(r, r - i); 
        for (j = min; j <= max; j++){ 
         k = -1 * (i + j); 
         if(game.grid[i][j].termap != null){ 
          game.grid[i][j].termap.x = game.xcenter + game.hexwidth * .75 * i; 
          game.grid[i][j].termap.y = game.ycenter + game.hexheight * .5 * (j - k); 
         } else { 
          console.log("A bitmap is null."); 
          game.update = true; //still needs to be updated 
         } 
        } 
       } 
      game.stage.update(event); 
      console.log("UPDATED!"); 
      } 
     } 

game.update установлен только в true после создания всех растровых изображений. Как вы можете видеть, загружается ли сайт, (here - это ссылка снова), журнал консоли показывает все растровые изображения, которые должны быть созданы до обновления сцены. Это также отображается в консольных отчетах печати. Если вы щелкнете по центру экрана и перетащите указатель мыши, вы можете принудительно выполнить обновление, перемещая карту, которая меняет значение game.update на true и правильно заставляет сцену обновляться. Я не могу понять, почему растровые изображения не отображаются сразу, так как game.update явно вызывается только после их создания и добавления на сцену. Растровые изображения имеют видимое свойство, но значение по умолчанию равно true.

console screenshot

ответ

1

Я ответил на это здесь http://community.createjs.com/discussions/easeljs/5440-bitmaps-not-showing-immediately-after-being-loaded

Короткий ответ, что образы созданы, но на самом деле не загружен. Они могут быть добавлены в DOM для рассмотрения с document.load (который, я считаю, был решением для плаката), но лучший подход - правильно загрузить их после загрузки документа, используя что-то вроде PreloadJS (http://createjs.com/preloadjs).