物理碰撞--js

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <title>test.html</title>
 5     <meta charset="UTF-8">
 6     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 7     <meta http-equiv="description" content="this is my page">
 8     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 9
10     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
11     <style>
12         #canvas{border:5px solid #111;background:black;}
13     </style>
14   </head>
15
16   <body>
17       <canvas id="canvas" width="960" height="460"></canvas>
18       <input type="button" onclick="addBall()" value="添加小球" />
19     <script type="text/javascript">
20         //画布-html5    canvas
21         var context = null;
22         var canvas = null;
23         window.onload = function(){
24             //获取画板
25             canvas = document.getElementById("canvas");
26             //获取权限 -- 上下文
27             context = canvas.getContext("2d");
28
29             setTimeout(drawBall,20);//在指定的毫秒数之后调用指定的函数或计算表达式
30         };
31
32         //装小球
33         var balls = [];
34         //x,y小球的坐标位置,dx 摩擦系数 dy 重力速度 radius 小球半径
35         function Ball(x,y,dx,dy,radius){
36             this.x = x;
37             this.y = y;
38             this.dx = dx;
39             this.dy = dy;
40             this.radius = radius;
41         }
42         function addBall(){
43          var radius = 20;
44          var ball = new Ball(random(canvas.width),random(canvas.height),2,1,radius);
45          balls.push(ball);
46         }
47         function drawBall(){
48             //清除画布
49             context.clearRect(0,0,canvas.width,canvas.height);
50             //开始画图
51             context.beginPath();
52             //把所有小球全部添加到画布中
53             for(var i = 0 ; i<balls.length;i++){
54                 var ball = balls[i];
55                 //确定 小球中心点的坐标
56                 ball.x += ball.dx;
57                 ball.y += ball.dy;
58
59 //                ball.dx *= 1;
60                 if(ball.y < canvas.height){
61                     ball.dy += 0.55;
62                 }
63
64                 //边界
65                 if(ball.x + ball.radius > canvas.width || ball.x - ball.radius < 0){
66                     ball.dx = -ball.dx;
67                 }
68                 //边界
69                 if(ball.y + ball.radius > canvas.height || ball.y - ball.radius < 0){
70                     ball.dy = -ball.dy;
71                 }
72                 context.beginPath();
73                 context.fillStyle = randomColor();
74                 context.lineWidth = 5;
75                 context.arc(ball.x,ball.y,ball.radius,0,2*Math.PI);
76                 context.fill();//填充北京颜色
77                 context.stroke();//描绘到画布中
78             }
79             setTimeout(drawBall,20);
80         }
81         function randomColor(){
82             var r = Math.floor(Math.random()*255);
83             var g = Math.floor(Math.random()*255);
84             var b = Math.floor(Math.random()*255);
85             return "rgb(" + r + "," + g + "," + b + ")";
86         };
87         function random(num){
88             return Math.floor(Math.random()*(num+1));
89         }
90     </script>
91   </body>
92 </html>
时间: 2024-10-22 08:57:29

物理碰撞--js的相关文章

unity3d研究1-物理碰撞OnCollision和非物理碰撞OnTrigge的区别

物理碰撞OnCollision,发生真实的碰撞效果(互撞被推开),实际是一个碰撞器 条件:两个物体都必须带有碰撞器(Collider),最少一个物体带有Rigidbody刚体. 1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器 2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器 3.MonoBehaviour.OnCollisionStay(Collisio

cocos2d-x 3.x 物理碰撞机制

最近又弄了物理引擎,写一下吧,下面有在其他博客学习到的知识,加上自己的理解,总结下. cocos2d-x 3.X 中全新的封装的物理引擎给了开发者最大的便捷,你不用再繁琐与各种物理引擎的细节,完全的封装让开发者可以更快更好的将物理引擎的机制添加到自己的游戏中,简化的设计是从2.0到3.X的一个质的飞跃. cocos2d-x 3.0+中的物理属性: 1.物理世界被集成到场景中,当你创建一个场景,你可以直接创建基于物理世界或者不使用物理世界的场景. 2.Node拥有它自己的body属性.(sprit

cocos2d-x 3.2 物理碰撞机制

cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发者最大的便捷,你不用再繁琐与各种物理引擎的细节,完全的封装让开发者可以更快更好的将物理引擎的机制添加到自己的游戏中,简化的设计是从2.0到3.0+的一个质的飞跃. 下面同样以一个小demo来展示一下物理引擎的运用,同时说一下我在运用物理引擎中遇到的一些小小的问题. cocos2d-x 3.0+中的物理属性: 1.物理世界被集成到场景中,当你创建一个场景,你可以直接创建基于物理世界或者不使用物理世界的场景. 2.Node拥有它自己的bod

Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题

好吧,事实上这篇也是暂时冒出来的,近期朋友要做个物理游戏,曾经做物理还是用box2d,呃.确实要花些功夫才干搞懂当中的精髓,可是听讲这套引擎又一次封装了一次.要easy非常多,所以就简单尝试了一下,感觉确实要简单不少,只是在这当中还是遇到了些问题,首先就来说说onContactBegin这个回调函数响应问题. 先说说情况.简单做了一个打砖块的游戏.前面一切都非常顺利,仅仅是做到碰撞检測的时候,发现回调函数弄死都不调用.開始我以为函数写错了,后来查了api.testCpp都没有错,在3.0的api

碰撞器与触发器[Unity]

请看原帖,移步:Unity3d碰撞检测中碰撞器与触发器的区别 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过. 物体发生碰撞的必要条件: 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 在unity3d中,能检测碰撞发生的

Unity3d碰撞检测中碰撞器与触发器的区别

一,要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动. 二,两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 三,在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器. 1>碰撞器:一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上,碰撞检测,但

iOS开发——高级篇——UIDynamic 物理引擎

一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞等现象 物理引擎的价值广泛用于游戏开发,经典成功案例是“愤怒的小鸟”让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏 知名的2D物理引擎Box2dChipmunk 2.使用步骤要想使用UIDynamic来实现物理仿真效果,大致的步骤如下

cocos2d-x快乐的做让人快乐的游戏3:cocos-2d 3.x中的物理世界

Cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的封装让开发人员能够更快更好的将物理引擎的机制加入?到自己的游戏中,简化的设计是从2.0到3.0+的一个质的飞跃.(假设用的2.x版本号的cocos2d-x,看前一篇文章box2d) 以下相同以一个小demo来展示一下物理引擎的运用,同一时候说一下我在运用物理引擎中遇到的一些小小的问题. Cocos2d-x 3.0+中的物理属性: 1.物理世界被集成到场景中,当你创建一个场景,你能够

construct2中对象的物理属性(Physics Behaviors)

Construct2游戏中经常需要给某些对象添加物理属性(Physics Behavior),下面详细描述了这个物理Physics属性. (物理运动只能发生在都带有物理属性的对象之间,如果有的对象不带有物理属性,那么就不会发生任何物理运动.) 参数: Immovable(禁止移动): 通常用于游戏场景的设置.比如为了防止带有重力属性的游戏地面掉落出游戏画面,或是受到撞击,这些场景就会旋转或是移动.通过设置Immovable参数来防止移动和旋转等运动,但是又可以参与游戏中的物理碰撞. Collis