performance en utilisant sprites
Phrogz a quelques tests de FPS utiles pour CSS vs Canvas ici: Efficiency of <canvas> and <div>s Ils sont des tests en direct afin que vous puissiez les exécuter dans les environnements que vous souhaitez tester.
recoloration sprites
Si vous voulez prendre rapidement l'image-objet blanc et créer sprites rouge, vert et bleu de celui-ci, vous pouvez utiliser globalCompositeOperation = » source dans » de faire cela avec très peu travail. Utilisez simplement un éditeur d'image pour créer une découpe de la partie de l'image que vous voulez recolorer. Utilisez ensuite le code ci-dessous pour créer automatiquement différents sprites colorés. J'ai fait le masque ci-dessous dans Photoshop en utilisant l'outil magique - 2 minutes de haut!
poisson original + Mask = Green Fish
Bien sûr, vous pouvez créer une couleur que vous voulez ... même les modèles au lieu de couleurs solides!
Voici le code. Vous devrez probablement créer votre propre image et votre masque à cause de CORS - stupide CORS !!
<!doctype html>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
canvas{border:1px solid red;}
#wrapper{ position:relative;}
#overlay,#base{ position:absolute; top:0; left:0;}
</style>
<script>
$(function(){
var canvas=document.getElementById("overlay");
var ctx=canvas.getContext("2d");
var img=new Image();
img.onload=function(){
ctx.drawImage(img,0,0,img.width,img.height,0,0,overlay.width,overlay.height);
}
img.src="http://dl.dropbox.com/u/139992952/stackoverflow/fish%20overlay.png";
function draw(red,green,blue) {
ctx.save();
ctx.globalCompositeOperation = 'source-in';
ctx.fillStyle="rgb("+red+","+green+","+blue+")";
ctx.beginPath();
ctx.rect(0,0,overlay.width,overlay.height);
ctx.fill();
ctx.restore();
}
$("#red").click(function(){ draw(255,0,0); });
$("#green").click(function(){ draw(0,255,0); });
$("#blue").click(function(){ draw(0,0,255); });
});
</script>
</head>
<body>
<button id="red">Red Fish</button>
<button id="green">Green Fish</button>
<button id="blue">Blue Fish</button>
<div id="wrapper">
<img id="base" src="http://dl.dropbox.com/u/139992952/stackoverflow/fish.png" width=350 height=250>
<canvas id="overlay" width=350 height=250></canvas>
</div>
</body>
</html>
Oh c'est bien! Merci pour l'astuce de masquage :) – NibblyPig
La question principale que je pose cependant est, devrais-je dessiner directement à partir du spritemap, ou dans ma méthode init() dois-je séparer le spritemap en différentes images? – NibblyPig