html 5 cavans 简易祖玛
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>无标题文档</title>
- <style>
- *margin{padding:0;margin:0;}
- body{background:black;}
- #box1{width:600px;height:600px;background:white; margin:20px auto;}
- span{background:white;}
- </style>
- <script>
- window.onload = function(){
- var oC = document.getElementById('cl');
- var oGc = oC.getContext('2d');
- var yImage = new Image();
- yImage.src = 'person.png';
- var iRotate = 0;
- yImage.onload = function(){
- setInterval(function(){
- oGc.clearRect(0,0,oC.width,oC.height);
- oGc.beginPath();
- oGc.arc(300,200,200,-90*Math.PI/180,180*Math.PI/180,false);
- oGc.stroke();
- oGc.beginPath();
- oGc.arc(250,200,150,180*Math.PI/180,0,false);
- oGc.stroke();
- oGc.beginPath();
- oGc.arc(400,200,20,0,360*Math.PI/180,false);
- oGc.closePath();
- oGc.stroke();
- for(var i=0;i<ball.length;i++){
- oGc.beginPath();
- //oGc.moveTo(ball[i].x,ball[i].y);
- oGc.arc(ball[i].x,ball[i].y,20,0,360*Math.PI/180,false);
- oGc.closePath();
- oGc.fill();
- }
- oGc.save();
- oGc.translate(300,200);
- oGc.rotate(180*Math.PI/180);
- oGc.rotate(iRotate);
- oGc.translate(-40,-40);
- oGc.drawImage(yImage,0,0);
- oGc.restore();
- for(var i=0;i<bullet.length;i++){
- oGc.save();
- oGc.beginPath();
- oGc.fillStyle = 'red';
- oGc.moveTo(bullet[i].x,bullet[i].y);
- oGc.arc(bullet[i].x,bullet[i].y,20,0,360*Math.PI/180,false);
- oGc.closePath();
- oGc.fill();
- oGc.restore();
- }
- oGc.save();
- oGc.font = '60px impact';
- oGc.textBaseline = 'top';
- oGc.fillStyle = 'red';
- oGc.shadowOffsetX = 10;
- oGc.shadowOffsetY = 10;
- oGc.shadowColor = 'green';
- oGc.shadowBlur = 5;
- var w = oGc.measureText('简易祖玛').width;
- oGc.fillText('简易祖玛',(oC.width-w)/2,450);
- oGc.restore();
- },1000/60); //这个刷新1000/60最好
- }
- var ball = [];
- setInterval(function(){
- var ballData = {
- x:300,
- y:0,
- r:200,
- startX:300,
- startY:0,
- num:0
- };
- ball.push(ballData);
- },500);
- setInterval(function(){
- for(var i=0;i<ball.length;i++){
- ball[i].num++;
- if(ball[i].num == 270){
- ball[i].r = 150;
- ball[i].startX = 250;
- ball[i].startY = 50;
- }
- if(ball[i].num == 270+180){
- alert("游戏结束!");
- window.location.reload();
- }
- ball[i].x = Math.sin(ball[i].num*Math.PI/180)*ball[i].r+ball[i].startX;
- ball[i].y = ball[i].r-Math.cos(ball[i].num*Math.PI/180)*ball[i].r+ball[i].startY;
- }
- for(var i=0;i<bullet.length;i++){
- bullet[i].x += bullet[i].sX;
- bullet[i].y += bullet[i].sY;
- }
- for(var i=0;i<ball.length;i++){
- for(var j=0;j<bullet.length;j++){
- if(crash(ball[i].x,ball[i].y,bullet[j].x,bullet[j].y)){
- ball.splice(i,1);
- bullet.splice(j,1);
- break;
- }
- }
- }
- },30);
- oC.onmousemove = function(ev){
- var ev = ev || event;
- var disX = ev.clientX - oC.offsetLeft;
- var disY = ev.clientY - oC.offsetTop;
- var a = disX-300;
- var b = disY-200;
- var c = Math.sqrt(a*a+b*b);
- if(a > 0 && b >0){
- //右上
- iRotate = Math.asin(b/c)+90*Math.PI/180;
- }else if(a > 0 ){
- //右下
- iRotate = Math.asin(a/c);
- }
- if(a < 0 && b > 0){
- //左下
- iRotate = -(Math.asin(b/c)+90*Math.PI/180);
- }else if(a < 0 ){
- //左上
- iRotate = Math.asin(a/c);
- }
- };
- var bullet = [];
- oC.onmousedown = function(ev){
- var ev = ev || event;
- var disX = ev.clientX - oC.offsetLeft;
- var disY = ev.clientY - oC.offsetTop;
- var a = disX-300;
- var b = disY-200;
- var c = Math.sqrt(a*a+b*b);
- var speed = 5;
- var spX = speed*a/c;
- var spY = speed*b/c;
- bullet.push({
- x:300,
- y:200,
- sX:spX,
- sY:spY
- });
- };
- function crash(x1,y1,x2,y2){
- var x = x1-x2;
- var y = y1-y2;
- var c = Math.sqrt(x*x+y*y);
- if(c <40){
- return true;
- }else{
- return false;
- }
- }
- };
- </script>
- </head>
- <body>
- <div id="box1">
- <canvas id="cl" width="600" height="600">
- <span>浏览器不支持canvas</span>
- </canvas>
- </div>
- </body>
- </html>
html 5 cavans 简易祖玛的更多相关文章
- 简易祖玛--canvas
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- h5-10 canvas 简易祖玛
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- .NET里简易实现AOP
.NET里简易实现AOP 前言 在MVC的过滤器章节中对于过滤器的使用就是AOP的一个实现了吧,时常在工作学习中遇到AOP对于它的运用可以说是很熟练了,就是没想过如果自己来实现的话是怎么实现的,性子比 ...
- 在.Net中实现自己的简易AOP
RealProxy基本代理类 RealProxy类提供代理的基本功能.这个类中有一个GetTransparentProxy方法,此方法返回当前代理实例的透明代理.这是我们AOP实现的主要依赖. 新建一 ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- 自己来实现一个简易的OCR
来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- 用Go实现的简易TCP通信框架
接触到GO之后,GO的网络支持非常令人喜欢.GO实现了在语法层面上可以保持同步语义,但是却又没有牺牲太多性能,底层一样使用了IO路径复用,比如在LINUX下用了EPOLL,在WINDOWS下用了IOC ...
- .NET里简易实现IoC
.NET里简易实现IoC 前言 在前面的篇幅中对依赖倒置原则和IoC框架的使用只是做了个简单的介绍,并没有很详细的去演示,可能有的朋友还是区分不了依赖倒置.依赖注入.控制反转这几个名词,或许知道的也只 ...
随机推荐
- CPU时间分片、多线程、并发和并行
1.CPU时间分片.多线程? 如果线程数不多于CPU核心数,会把各个线程都分配一个核心,不需分片,而当线程数多于CPU核心数时才会分片. 2.并发和并行的区别 并发:当有多个线程在操作时,如果系统只有 ...
- 初级vector
标准库vector类型 #include<vector> using std::vector; vector为一个类模板. vector的初始化 vector<T> v1; v ...
- SpringMVC学习笔记一:采用注解式搭建简单springMVC环境
搭建的环境使用的是maven项目 项目目录树: 搭建环境使用的jar包,pom.xml文件 <project xmlns="http://maven.apache.org/POM/4. ...
- Nginx笔记总结二十:nginx索引目录配置
location / { autoindex on; autoindex_localtime on; }
- 在Docker内安装jenkins运行和基础配置
这里是在linux环境下安装docker之后,在doucer内安装jenkins --------------------docker 安装 jenkins---------------------- ...
- Python测试开发-浅谈如何自动化生成测试脚本
Python测试开发-浅谈如何自动化生成测试脚本 原创: fin 测试开发社区 前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...
- C++求解N阶幻方
由一道数学题的联想然后根据网上的做法瞎jb乱打了一下,居然对了代码精心附上了注释,有兴趣的童鞋可以看一看..不说了,上代码!(自认为结构很清晰易懂) 1234567891011121314151617 ...
- 01Java代码是怎么运行的
从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中.加载后的 Java 类会被存放于方法区(Method Area)中.实际运行时,虚拟机会执行方 ...
- e代驾狂野裁员 O2O逐渐恢复理智?
O2O逐渐恢复理智?" title="e代驾狂野裁员 O2O逐渐恢复理智?"> 近段时间以来,O2O行业堪称"哀鸿遍野",十分凄惨.巨头 ...
- 通俗易懂DenseNet
目录 写在前面 Dense Block与Transition Layer DenseNet网络架构与性能 理解DenseNet Plain Net.ResNet与DenseNet 参考 博客:博客园 ...