2013-02-16 39 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