html5 人物行走

键盘方向键控制人物上下左右行走

演示地址

点击打开链接

MYCode

<html>
<head>
<meta charset=utf-8>
<title>html5人物行走</title>
<script>
var canvas;
var ctx;

//role
var role_x=50;
var role_y=50;
var role_width=32;
var role_height=48;
//每个方向有4个状态
role_direction=0;//value[0,3];
role_status=0;//value[0,3];
//box
var box_x=0;
var box_y=0;
var box_width=400;
var box_height=400;
//
var bound_left=0;
var bound_right=box_x+box_width-role_width;
var bound_top=0;
var bound_bottom=box_y+box_height-role_height;

var unit=10;


function draw_role()
{
        ctx.clearRect(box_x,box_y,box_width,box_height);
        ctx.lineWidth="5";
        ctx.strokeStyle="rgb(0,0,0)";
        ctx.beginPath();
        ctx.strokeRect(box_x,box_y,box_width,box_height);
	/*var img=new Image();
	img.src="role.png";
	ctx.drawImage(img,role_direction*role_height,role_status*role_width,role_width,role_height);*/
        var img=new Image();
        img.src="role.png";
        img.onload=function()
        {
            //ctx.drawImage(img,0,0,role_width,role_height);
            //alert(role_x+","+role_y);
            ctx.drawImage(img,role_status*role_width,role_direction*role_height,role_width,role_height,role_x,role_y,role_width,role_height);
        };
}
function move_role(event)
{
	//鼠标点击移动
	/*var mx;
	var my;
	if(ev.layerX||ev.layerX==0)
	{
		mx=ev.layerX;
		my=ev.layerY;
	}
	else if(ev.offsetX||ev.offsetX==0)
	{
		mx=ev.offsetX;
		my=ev.offsetY;
	}*/
	var keyCode;
	if(event==null)
	{
		keyCode=window.event.keyCode;
		window.event.preventDefault();
	}
	else
	{
		keyCode=event.keyCode;
		event.preventDefault();
	}
	var cur_direction;
	switch(keyCode)
	{
            case 37://left
            cur_direction=1;
            role_x=role_x-unit;
            if(role_x<bound_left)
            role_x=bound_left;
            break;
            case 38://up
            cur_direction=3;
            role_y=role_y-unit;
            if(role_y<bound_top)
            role_y=bound_top;
            break;
            case 39://right
            cur_direction=2;
            role_x=role_x+unit;
            if(role_x>bound_right)
            role_x=bound_right;
            break;
            case 40://down
            cur_direction=0;
            role_y=role_y+unit;
            if(role_y>bound_bottom)
            role_y=bound_bottom;
            break;
            default:
            break;
	}
	if(role_direction==cur_direction)
	{
		role_status=(role_status+1)%4;
	}
	else
	{
		role_direction=cur_direction;
		role_status=0;
	}
	draw_role();
}
/*function animate(now)
{
    draw_role();
    requestAnimationFrame(animate);
}*/
function init()
{

	canvas=document.getElementById("canvas");
	ctx=canvas.getContext('2d');
	window.addEventListener('keydown',move_role,false);
        ctx.clearRect(box_x,box_y,box_width,box_height);
        ctx.save();
        ctx.lineWidth="5";
        ctx.strokeStyle="rgb(0,0,0)";
        ctx.beginPath();
        ctx.strokeRect(box_x,box_y,box_width,box_height);
        draw_role();
        ctx.restore();
        //setInterval(draw_role,1000);
        //setInterval(function (e){animate();},1000/60);
        //requestAnimationFrame(animate);
}
</script>
</head>
<body onLoad="init();">
<canvas id="canvas" width="500" height="500"/>
</body>
</html>

人物行走图片

不足之处

如果连续按住方向键,人物行走的动画将会出现闪烁。这个问题没有解决。

原文地址:https://www.cnblogs.com/jiangu66/p/3217905.html