[英]How can I scale/stretch/skew a sprite from a sprite sheet with javascript?
一些背景:我正在做一個raycaster,好吧......正在制作。 但我決定改變一下。 我開始創建光線施法者,並決定只顯示一個圖標並拉伸/傾斜它而不是僅僅移動一堆像素就容易多了。
我的問題是:如何使用javascript從精靈表中縮放/拉伸/傾斜精靈?
我基本上想要從精靈圖像中獲取16像素×16像素的圖像,並將其定位,縮放,轉動,並使用javascript進行傾斜。 我應該怎么做呢?
如果這有幫助,我正在考慮連接該圖像的三個版本,以給它一個3D塊在3D空間中移動而不實際使用3D的印象。
最可能最簡單的方法是使用background-size
css屬性。 由於大多數現代瀏覽器(IE 9 +,FF4 +,Safari4 +,Chrome3 +)都支持它,您可以執行以下操作:
HTML:
<div id="mySprite">
</div>
CSS:
#mySprite{
height: 80px; /* 64px * 1.25 */
width: 80px; /* 64px * 1.25 */
background-image:url(my.png);
background-position: -0px -560px; /* pick specific one at -448px * 1.25 */
background-size:640px 640px; /* scale image to 512px * 1.25 */
}
spritesheet上有精靈64x64px的精靈,並將它們縮放到80x80px。 在這里查看實例: http : //jsfiddle.net/Zgr5w/1/
正如@Prusse所說:你也可以使用transform: scale()
但它有一些缺點:瀏覽器支持,額外的位置轉換,與其他元素的對齊可能會被打破:
#mySprite{
height: 64px;
width: 64px;
background-image:url(my.png);
background-position: -0px -448px;
transform:scale(1.25);
/* additional to compensate the position shift */
position:relative;
top:10px;
left:10px;
}
在這里看到上述兩種方法的實例: http : //jsfiddle.net/Zgr5w/1/
您可以通過在畫布上使用drawImage
函數來完成此操作。 以下示例將40x100精靈縮放為80x200的兩倍。
<html>
<body>
<canvas id="canvas" width=80 height=200>
<script language="JavaScript">
function draw() {
var ctx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.src = 'http://gamemedia.wcgame.ru/data/2011-07-17/game-sprite-sheet.jpg';
img.onload = function() {
// (image, sx, sy, sw, sh, dx, dy, dw, dh)
ctx.drawImage(img,0,0,40,100,0,0,80,200);
}
}
draw();
</script>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.