我有用YAIL加载的图像,它运行得很好,但我需要"pill"图像是可拖动的,我需要pill图像是可引用的。我曾尝试通过将pill声明为done()函数范围之外的变量来实现这一点,但这不起作用。到目前为止:
var currentdate = new Date();
var datetime = currentdate.getHours();
var loader = new YAIL(done, progress, errors);
var pill = new Image();
if(datetime==1||datetime==13){
loader.add("clock/clock1.png");
loader.add("clock/pill.png");
}
else if(datetime==2||datetime==14){
loader.add("clock/clock2.png");
loader.add("clock/pill.png");
}
else if(datetime==3||datetime==15){
loader.add("clock/clock3.png");
loader.add("clock/pill.png");
}
else if(datetime==4||datetime==16){
loader.add("clock/clock4.png");
loader.add("clock/pill.png");
}
else if(datetime==5||datetime==17){
loader.add("clock/clock5.png");
loader.add("clock/pill.png");
}
else if(datetime==6||datetime==18){
loader.add("clock/clock6.png");
loader.add("clock/pill.png");
}
else if(datetime==7||datetime==19){
loader.add("clock/clock7.png");
loader.add("clock/pill.png");
}
else if(datetime==8||datetime==20){
loader.add("clock/clock8.png");
loader.add("clock/pill.png");
}
else if(datetime==9||datetime==21){
loader.add("clock/clock9.png");
loader.add("clock/pill.png");
}
else if(datetime==10||datetime==22){
loader.add("clock/clock10.png");
loader.add("clock/pill.png");
}
else if(datetime==11||datetime==23){
loader.add("clock/clock11.png");
loader.add("clock/pill.png");
}
else if(datetime==0||datetime==12){
loader.add("clock/clock12.png");
loader.add("clock/pill.png");
}
loader.load();
function done(e) {
var imageLst = e.images;
canvas.ctx.drawImage(imageLst[0], 400, 180);
canvas.ctx.drawImage(imageLst[1], 580, 350, 30,30);
redpill=imageLst[1];
}
这不是YAIL的问题,而是您在哪里声明变量的问题。
如果你想在其他函数中访问变量,你需要将变量放在函数范围之外(就像任何函数一样):
var imageLst; /// declare here
function done(e) {
imageLst = e.images; /// set here, images are now available outside done()
canvas.ctx.drawImage(imageLst[0], 400, 180);
canvas.ctx.drawImage(imageLst[1], 580, 350, 30,30);
redpill=imageLst[1];
}
注意:imageLst
现在将可用于子函数。如果您需要从任何函数访问,则需要确保imageLst
是在全局范围内声明的。
注2:即使变量在函数范围之外可用,在完成之前也不会进行实际设置。因此,与任何异步操作一样,您需要从done处理程序中调用解决方案中的下一步:
function done(e) {
/// now the variable is set
imageLst = e.images;
/// go to next step in solution
myNextStep();
}