所以我正在编写为什么在画布上画出图像的blury 当我按下D键盘时,其他一切正常。我不知道绘制此图像的方式是否有,以及上下文或翻译方法。谢谢你的帮助
var Imagen= { // image to load, and manipulate
obj: null,
ruta: null,
cargar: function() {
this.obj= new Image();
//this.obj.src= '/C:/Documents and Settings/casa/Mis documentos/Mis imágenes/sprite.png';
this.obj.src= 'https://s22.postimg.org/6r8uzrygh/sprite.png';
},
ini: [2, 1],
fin: [22, 38],
pos: [0, 1],
auxy: [0, 1],
vel: {
des: 0.4,
som: 0.1
}
};
var Lienzo= { // this is the canvas
obj: document.getElementById('lienzo'),
ancho: 600,
alto: 300
};
var Sombra= { // this is for the sprites
fg1: function() {
Imagen.ini[0]= 2 +48*0; // recortes de la imagen
Imagen.ini[1]= 1; // recortes de la imagen
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg2: function() {
Imagen.ini[0]= 2 +48*1;
Imagen.ini[1]= 0;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1] -1;
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg3: function() {
Imagen.ini[0]= 2 +48*2;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg4: function() {
Imagen.ini[0]= 2 +48*3;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg5: function() {
Imagen.ini[0]= 2 +48*4;
Imagen.ini[1]= 0;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1] -1;
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg6: function() {
Imagen.ini[0]= 2 +48*5;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg7: function() {
Imagen.ini[0]= 2 +48*6;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg8: function() {
Imagen.ini[0]= 2 +48*7;
Imagen.ini[1]= 0;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1] -1;
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg9: function() {
Imagen.ini[0]= 2 +48*8;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg10: function() {
Imagen.ini[0]= 2 +48*6;
Imagen.ini[1]= 1;
Imagen.pos[0]= -Imagen.auxy[0] -22;
Imagen.pos[1]= Imagen.auxy[1];
c.save();
c.translate(0, 0);
c.scale(-1 ,1);
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
c.restore();
},
fg11: function() {
Imagen.ini[0]= 2 +48*7;
Imagen.ini[1]= 0;
Imagen.pos[0]= -Imagen.auxy[0] -22;
Imagen.pos[1]= Imagen.auxy[1] -1;
c.save();
c.translate(0, 0);
c.scale(-1 ,1);
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
c.restore();
},
fg12: function() {
Imagen.ini[0]= 2 +48*8;
Imagen.ini[1]= 1;
Imagen.pos[0]= -Imagen.auxy[0] -22;
Imagen.pos[1]= Imagen.auxy[1];
c.save();
c.translate(0, 0);
c.scale(-1 ,1);
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
c.restore();
}
};
var Animar= { // a=65, d=68, w=87, s=83 // izq=37, arr=38, der=39, abj=40 this is for calling the sprites
S: 0,
W: 0,
A: 0,
D: 0,
tecla: 0, dir: 83,
abajo: function() {
if (this.S <= 1) Sombra.fg1();
else if (this.S <= 2) Sombra.fg2();
else if (this.S <= 3) Sombra.fg3();
else if (this.S <= 4) Sombra.fg2();
this.S+= Imagen.vel.som;
if (this.S > 4) this.S= 0;
},
arriba: function() {
if (this.W <= 1) Sombra.fg4();
else if (this.W <= 2) Sombra.fg5();
else if (this.W <= 3) Sombra.fg6();
else if (this.W <= 4) Sombra.fg5();
this.W+= Imagen.vel.som;
if (this.W > 4) this.W= 0;
},
izquierda: function() {
if (this.A <= 1) Sombra.fg7();
else if (this.A <= 2) Sombra.fg8();
else if (this.A <= 3) Sombra.fg9();
else if (this.A <= 4) Sombra.fg8();
this.A+= Imagen.vel.som;
if (this.A > 4) this.A= 0;
},
derecha: function() {
if (this.D <= 1) Sombra.fg10();
else if (this.D <= 2) Sombra.fg11();
else if (this.D <= 3) Sombra.fg12();
else if (this.D <= 4) Sombra.fg11();
this.D+= Imagen.vel.som;
if (this.D > 4) this.D= 0;
}
};
var foo= function() {
c.clearRect(0, 0, 600, 300);
if(Animar.dir == 83) Sombra.fg2();
if(Animar.dir == 87) Sombra.fg5();
if(Animar.dir == 65) Sombra.fg8();
if(Animar.dir == 68) Sombra.fg11();
if(Animar.tecla == 83) {Animar.abajo(); Imagen.auxy[1]+= Imagen.vel.des;}
if(Animar.tecla == 87) {Animar.arriba(); Imagen.auxy[1]+= -Imagen.vel.des}
if(Animar.tecla == 65) {Animar.izquierda(); Imagen.auxy[0]+= -Imagen.vel.des *1.5;}
if(Animar.tecla == 68) {Animar.derecha(); Imagen.auxy[0]+= Imagen.vel.des *1.5;}
requestAnimationFrame(foo);
};
var c= Lienzo.obj.getContext('2d');
Imagen.cargar();
foo();
onkeydown= function(e){Animar.tecla= e.keyCode; Animar.dir=0;};
onkeyup= function(){Animar.dir= Animar.tecla; Animar.tecla= 0;};
&#13;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body style="background:rgb(57,63,76);color:rgb(190,190,190);">
<canvas id="lienzo" width="600" height="300" style="background:olivedrab;"></canvas>
<script src="imagen.js">
</script>
</body>
</html>
<!--
Imagen
obj
ruta
cargar()
ini[]
fin[]
pos[]
Lienzo
obj
ancho
alto
Sombra
fg1, fg2, fg3 // abajo
fg4, fg5, fg6 // arriba
fg7, fg8, fg9 // izquierda
fg10,fg11,fg12// derecha
Movimiento
N
abajo()
-->
&#13;
答案 0 :(得分:1)
这不是唯一的问题&#39; D&#39;但它发生在所有图像绘图中。
问题是画布试图在drawImage
调用期间平滑您的图像。可以通过将以下属性设置为false来禁用它。
//Following needs to be set to false, as pointed out by Kaiido, prefixed versions are necessary currenlty
c.imageSmoothingEnabled = false;
c.mozImageSmoothingEnabled = false;
c.msImageSmoothingEnabled = false;
c.webkitImageSmoothingEnabled = false;
这里是documentation link from mozilla
禁用平滑图像后看起来没问题。请参阅下面的尝试修改后的脚本。我有代码禁止平滑。
var Imagen= { // image to load, and manipulate
obj: null,
ruta: null,
cargar: function() {
this.obj= new Image();
//this.obj.src= '/C:/Documents and Settings/casa/Mis documentos/Mis imágenes/sprite.png';
this.obj.src= 'https://s22.postimg.org/6r8uzrygh/sprite.png';
},
ini: [2, 1],
fin: [22, 38],
pos: [0, 1],
auxy: [0, 1],
vel: {
des: 0.4,
som: 0.1
}
};
var Lienzo= { // this is the canvas
obj: document.getElementById('lienzo'),
ancho: 600,
alto: 300
};
var Sombra= { // this is for the sprites
fg1: function() {
Imagen.ini[0]= 2 +48*0; // recortes de la imagen
Imagen.ini[1]= 1; // recortes de la imagen
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg2: function() {
Imagen.ini[0]= 2 +48*1;
Imagen.ini[1]= 0;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1] -1;
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg3: function() {
Imagen.ini[0]= 2 +48*2;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg4: function() {
Imagen.ini[0]= 2 +48*3;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg5: function() {
Imagen.ini[0]= 2 +48*4;
Imagen.ini[1]= 0;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1] -1;
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg6: function() {
Imagen.ini[0]= 2 +48*5;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg7: function() {
Imagen.ini[0]= 2 +48*6;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg8: function() {
Imagen.ini[0]= 2 +48*7;
Imagen.ini[1]= 0;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1] -1;
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg9: function() {
Imagen.ini[0]= 2 +48*8;
Imagen.ini[1]= 1;
Imagen.pos[0]= Imagen.auxy[0];
Imagen.pos[1]= Imagen.auxy[1];
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
},
fg10: function() {
Imagen.ini[0]= 2 +48*6;
Imagen.ini[1]= 1;
Imagen.pos[0]= -Imagen.auxy[0] -22;
Imagen.pos[1]= Imagen.auxy[1];
c.save();
c.translate(0, 0);
c.scale(-1 ,1);
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
c.restore();
},
fg11: function() {
Imagen.ini[0]= 2 +48*7;
Imagen.ini[1]= 0;
Imagen.pos[0]= -Imagen.auxy[0] -22;
Imagen.pos[1]= Imagen.auxy[1] -1;
c.save();
c.translate(0, 0);
c.scale(-1 ,1);
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
c.restore();
},
fg12: function() {
Imagen.ini[0]= 2 +48*8;
Imagen.ini[1]= 1;
Imagen.pos[0]= -Imagen.auxy[0] -22;
Imagen.pos[1]= Imagen.auxy[1];
c.save();
c.translate(0, 0);
c.scale(-1 ,1);
c.drawImage(Imagen.obj, Imagen.ini[0], Imagen.ini[1], Imagen.fin[0], Imagen.fin[1], Imagen.pos[0], Imagen.pos[1], Imagen.fin[0], Imagen.fin[1]);
c.restore();
}
};
var Animar= { // a=65, d=68, w=87, s=83 // izq=37, arr=38, der=39, abj=40 this is for calling the sprites
S: 0,
W: 0,
A: 0,
D: 0,
tecla: 0, dir: 83,
abajo: function() {
if (this.S <= 1) Sombra.fg1();
else if (this.S <= 2) Sombra.fg2();
else if (this.S <= 3) Sombra.fg3();
else if (this.S <= 4) Sombra.fg2();
this.S+= Imagen.vel.som;
if (this.S > 4) this.S= 0;
},
arriba: function() {
if (this.W <= 1) Sombra.fg4();
else if (this.W <= 2) Sombra.fg5();
else if (this.W <= 3) Sombra.fg6();
else if (this.W <= 4) Sombra.fg5();
this.W+= Imagen.vel.som;
if (this.W > 4) this.W= 0;
},
izquierda: function() {
if (this.A <= 1) Sombra.fg7();
else if (this.A <= 2) Sombra.fg8();
else if (this.A <= 3) Sombra.fg9();
else if (this.A <= 4) Sombra.fg8();
this.A+= Imagen.vel.som;
if (this.A > 4) this.A= 0;
},
derecha: function() {
if (this.D <= 1) Sombra.fg10();
else if (this.D <= 2) Sombra.fg11();
else if (this.D <= 3) Sombra.fg12();
else if (this.D <= 4) Sombra.fg11();
this.D+= Imagen.vel.som;
if (this.D > 4) this.D= 0;
}
};
var foo= function() {
c.clearRect(0, 0, 600, 300);
if(Animar.dir == 83) Sombra.fg2();
if(Animar.dir == 87) Sombra.fg5();
if(Animar.dir == 65) Sombra.fg8();
if(Animar.dir == 68) Sombra.fg11();
if(Animar.tecla == 83) {Animar.abajo(); Imagen.auxy[1]+= Imagen.vel.des;}
if(Animar.tecla == 87) {Animar.arriba(); Imagen.auxy[1]+= -Imagen.vel.des}
if(Animar.tecla == 65) {Animar.izquierda(); Imagen.auxy[0]+= -Imagen.vel.des *1.5;}
if(Animar.tecla == 68) {Animar.derecha(); Imagen.auxy[0]+= Imagen.vel.des *1.5;}
requestAnimationFrame(foo);
};
var c= Lienzo.obj.getContext('2d');
//Following needs to be set to false, as pointed out by Kaiido, prefixed versions are necessary currenlty
c.imageSmoothingEnabled = false;
c.mozImageSmoothingEnabled = false;
c.msImageSmoothingEnabled = false;
c.webkitImageSmoothingEnabled = false;
Imagen.cargar();
foo();
onkeydown= function(e){Animar.tecla= e.keyCode; Animar.dir=0;};
onkeyup= function(){Animar.dir= Animar.tecla; Animar.tecla= 0;};
&#13;
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body style="background:rgb(57,63,76);color:rgb(190,190,190);">
<canvas id="lienzo" width="600" height="300" style="background:olivedrab;"></canvas>
<script src="imagen.js">
</script>
</body>
</html>
<!--
Imagen
obj
ruta
cargar()
ini[]
fin[]
pos[]
Lienzo
obj
ancho
alto
Sombra
fg1, fg2, fg3 // abajo
fg4, fg5, fg6 // arriba
fg7, fg8, fg9 // izquierda
fg10,fg11,fg12// derecha
Movimiento
N
abajo()
-->
&#13;