Javascript this.image.width/数字产生0

Javascript this.image.width/数字产生0,javascript,Javascript,我试图用图像宽度来计算精灵的宽度,但数字总是为0,为什么 function SpriteSheet(image, numFramesX, numFramesY, totalFrames) { this.image = image; this.numFramesX = numFramesX; this.numFramesY = numFramesY; this.totalFrames = totalFrames; this.spriteWidth = th

我试图用图像宽度来计算精灵的宽度,但数字总是为0,为什么

function SpriteSheet(image, numFramesX, numFramesY, totalFrames) {
    this.image = image;
    this.numFramesX = numFramesX;
    this.numFramesY = numFramesY;
    this.totalFrames = totalFrames;

    this.spriteWidth = this.image.width / this.numFramesX;
    this.spriteHeight = this.image.height / this.numFramesY;
}

image.onload = function() {
console.log('Image has been loaded');
}
image.src = 'dance.png';
spritesheet = new SpriteSheet(image, 8, 10, 80);
spritesheet.spriteWidth和spritesheet.spriteHeight始终生成0。我把问题转向了“this.image.width”,因为如果我手动输入图像的宽度,它就会工作

this.spriteWidth = 880 / this.numFramesX;
而不是

this.spriteWidth = this.image.width / this.numFramesX;
如果我使用控制台中的对象计算它,它也可以工作:

spritesheet.image.width / spritesheet.numFramesX
产量110

那怎么样

window.onload = function () {
    console.log('Image has been loaded');
    image.src = 'dance.png';
    spritesheet = new SpriteSheet(image, 8, 10, 80);
}

alert(this.image.width)和alert(this.numFramesX)向您展示了什么?我在控制台中编写了它,分别得到了880和'undefined'。控制台如何知道我引用的是spritesheet对象(使用“this”)?这不可能是正确的,因为如果我只是用数字“880”替换“this.image.width”,代码就会工作。保留this.numFramesX,因为this.numFramesX应在将该值传递到控制台之前解析为一个值。你能确保你粘贴的是你的实际代码,而不是重新键入一些代码吗?我在JSFIDLE spritesheet上发布了它。对象是未定义的。永远不会调用console.log。我还试过做image.onload=(你的代码)啊,它成功了,我是个白痴。我在每个循环中重新分配图像。谢谢!