2013-02-16 53 views
0

我想要使用图像宽度来计算一个精灵的宽度,但是这个数字总是为0,为什么?this.image.width/number yield 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

jsfiddle

+0

alert(this.image.width)和alert(this.numFramesX)告诉你什么? – SecurityMatt 2013-02-16 03:09:54

+0

我在控制台中写了它,分别获得了880和'undefined'。控制台如何知道我指的是Spritesheet对象(使用'this')? – 2013-02-16 03:11:24

+0

这是不对的,因为如果我只用'880'替换'this.image.width',代码就可以工作。留下this.numFramesX – 2013-02-16 03:18:50

回答

2

如何一回合呢?

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

spritesheet对象是未定义的。 console.log永远不会被调用。我也试过做image.onload =(你的代码) – 2013-02-16 03:36:03

+0

啊,它工作,我是一个白痴。每个循环都重新分配图像。非常感谢! – 2013-02-16 03:38:34