2012-04-06 122 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