简体   繁体   English

使用html或javascript从sprite表中提取单个帧

[英]Extract individual frame from a sprite sheet using html or javascript

I have a sprite sheet consisting of 12 frames. 我有一个由12帧组成的Sprite工作表。

在此处输入图片说明

I want to extract each individual frame from it and want to show it in different canvas like below. 我想从中提取每个单独的框架,并希望将其显示在如下所示的不同画布中。 在此处输入图片说明

what i have tried so far is posted below 我到目前为止已经尝试过的东西发布在下面

//HTML code for define the canvas area . 

   <body onload="image_render();">

      <div id="image_area">  <canvas id="image"></canvas></div>
        <script src="sprite_demo.js"></script>
    </body> 


 // javascript to slice the image and assign to the canvas

var canvasImage = new Image();
canvasImage.src = "image/sprite_xxdpi.jpg";
var can= document.getElementById("image");
can.width = 500;
can.height = 300;


function image_render()
{

coin.render();
}

var coin = sprite({
    context: can.getContext("2d"),
    width: 500,
    height: 300,
    image: coinImage

});

function sprite (options) { 
    var that = {};              
    that.context = options.context;
    that.width = options.width;
    that.height = options.height;
    that.image = options.image; 

    that.render = function () {

        // Draw the animation
        that.context.drawImage(
           that.image,
           0,          //X-axis starting position from where slicing begins
           0,          //y-axis starting position from where slicing begins
           that.width, //width of slicing image
           that.height,//height of slicing image
           0,          //X-axis starting position where image will be drawn
           0,          //y-axis starting position where image will be drawn
           150,        // width of the resulting image
           150);      //height of the resulting image

    };


    return that;

}

I am only able to get a single image ,But I want to get all the images to show in a grid.And also i want to get the image to show any where I want. 我只能得到一个图像,但是我想使所有图像显示在网格中。我也想使图像显示在我想要的任何位置。 I also want to scale down big size images to show in a grid and while taping on it I want to show the original image. 我还想按比例缩小大尺寸图像以显示在网格中,同时点击它,我想显示原始图像。

Note: I don't want to animate my frames, I just want to show in grid. 注意:我不想设置帧动画,我只想显示在网格中。 There are mostly examples of sprite animation available on internet. Internet上主要有Sprite动画的示例。

You have the correct version of drawImage to clip individual sprites from the spritesheet, but you must alter the values in drawImage for each sprite. 您具有正确的drawImage版本,可以从spritesheet剪切单个sprite,但是必须为每个sprite更改drawImage中的值。

The "faces" example spritesheet you show appear to have equal sized individual sprites (75px by 75px). 您显示的“面孔”示例精灵表格似乎具有相等大小的单独精灵(75px x 75px)。

Assuming all your sprites are the same size, you would alter the 2nd & 3rd drawImage parameters which tell canvas the top-left x/y coordinate to begin clipping on the spritesheet. 假设所有精灵大小相同,则可以更改第二和第三drawImage参数,这些参数告诉画布左上角的x / y坐标开始在精灵板上进行裁剪。

Here's example code and a Demo: http://jsfiddle.net/m1erickson/tVD2K/ 这是示例代码和演示: http : //jsfiddle.net/m1erickson/tVD2K/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    var spriteWidth=75;
    var spriteHeight=75;
    var spriteCols=4;
    var spriteRows=3;
    var y=20-sprightHeight;

    var img=new Image();
    img.onload=start;
    img.src="https://dl.dropboxusercontent.com/u/139992952/multple/spritesheet1.jpg";
    function start(){
        var canvasY=0;
        for(var col=0;col<spriteCols;col++){
        for(var row=0;row<spriteRows;row++){
            var sourceX=col*spriteWidth;
            var sourceY=row*spriteHeight;
            // testing: calc a random position to draw this sprite
            // on the canvas
            var canvasX=Math.random()*150+20;
            canvasY+=spriteHeight+5;
            // drawImage with changing source and canvas x/y positions
            ctx.drawImage(img,
                sourceX,sourceY,spriteWidth,spriteHeight,
                canvasX,canvasY,spriteWidth,spriteHeight
            );
        }}
    }

}); // end $(function(){});
</script>
</head>
<body>
    <h4>Draw individual sprites from a spritesheet</h4>
    <canvas id="canvas" width=300 height=1000></canvas>
</body>
</html>

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM