gpt4 book ai didi

javascript - 如何使用 Canvas 绘制图像 Sprite ?

转载 作者:行者123 更新时间:2023-11-30 18:09:49 27 4
gpt4 key购买 nike

我想使用 Canvas 绘制图像 Sprite 。

代码无效。如何改进我的代码。

我有一些错误。

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

var Game = {

draw_image: function(img, sourceX, sourceY, sourceW, sourceH, destX, destY, destW, destH){

var img = new Image(); // Create new img element
img.src = 'images/background.png'; // Set source path
img.onload = function(){
canvas.width = 1000;
canvas.height = 500;
ctx.drawImage(img, sourceX, sourceY, sourceW, sourceH, destX, destY, destW, destH);
};
}

var BACKGROUND = {
image_top: { x: 5, y: 5, w: 1280, h: 480 , dx:0 ,dy:0 ,dw:500 ,dh:500 },
image_body: { x: 5, y: 495, w: 1280, h: 480 , dx:0 ,dy:150 ,dw:500 ,dh:350},
image_bottom: { x: 5, y: 985, w: 1280, h: 480 , dx:0 ,dy:300 ,dw:500 ,dh:200 }
};

for(var n = 0 ; n < BACKGROUND.length ; n++) {
draw_image(nameImage, BACKGROUND[n].x,BACKGROUND[n].y, BACKGROUND[n].w, BACKGROUND[n].h, BACKGROUND[n].dx, BACKGROUND[n].dy, BACKGROUND[n].dw, BACKGROUND[n].dh );
}
};

最佳答案

要创建 Sprite 动画,了解它的工作原理很重要。

您需要以像素精度制作 spritesheet(1 个像素可能会弄乱您的动画)。

here , Angular 色总是在相同大小的区域,当你制作你的 Sprite 时让它变得简单。

有了这个,你可以为你拥有的每个 Sprite 制作一个对象:

function Sprite(_position, _numberFrame, _framesize, _image, _duration){
this.position = _position; //Array like { x : 0, y : 0 }
this.rendersize = _rendersize; //Array like { width : 50, height : 80 }
this.framesize = _framesize; //Array like { width : 50, height : 80 }
this.image = _image; //Image object
this.chrono = new Chrono(_duration); //Explanation below
}

为了获得更高的动画精度,您可以添加一个 chrono 来管理动画的时间:

function Chrono(_duration){
this.currentTime = 0;
this.lastTime = 0;
this.timeElapse = 0;
this.duration = _duration;
}

Chrono.prototype.countTime = function(){
this.currentTime = Date.now();

if(this.lastTime != 0)
this.timeElapse += this.currentTime - this.lastTime;

this.lastTime = Date.now();

if(this.timeElpase >= this.duration && this.lastTime != 0){
this.timeElapse = 0;
return TRUE;
} else {
return FALSE;
}
}

然后动画你的 Sprite 的功能可能像:

Sprite.prototype.render = function(){
if(this.position.x <= this.image.width && this.chrono.countTime()){
this.position.x += this.framesize.x;
} else {
this.position.x = 0;
}
ctx.drawImage(this.image,
this.position.x, this.position.y,
this.framesize.width, this.framesize.height,
this.rendersize.width, this.rendersize.height
);
}

我希望我说得清楚并有所帮助,

干杯

PS:有问题评论或优化思路

关于javascript - 如何使用 Canvas 绘制图像 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com