原生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 25 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
jquery动画1.加载指示器
Aug 24 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
js实现各种复制到剪贴板的方法(分享)
Oct 27 Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 Javascript
深入掌握 react的 setState的工作机制
Sep 27 Javascript
JavaScript模块详解
Dec 18 Javascript
JS实现键值对遍历json数组功能示例
May 30 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
Nov 02 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 Javascript
字节飞书面试promise.all实现示例
Jun 16 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
用PHP读取RSS feed的代码
2008/08/01 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python发送邮件功能实现代码
2016/07/15 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
python从子线程中获得返回值的方法
2019/01/30 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Django工程的分层结构详解
2019/07/18 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
python元组拆包实现方法
2021/02/28 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
五型班组建设方案
2014/02/10 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
2015年教师新年寄语
2014/12/08 职场文书
小学生教师节广播稿
2015/08/19 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
Go语言中的UTF-8实现
2021/04/26 Golang
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL