原生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 相关文章推荐
jquery 新手学习常见问题解决方法
Apr 18 Javascript
jquery交替变换颜色的三种方法 实例代码
Nov 19 Javascript
20条学习javascript的编程规范的建议
Nov 28 Javascript
JavaScript中用字面量创建对象介绍
Dec 31 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
Jun 25 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
Dec 30 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
浅析vue中常见循环遍历指令的使用 v-for
Apr 18 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
深入浅析React中diff算法
May 19 Javascript
vue打包时去掉所有的console.log
Apr 10 Vue.js
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
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
Python创建自己的加密货币的示例
2021/03/01 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
小学生家长评语大全
2014/02/10 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
四年级学生期末评语
2014/12/26 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python