我遇到一个问题,即位图似乎在创建并添加到舞台后加载。您可以看到所有这些代码都在运行right here。您可以在控制台日志中查看我正在获取的日志语句(也在下面显示)。
我在这里创建了一个函数中的位图(我知道这段代码工作正常 - 你不必读这个,但请注意game.update最后是如何设置为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;
}
我的问题在于tick函数,每秒调用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。
答案 0 :(得分:1)
我在这里回答了这个问题 http://community.createjs.com/discussions/easeljs/5440-bitmaps-not-showing-immediately-after-being-loaded
简短的回答是图像已创建,但未实际加载。可以将它们添加到DOM中以与document.load一起考虑(我认为这是海报的解决方案),但更好的方法是在文档加载后使用PreloadJS(http://createjs.com/preloadjs)之类的东西正确预加载它们。