zoukankan      html  css  js  c++  java
  • 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>

    人物行走图片

    不足之处

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

  • 相关阅读:
    Swagger注解及参数细节的正确书写。
    TCP连接为什么三次握手四次挥手
    OpenMeetings安装
    [LeetCode]Best Time to Buy and Sell Stock III
    [LeetCode]Best Time to Buy and Sell Stock
    [LeetCode]Best Time to Buy and Sell Stock II
    [LeetCode]Delete Node in a Linked List
    [LeetCode]Lowest Common Ancestor of a Binary Search Tree
    [LeetCode]Invert Binary Tree
    [LeetCode]Same Tree
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3217905.html
Copyright © 2011-2022 走看看