2012-04-06 168 views
0

所以,我創建了幾個相似圖片:如何調整Javascript圖像大小?

images = []; 

images[0] = new Image(); 
images[0].src = "bla.jpg"; 

images[1] = new Image(); 
images[1].src = "bla1.jpg"; 

images[2] = new Image(); 
images[2].src = "bla2.jpg"; 

這不是實際的加載算法,但產品是一樣的:我留下了所謂的「圖像」的陣列的,當然,包含一些圖像。

我在做一個遊戲,我需要調整畫布大小,以適應玩家的屏幕大小。我知道如何做到這一點,但現在,我需要調整所有圖像的大小。我不知道該怎麼做。

我最初的做法是這樣的:

for (var i = 0; i < images.length; i ++) 
{ 
    images[i].width *= ratio; // newWidth/defaultWidth 
    images[i].height *= ratio; 
} 

我沒有注意到這個變化,雖然如此,我這樣做,只是要確定:

for (var i = 0; i < images.length; i ++) 
{ 
    images[i].width = 3; //I'd probably notice if every image in the game was shrunk to this size 
    images[i].height = 3; 
} 

這甚至陌生人。這些圖像仍然保持不變,然而,遊戲減慢了很多。 FPS下降到0.5或類似的東西。

現在,我該如何去調整圖像大小?

編輯:我不這樣做,當然,要調整實時圖像是這樣的:

context.drawImage(image, x, y, image.w*r, image.h*r); 

因爲在我的經驗,這大大降低了性能。

+0

如果您使用瀏覽器動態縮放圖像,就像您正在嘗試執行的操作那樣,渲染性能將大大降低,因爲瀏覽器必須在繪製時縮放圖像。某些瀏覽器在緩存預縮放位時可能比其他瀏覽器更好,但有些瀏覽器並不擅長,並且在縮放這樣的圖像時性能肯定會下降。 – jfriend00 2012-04-06 16:23:04

回答

2

而不是設置寬度& height屬性,設置的CSS屬性,而不是:

var i, image; 
for (i = 0; i < images.length; i++) 
{ 
    image = $(images[i]); 
    image.css('width', image.width() * ratio); 
    image.css('height', image.height() * ratio); 
} 
+1

請注意,您也可以使用普通JavaScript(如果未使用jQuery)將其作爲'images [i] .style.width = images [i] .style.width * ratio'。 – maerics 2012-04-06 16:31:52

+0

好點,最近我一直在做這麼多的jQuery開發,我只是拖欠它:) – 2012-04-06 16:33:13

+0

不工作...圖像顯示相同。 – corazza 2012-04-06 20:32:07

1

當你在JavaScript設置的尺寸,它們應該被指定爲字符串。數字不起作用。如果您需要進行計算,則將結果轉換爲字符串。

images[i].width = (images[i].width*ratio).toString(); // newWidth/defaultWidth 
images[i].height = (images[i].height*ratio).toString(); 
+0

就像上面的答案一樣,這個不起作用! – corazza 2012-04-06 20:32:24

+0

適用於我(至少在Firefox中)。我在寫答案之前先測試一下。 – 2012-04-06 20:35:08

+0

你能告訴我一個例子嗎? – corazza 2012-04-06 21:05:46