如何使用普通 javascript 的纹理打包器?
How to use texture packer with plain javascript?
我正在制作一个 canvas 游戏,我想使用一个带有 json 文件的 spritesheet。我已经在 pixi.js 应用程序中看到过它,但是我想在普通的 js 应用程序中起诉它。有什么想法吗?
如果您正在谈论创建 spritesheet,那么就不必费心重新发明那个轮子了……网上有许多 sprite 包装器。这是 Google 上的第一个:https://www.codeandweb.com/texturepacker
如果您正在谈论从 spritesheet 读取 sprite,那么您可以:
使用var mySpritesheet=new Image(); ...
创建内存中图像对象
使用context.drawImage
的裁剪版本从mySpritesheet中裁剪出想要的精灵,并根据需要在游戏canvas上绘制。
例如:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var sCols=5;
var sRows=2;
var sWidth=206/sCols;
var sHeight=111/sRows;
var spritesheet=document.createElement('canvas');
var sctx=spritesheet.getContext('2d');
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/avatars1.jpg";
function start(){
spritesheet.width=img.width;
spritesheet.height=img.height;
sctx.drawImage(img,0,0);
for(var y=0;y<sRows;y++){
for(var x=0;x<sCols;x++){
ctx.drawImage(spritesheet,
x*sWidth,y*sHeight,sWidth,sHeight,
Math.random()*cw,Math.random()*ch,sWidth,sHeight
);
}}
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=400 height=400></canvas>
但为了让它更简单...
您并不像我的示例那样真正需要内存中的 canvas。我使用 canvas 以防万一您需要为精灵重新着色或注释精灵。
将 spritesheet 加载到图像对象中,然后使用 drawImage
的裁剪形式从 spritesheet 图像中裁剪每个 sprite 并将其绘制到您的游戏中要简单得多 canvas。
这是另一个使用简单的 spritesheet 图像而不是内存中图像的示例 canvas:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var sCols=5;
var sRows=2;
var sWidth=206/sCols;
var sHeight=111/sRows;
var spritesheet=document.createElement('canvas');
var sctx=spritesheet.getContext('2d');
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/avatars1.jpg";
function start(){
for(var y=0;y<sRows;y++){
for(var x=0;x<sCols;x++){
ctx.drawImage(img,
x*sWidth,y*sHeight,sWidth,sHeight,
Math.random()*cw,Math.random()*ch,sWidth,sHeight
);
}}
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=500 height=500></canvas>
我正在制作一个 canvas 游戏,我想使用一个带有 json 文件的 spritesheet。我已经在 pixi.js 应用程序中看到过它,但是我想在普通的 js 应用程序中起诉它。有什么想法吗?
如果您正在谈论创建 spritesheet,那么就不必费心重新发明那个轮子了……网上有许多 sprite 包装器。这是 Google 上的第一个:https://www.codeandweb.com/texturepacker
如果您正在谈论从 spritesheet 读取 sprite,那么您可以:
使用
var mySpritesheet=new Image(); ...
创建内存中图像对象
使用
context.drawImage
的裁剪版本从mySpritesheet中裁剪出想要的精灵,并根据需要在游戏canvas上绘制。
例如:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var sCols=5;
var sRows=2;
var sWidth=206/sCols;
var sHeight=111/sRows;
var spritesheet=document.createElement('canvas');
var sctx=spritesheet.getContext('2d');
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/avatars1.jpg";
function start(){
spritesheet.width=img.width;
spritesheet.height=img.height;
sctx.drawImage(img,0,0);
for(var y=0;y<sRows;y++){
for(var x=0;x<sCols;x++){
ctx.drawImage(spritesheet,
x*sWidth,y*sHeight,sWidth,sHeight,
Math.random()*cw,Math.random()*ch,sWidth,sHeight
);
}}
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=400 height=400></canvas>
但为了让它更简单...
您并不像我的示例那样真正需要内存中的 canvas。我使用 canvas 以防万一您需要为精灵重新着色或注释精灵。
将 spritesheet 加载到图像对象中,然后使用 drawImage
的裁剪形式从 spritesheet 图像中裁剪每个 sprite 并将其绘制到您的游戏中要简单得多 canvas。
这是另一个使用简单的 spritesheet 图像而不是内存中图像的示例 canvas:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var sCols=5;
var sRows=2;
var sWidth=206/sCols;
var sHeight=111/sRows;
var spritesheet=document.createElement('canvas');
var sctx=spritesheet.getContext('2d');
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/avatars1.jpg";
function start(){
for(var y=0;y<sRows;y++){
for(var x=0;x<sCols;x++){
ctx.drawImage(img,
x*sWidth,y*sHeight,sWidth,sHeight,
Math.random()*cw,Math.random()*ch,sWidth,sHeight
);
}}
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=500 height=500></canvas>