javascript - 在 Canvas 上随机绘制图像 x 和 y

标签 javascript html canvas

伙计们,我想在 Canvas 上绘制 4 个图像,但每个图像都是随机的 x 和 y ..这是我的代码

var imgs = [];
var fruits = ["fruit1.png", "fruit2.png", "fruit3.png", "fruit4.png"];

var monsterReady1 = false;
for (var i = 0; i < fruits.length; i++) {
    imgs[i] = new Image();
    imgs[i].onload = function() {
        monsterReady1 = true;
    };
    imgs[i].src = fruits[i];
}

var monsterXY1 = function() {
    monster1.x = (Math.random() * (canvas.width - 100));
    monster1.y = (Math.random() * (canvas.height - 100));
};

var draw = function() {
    if (monsterReady1) {
        for (var i = 0; i < fruits.length; i++) {
            ctx.drawImage(imgs[i], monster1.x, monster1.y);
        }
    }
}

var main = function() {
    draw();
    requestAnimationFrame(main);
};
monsterXY1();

但是这段代码为我提供了相同 x 和 y 的所有图像,那么我如何随机生成每个图像的 x 和 y ??

最佳答案

在尝试绘制图像之前,使用图像预加载器确保所有图像均已加载:

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;

var imageURLs=[];  
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house32x32transparent.png");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house32x32transparent.png");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house32x32transparent.png");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house32x32transparent.png");

// the loaded images will be placed in imgs[]
var imgs=[];

var imagesOK=0;
loadAllImages(start);

function loadAllImages(callback){
  for (var i=0; i<imageURLs.length; i++) {
    var img = new Image();
    imgs.push(img);
    img.onload = function(){ 
      imagesOK++; 
      if (imagesOK>=imageURLs.length ) {
        callback();
      }
    };
    img.onerror=function(){alert("image load failed");} 
    img.crossOrigin="anonymous";
    img.src = imageURLs[i];
  }      
}

function start(){

  // the imgs[] array now holds fully loaded images
  // the imgs[] are in the same order as imageURLs[]
  for(var i=0;i<imgs.length;i++){
    var randomX=Math.min(cw-imgs[i].width,Math.random()*cw);
    var randomY=Math.min(ch-imgs[i].height,Math.random()*ch);
    ctx.drawImage(imgs[i],randomX,randomY);
  }

}
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=300 height=300></canvas>

关于javascript - 在 Canvas 上随机绘制图像 x 和 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429150/

相关文章:

javascript - react-router:嵌套路由应该渲染 IndexRoute 组件的子组件还是应该渲染智能父(IndexRoute)组件?

javascript - 隐藏元素时是否禁用 CSS3 转换?

javascript - 回发后如何显示成功和错误消息?

iphone - iPhone 中的 Web SQL 存储

javascript - 我可以更改 :config in mozilla via javascript? 吗

android - 如何将android Canvas 保存为svg?

javascript - 提交文件而不刷新页面

php - 空白页 Laravel : 50k+ table entries

css - 在 Web 应用程序(基于 Java)的用户列表中处理编辑用户的常用方法是什么?

android - 转换后的 SVG 未显示在 android Canvas 中