原生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 相关文章推荐
JS打开层/关闭层/移动层动画效果的实例代码
May 11 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
Jan 26 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
jQuery常用操作方法及常用函数总结
Jun 19 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
动态加载js的方法汇总
Feb 13 Javascript
JavaScript中指定函数名称的相关方法
Jun 04 Javascript
Javascript 正则表达式校验数字的简单实例
Nov 02 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 Javascript
jQuery实现图片切换效果
Oct 19 jQuery
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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
nodeJS微信分享
2017/12/20 NodeJs
JS常见构造模式实例对比分析
2018/08/27 Javascript
vue中Element-ui 输入银行账号每四位加一个空格的实现代码
2018/09/14 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
python如何处理程序无法打开
2020/06/16 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
大学生职业生涯规划书模板
2014/01/03 职场文书
奥利奥广告词
2014/03/20 职场文书
亲属关系公证书样本
2015/01/23 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
庭外和解协议书
2016/03/23 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
导游词之西递宏村
2019/12/10 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL