<html>
<head>
<title>坎农</title>
<script src="../js/jscex.jscexRequire.min.js" type="text/javascript"></script>
</head> <body>
<canvas id="mc" width="1350px" height="600px">
</canvas>
<script type="text/javascript">
var canvas = document.getElementById('mc');
var cxt = canvas.getContext('2d');
//设置画布背景颜色
cxt.fillStyle = "#030303";
cxt.fillRect(0, 0, canvas.width, canvas.height);
//载入大炮图片
var img = new Image();
img.src = "artillery.png";
img.onload = function(){
cxt.drawImage(img,0,325);//将图片放在
}
var cyc = 10;
var a = 50;
var balls = [];
//随机生成的数据
function getRandomNumber(min,max){
return (min + Math.floor(Math.random() * (max - min + 1)));
}
//循环实现大炮的轰炸
var somethingAsync = eval(Jscex.compile("async", function () {
while (true) {
//模拟炮弹
var ball = {
x : 185,
y : 470,
r : getRandomNumber(0,20),
vx : getRandomNumber(190,3000),
vy : getRandomNumber(-3000,0)
};
balls.push(ball);
//当炮弹的数量大于100时,就会从浏览器里面移除一个小球,以防止浏览器的堆栈溢出
if(balls.length > 200){
balls.shift();
}
cxt.fillStyle = "rgba(0,0,0,.3)";
cxt.fillRect(0,0,canvas.width,canvas.height);
cxt.fillStyle = randomColor();
cxt.drawImage(img,0,425);
//绘制炮弹运动的路径
for (i in balls) {
cxt.beginPath();
cxt.arc(balls[i].x, balls[i].y, balls[i].r, 0, Math.PI * 2, true);
cxt.closePath();
cxt.fill();
balls[i].y += balls[i].vy * cyc / 1000;
balls[i].x += balls[i].vx * cyc / 1000;
//当全部的球都碰撞到地面时
if (balls[i].r + balls[i].y >= canvas.height) {
if (balls[i].vy > 0) {
balls[i].vy *= -0.9;
}
}
else {
balls[i].vy += a;
}
//当全部的球都碰到左右两墙壁时
if(balls[i].x >= canvas.width || balls[i].r >= balls[i].x){
balls[i].vx *= -1;
}
}
$await(Jscex.Async.sleep(cyc));
}
}));
//随机生成颜色
function randomColor(){
var arr = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","F"];
var str = "#";
var index;
for (var i = 0; i < 6; i++) {
index = Math.round(Math.random()*15);//随机生成一个下表
str += arr[index];
}
return str;
} somethingAsync().start(); </script>
</body>
</html>

版权声明:本文博主原创文章,博客,未经同意不得转载。

讲座:html5于canvas疯狂的炮轰实现的更多相关文章

  1. 用html5的canvas画布绘制贝塞尔曲线

    查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  2. HTML5在canvas中绘制复杂形状附效果截图

    HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...

  3. HTML5之Canvas时钟(网页效果--每日一更)

    今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果. 话不多说,先看效果:亲,请点击这里 众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由Java ...

  4. HTML5 画布canvas元素

    HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小 ...

  5. HTML5 之Canvas绘制太阳系

    <!DOCTYPE html> <html> <head> <title>HTML5_Canvas_SolarSystem</title> ...

  6. HTML5 中canvas支持触摸屏的签名面板

    1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...

  7. 【HTML5】Canvas画布

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  8. html5 之 canvas 相关知识(一)概念及定义

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  9. HTML5之Canvas画布

    先上代码: <canvas width="1000" height="800">浏览器不支持HTML5!</canvas> <sc ...

随机推荐

  1. sql server实现主从复制

    测试环境 :主机: 数据库sql server08 r2  系统windows server 2008 r2  IP192.168.1.202 丛机:数据库sql server12  系统window ...

  2. HDU 1114 Piggy-Bank 全然背包

    Piggy-Bank Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  3. 使用CSS3制图

    参考资料:http://blog.csdn.net/fense_520/article/details/37892507 本文非转载.为个人原创,转载请先联系博主,谢谢~ 准备: <!DOCTY ...

  4. POJ1201 差分约束

    给定ai,bi, ci 表示区间[ai,bi]内至少有ci个点, 要求对于所有给定的ai,bi,ci,  至少多少个点才能满足题目的条件 重做这一题学到的一点是, 可以设变量来表示一些东西,然后才能找 ...

  5. php判断变量是否存在

    isset— 检测变量是否设置, isset() 只能用于变量,因为传递任何其它参数都将造成解析错误.若想检测常量是否已设置,可使用 defined() 函数. 如果已经使用 unset() 释放了一 ...

  6. STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測

    基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并加入用户任务.实现对温湿度.超声波.声音.光敏等传感器的控制及实时数据採集. 14.1开发环境说明 硬件:STM32W1 ...

  7. POJ 2533-Longest Ordered Subsequence(DP)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34454   Acc ...

  8. Android开发ListView使用OnScrollListener实现分页加载数据

    上篇博文和大家分享了下拉刷新,这是一个用户体验很好的操作方式.新浪微薄就是使用这样的方式的典型. 还有个问题,当用户从网络上读取微薄的时候.假设一下子所有载入用户未读的微薄这将耗费比較长的时间,造成不 ...

  9. mysql多实例的配置(转)

    1.创建多实例的目录: mkdir -p /data/mysql/mysql_3307/{data,tmp,logs} mkdir -p /data/mysql/mysql_3308/{data,tm ...

  10. 解决SMARTFORMS 中table 控件单行跨页的问题

    在CX项目中,MM模块做了大量的的单据打印的工作,一个问题困扰了我好久,一直不能解决.当物料描述很长时,table控件在单元格中能自动换行,这样就有可能在换页处出现一行记录的一部分打在上一页,一部分记 ...