原生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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
Aug 09 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
JavaScript实现的encode64加密算法实例分析
Apr 15 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
jQuery 判断是否包含在数组中Array[]的方法
Aug 03 Javascript
vue-cli + sass 的正确打开方式图文详解
Oct 27 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
Sep 17 Javascript
小程序实现左右来回滚动字幕效果
Dec 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
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python抓取网页中的图片示例
2014/02/28 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python如何测试stdout输出
2020/08/10 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
shallow copy和deep copy的区别
2016/05/09 面试题
高中同学聚会邀请函
2014/01/11 职场文书
小学教研工作制度
2014/01/15 职场文书
护理不良事件检讨书
2014/02/06 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
户外拓展训练感想
2015/08/07 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
Python语言内置数据类型
2022/02/24 Python
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers