<head>
<script language="javascript" type="text/javascript">
var ciclos=0;
var iteraciones=1;
var jugador;
/* CONTROLES */
var KEY_LEFT = 37;
var KEY_UP = 38;
var KEY_RIGHT = 39;
var KEY_DOWN = 40;
var KEY_SPACE = 32;
var aTecla = [];
var nDireccion = 32
var x=0;
var y=230;
window.onload=function(){ canvas=document.getElementById("miCanvas"); canvas.width = 640;
canvas.height= 480;
if(canvas && canvas.getContext){ ctx = canvas.getContext("2d"); if(ctx){ imgEscenario= new Image();
imgEscenario.src="Escenario.png";
imgEscenario.onload=function(){ level = new Escenario();
imagen=new Image();
imagen.src="sprite.png";
imagen.onload=function(){ jugador = new Player();
anima();
}
}
}else{ alert("Error al crear el contexto"); }
}
}
/* PERSONAJE */
function Player(){ this.w = 96;
this.h = 96;
this.x = (canvas.width/2)-(this.w/2);
this.y = 230;
this.direccion = "R";
this.salto = false;
this.sube = false
this.dibuja= dibujaPlayer;
}
function dibujaPlayer(){ if(aTecla[KEY_LEFT] || aTecla[KEY_RIGHT]){ if(ciclos>3){ ciclos=0;
iteraciones++;
}
ciclos++;
if(iteraciones>8){ iteraciones=1;
}
if(aTecla[KEY_LEFT]){ nDireccion=0;
jugador.direccion="L";
if(!jugador.salto){ ctx.drawImage(imagen, 32*iteraciones,nDireccion , 31,31 , canvas.width/2-64,canvas.height-230, 96,96);
}else{ if(jugador.sube){ jugador.y+=5;
}else{ jugador.y-=5;
}
if(jugador.y>230+120){ jugador.sube=false;
}
if(jugador.y<=230){ jugador.y=230;
jugador.salto=false;
}
if(jugador.sube)
ctx.drawImage(imagen, 160,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
else
ctx.drawImage(imagen, 128,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
}
}
else if(aTecla[KEY_RIGHT]){ nDireccion=32;
jugador.direccion="R";
if(!jugador.salto){ ctx.drawImage(imagen, 32*iteraciones,nDireccion , 31,31 , canvas.width/2-64,canvas.height-230, 96,96);
}else{ if(jugador.sube){ jugador.y+=5;
}else{ jugador.y-=5;
}
if(jugador.y>230+120){ jugador.sube=false;
}
if(jugador.y<=230){ jugador.y=230;
jugador.salto=false;
}
if(jugador.sube)
ctx.drawImage(imagen, 0,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
else
ctx.drawImage(imagen, 32,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
}
}
}else{ if(!jugador.salto){ ctx.drawImage(imagen, 0,nDireccion , 31,31 , canvas.width/2-64,canvas.height-230, 96,96);
}else{ if(jugador.sube){ jugador.y+=5;
}else{ jugador.y-=5;
}
if(jugador.y>230+120){ jugador.sube=false;
}
if(jugador.y<=230){ jugador.y=230;
jugador.salto=false;
}
if(jugador.direccion=="L"){ if(jugador.sube)
ctx.drawImage(imagen, 160,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
else
ctx.drawImage(imagen, 128,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
}else{ if(jugador.sube)
ctx.drawImage(imagen, 0,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
else
ctx.drawImage(imagen, 32,64 , 33,34 , canvas.width/2-64,canvas.height-jugador.y, 105,105);
}
}
}
}
/* ESCENARIO */
function Escenario(){ this.dibuja = dibujaEscenario;
}
function dibujaEscenario(){ if(ciclos>3){ switch(jugador.direccion){ case "R":
x -= 13;
if(x<=-canvas.width) x=0;
break;
case "L":
x += 13;
if(x>=canvas.width) x=0;
break;
}
}
ctx.drawImage(imgEscenario, 0,0 , imgEscenario.width,imgEscenario.height, -canvas.width+x,0 , canvas.width,canvas.height);
ctx.drawImage(imgEscenario, 0,0 , imgEscenario.width,imgEscenario.height, x,0 , canvas.width,canvas.height);
ctx.drawImage(imgEscenario, 0,0 , imgEscenario.width,imgEscenario.height, canvas.width+x,0 , canvas.width,canvas.height);
}
/* MOTOR */
function anima(){ requestAnimationFrame(anima);
level.dibuja()
jugador.dibuja();
}
/* LISTENERS */
document.addEventListener("keydown",function(e){ if(e.keyCode == KEY_SPACE){ if(!jugador.salto){ jugador.salto=true;
jugador.sube=true;
}
}
aTecla[e.keyCode]=true
});
document.addEventListener("keyup",function(e){ aTecla[e.keyCode]=false;
iteraciones=0;
ciclos=2;
});
</script>
</head>
<body>
<div>
<canvas id="miCanvas"></canvas>
</div>
</body>
Mismo escenario pero hoja de sprites aumentada.