1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| <!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#cancan{
border: 1px solid black;
}
</style>
</head>
<body>
<canvas id="cancan" width="500" height="500"></canvas>
<script>
const cancan=document.getElementById('cancan');
const context= cancan.getContext("2d");
const cw=cancan.width;
const ch=cancan.height;
class Point{
constructor(x,y){
this.x=x;
this.y=y;
}
}
class Oimage{
constructor(x,y,ctx,path){
let pt= new Point(x,y);
const im=document.createElement('img');
im.src=path;
im.addEventListener('load',()=>{ctx.drawImage(im,pt.x,pt.y);});
this.draw=function(){
ctx.clearRect(0,0,cw,ch); //après il vaudrait mieux effacer sur le rect de la position précédente de l'image pour éviter que ça rame avec plusieurs objets en déplacement...
// et aussi utiliser les fonctionnalités de canvas avec ctx.save et ctx.restore() ainsi que ctx.translate(pt.x,pt.y) plutôt que de déplacer l'image...
ctx.drawImage(im,pt.x,pt.y);
};
Object.defineProperties(this, {pos: {
set: function (value) {
pt=new Point(x+value.x,y+value.y);//ici
this.draw();
}
}
});
}
}
const image=new Oimage(0,0,context,'image.png');
let dx=0;
function anime(){
dx+=1;
image.pos=new Point(dx,100);
requestAnimationFrame(anime);
}
anime();
</script>
</body>
</html> |
Partager