• HTML 5 背离贪吃蛇 写成了类似于屏幕校准


    中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子。当然h5还是学一点好一点 

    具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出现小球来 如果随机圆和绘制圆的圆心距=2*R 则撞到了。 
    其中的问题有: 
    ① 怎么获取鼠标点击的坐标点 
    解决办法 :用一个

    包含canvas画布 而且将其宽度和高度设为一致的 同时调用div 的点击事件就可以获取到 此时canvas 中的坐标了 。
    <div  onclick="draw_location(event)" style="float:left;600;height:900;border:1px solid #c3c3c3">
    <!--onmousemove="draw_location(event)" 也可以动态读取鼠标到哪里就显示器坐标 -->
            <canvas id="canvas_Main" width="600" height="900"></canvas>
    </div>
     js当中的代码就非常的简单了
    function draw_location(e)
            {
                faixed_X=e.clientX;
                faixed_Y=e.clientY;
                if(number>0)
                {
                    ClearCanvas();
                     if(confirm('确定绘制在这里吗?'))
                     {
                        draw_panl(faixed_X,faixed_Y);//此处为调用画圆方法
                        feel_ball();
                     }          
                    number--;                   
                }else
                {
                    alert("所选次数已用完 请点击下面的按钮");
    
                }   
                btnHide_Show(number);
            }

    ② 怎么求圆心距

    js当中有一个开方的高阶函数: Math.sqrt();

    既然图中涉及到平方 那就先来一个平方的方法

    function  squre(num)
            {
                return num*num;
            }
    
    //计算圆心距
            //x  y为活动圆心坐标 
            //半径已设定为 15  如需要要更改  以后加上
            function  cylinder_spacing(x,y,r)
            {
             var  result;
             var  temp=squre(faixed_X-x)+squre(faixed_Y-y)
             result=Math.sqrt(temp);
             if(result<=2*r)
             {
                goldnum=goldnum+100;
                //金额加100
                document.getElementById("xycoordinates").innerText=goldnum;
             }else
             {
                //提示没有中奖         
             }      
            }   

    ③随机圆

    解决办法 
    因为是随机的 而且还要时时的更新位置 当然就要用到定时器 setInterval( function(){}①,time②) 
    ①=》function(){ 代码片 } || 别处定义好的方法 name 
    ②=》毫秒 
    定时器是一个全局变量 一处声明 处处就可以调用了

    var panl=setInterval(draw_panl,300)// panl 为当前计时器的名字
    //如果你要暂停这个计时器就要用到 clearInterval(③)
    ③=》计时器名字
    //*****-- 一个页面中必须要给计时器命名字 当你停止之后又开始 时  如果不指定名字 则会导致计时器的时间嵌套出错 
    间隔时间 越来越小---****
    //暂停计时器
    clearInterval(panl);
    //开始计时器
    panl=setInterval(functionName,time);

    以上是自己写成了随机碰的代码  

    还是完完整整的附上类似于屏幕校准的代码吧

    HTML 部分

    <!DOCTYPE html>
    <html >
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>        
                <div  onclick="cnvs_getCoordinates(event)" style="float:left;600;height:900;border:1px solid #c3c3c3">
            <canvas id="canvas_Main" width="600" height="900"></canvas>
            
            </div>
            <label id="xycoordinates"></label>
            <div style=" clear: both" id="btnlist">            
                <li>
                <input type="button" value="100/1" id="gold1" onclick="get_chance(1)">
                <input type="button" value="300/2" id="gold2" onclick="get_chance(2)">
                <input type="button" value="500/3" id="gold3" onclick="get_chance(3)">
                <input type="button" value="1000/4" id="gold4" onclick="get_chance(4)">
            </li>
            </div >
            </body>
    </html>

    js部分

    //类似于屏幕校准
        //   出现的问题是 : 
         var rand_X ;
         var  rand_Y;
         var goldnum=0;
         var lost_number=0;
         var chance=0;
        
        
        //获取可以丢失次数
            function get_chance(k)
            {        
                var  that=document.getElementById('btnlist');
                chance=k;
             if(chance>0)
                {                
                    that.style.display="none";
                    var  time=setInterval(draw_panl(),500);        
                }else
                {                
                    that.style.display="";
                }
            }
        //-----------------------------------------------------------
        //var  time=setInterval(draw_panl(),500);
        //获取随机颜色
            function Get_Color()
            {
                var  color='#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).slice(-6);    
                return color;
            }
            //获取随机坐标 
            function   RandomCoords()
            {
             rand_X=Randinterval(15,585);
             rand_Y=Randinterval(15,885);
            }
            //平方
            function  squre(num)
            {
                return num*num;
            }
            //随机函数
             function  Randinterval(minval,maxval)
            {
                return  Math.floor(Math.random()*maxval+minval);    
            }
            //--------------------------------------------------------------------
            //画圆
            function draw_panl()
            {        
                 RandomCoords();
                var c=document.getElementById("canvas_Main");
                var cxt=c.getContext("2d");    
                cxt.fillStyle=Get_Color(); 
                //可以加上 阴影
                cxt.shadowOffsetX = 5; // 阴影Y轴偏移
                     cxt.shadowOffsetY = 3; // 阴影X轴偏移
                  cxt.shadowBlur = 5; // 模糊尺寸
                  cxt.shadowColor =Get_Color(); // 颜色*/
                cxt.beginPath();
                cxt.arc(rand_X,rand_Y,25,0,Math.PI*2,true);
                cxt.closePath();
                cxt.fill();    
            }
            //清除画布
            function clear_panl ()
            {
                var c=document.getElementById("canvas_Main");
                var cxt=c.getContext("2d");
                cxt.clearRect(0,0,600,900);            
            }
            //获取鼠标坐标
            function cnvs_getCoordinates(e)
            {
                x=e.clientX;
                y=e.clientY;    
                cylinder_spacing(x,y);
            }
            //-------------- 我只是在PC上面这么做了 移动端暂时还没试验 调试的时候 也有用手机模式调试了一番--------------------------------
            //计算圆心距
            //x  y为活动圆心坐标 
            //半径已设定为 15  如需要请更改  如果真的写屏幕校准的话 那就简单多了  
         //想法 :自己知道canvas的大小=》继而知道坐标
          // 在四个边角先后绘制圆 根据圆心距来判断 你所要求的精度误差
         // 没有选中就在判断一次

    function cylinder_spacing(x,y) { var result; var temp=squre(rand_X-x)+squre(rand_Y-y) result=Math.sqrt(temp); //在此处加上 没点中之后发生的事情 if(result<=20) { goldnum=goldnum+100; //金额加100 document.getElementById("xycoordinates").innerText=goldnum; clear_panl(); time=setInterval(draw_panl(),500); }else { lost_number++; clear_panl(); time=setInterval(draw_panl(),200); if(lost_number==chance&&lost_number!=0) { alert("丢失越多,则速度会越快 直到停止"); clear_panl(); //将该计时器停止 clearInterval(time); lost_number=0; get_chance(0); } } }

    贪吃蛇的代码是我自己不能控制它的长度 就不把最后写废了的代码给大家看了, 免得自己下不来台。

    自己的js功力不是很够 还在学习阶段 各位就担待着看。欢迎评说!

  • 相关阅读:
    java generic type
    android avoiding-memory-leaks
    a various of context
    LruCache
    Java Reference
    SQL join
    Eclipse java中一个工程引用另一个工程的类
    java 匿名内部类的方法参数需要final吗?
    java的final
    如何将每一条记录放入到对应的范围中
  • 原文地址:https://www.cnblogs.com/SWSHBON/p/5626249.html
Copyright © 2020-2023  润新知