原生js结合html5制作小飞龙的简易跳球


Posted in Javascript onMarch 30, 2015

演示地址:http://runjs.cn/detail/yjpvqhal

html代码

<html>
  <head>
    <meta charset="utf-8"/>
    <title>小飞龙的跳球</title>
  </head>
  <body onload="init()">
    <canvas id="game" width="400" height="400" style="border:1px solid #c3c3c3">
      你的游览器不支持html5的画布元素,请升级到IE9+或使用firefox、chrome这类高级的智能游览器!
    </canvas>
    <script>
      var canvas = document.getElementById('game');
      var ctx = canvas.getContext('2d');
      var grad;
      //盒子的起始位置和大小以及球的半径
      var box = {x:20,y:20,w:350,h:350,r:20};
      //球的中心位置和偏移位置
      var inbox = {//box内的限制范围
          bx:(box.w+box.x-box.r),
          by:(box.h+box.y-box.r),
          ix:box.x+(box.r*2),
          iy:box.y+(box.r*2)
        };
      //球的初始位置和变化位置  
      var ball = {x:50,y:50,vx:4,vy:8};
      var img = new Image();
      img.src = 'images/qiuqiu.png';
      var hue = [[255,0,0],[255,255,0],[0,255,0],[0,255,255],[0,0,255],[255,0,0]];
      function init(){
        grad = ctx.createLinearGradient(box.x,box.y,box.w,box.h);
        for(var i=0;i<hue.length;i++){
          var color = 'rgb('+hue[i][0]+','+hue[i][1]+','+hue[i][2]+')';
          grad.addColorStop(i/hue.length,color);
        }
        ctx.lineWidth = box.r;
        ctx.fillStyle = 'rgb(200,0,50)';
        ctx.fillStyle = grad;
        moveBall();
        setInterval(moveBall,50);
      }  
      //碰撞检测并重新确定球的位置
      function moveBallEndCheck(){
        var nx = ball.x + ball.vx;
        var ny = ball.y + ball.vy;
        if(nx > inbox.bx){//当前x大于上边框边界
          ball.vx = -ball.vx;//球的变化x坐标当前当前变化x坐标的负数
          nx = inbox.bx;//当前位置为上边框的位置
        }
        if(nx < inbox.ix){//当前位置小于下边框
          nx = inbox.ix;//当前位置为下边框的x
          ball.vx = -ball.vx;//球的变化x坐标翻转取负
        }
        if(ny > inbox.by){
          ny = inbox.by;
          ball.vy = -ball.vy;
        }
        if(ny < inbox.iy){
          ny = inbox.iy;
          ball.vy = -ball.vy;
        }
        ball.x = nx;
        ball.y = ny;
      }
      function moveBall(){
        ctx.clearRect(box.x,box.y,box.w,box.h);
        moveBallEndCheck();
        ctx.beginPath();
        //console.log(ball.x+"\t"+ball.y+"\t"+ball.vx+"\t"+ball.vy+"\t"+(ball.x-box.r)+"\t"+(ball.y-box.r));
        ctx.drawImage(img,(ball.x-box.r),(ball.y-box.r));
        ctx.fillRect(box.x,box.y,box.r,box.h);
        ctx.fillRect((box.x+box.w-box.r),box.y,box.r,box.h);
        ctx.fillRect(box.x,box.y,box.w,box.r);
        ctx.fillRect(box.x,(box.y+box.h-box.r),box.w,box.r);
        ctx.closePath();
        ctx.fill();
      }
    </script>
  </body>
</html>

演示图片

原生js结合html5制作小飞龙的简易跳球

以上所述就是本文的全部代码,希望大家能够喜欢。

Javascript 相关文章推荐
javascript编程起步(第六课)
Jan 10 Javascript
jQuery中noConflict()用法实例分析
Feb 08 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 Javascript
bootstrap 设置checkbox部分选中效果
Apr 20 Javascript
addEventListener()与removeEventListener()解析
Apr 20 Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
Nov 15 Javascript
详解javascript中的变量提升和函数提升
May 24 Javascript
javaScript实现游戏倒计时功能
Nov 17 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
May 31 Javascript
vue中touch和click共存的解决方式
Jul 28 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
Mar 30 #Javascript
浅谈类似于(function(){}).call()的js语句
Mar 30 #Javascript
jquery实现右键菜单插件
Mar 29 #Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 #Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 #Javascript
JQuery调用绑定click事件的3种写法
Mar 28 #Javascript
对Web开发中前端框架与前端类库的一些思考
Mar 27 #Javascript
You might like
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python对html代码进行escape编码的方法
2015/05/04 Python
Python批量更改文件名的实现方法
2017/10/29 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
用python实现百度翻译的示例代码
2018/03/09 Python
python判断数字是否是超级素数幂
2018/09/27 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
python selenium firefox使用详解
2019/02/26 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
法律工作求职自荐信
2013/10/31 职场文书
运动会广播稿500字
2014/01/28 职场文书
大学军训感言600字
2014/02/25 职场文书
小学生环保标语
2014/06/13 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python