多物体碰撞

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="智能社 - zhinengshe.com" />
<meta name="copyright" content="智能社 - zhinengshe.com" />
<title>智能社 - www.zhinengshe.com</title>
<style>
div{ position:absolute;left:0;top:0; width:100px; height:100px; background:green;}
</style>
<script>
window.onload = function(){
    var oDiv1 = document.getElementById("div1");
    var aDiv  = document.getElementsByTagName("div");
    for(var i = 0; i < aDiv.length; i++){
        drag(aDiv[i]);
    }

    function drag(oDiv1){
        oDiv1.onmousedown = function(ev){
            var oEvent = ev || event;
            var disX = oEvent.clientX - oDiv1.offsetLeft;
            var disY = oEvent.clientY - oDiv1.offsetTop;

            document.onmousemove = function(ev){
                var oEvent = ev || event;

                for(var i = 0; i < aDiv.length; i++){
                    if(oDiv1 == aDiv[i]) continue;
                    if(collTest(oDiv1,aDiv[i])){
                        aDiv[i].style.background = "red";
                    } else {
                        aDiv[i].style.background = "green";
                    }
                }

                oDiv1.style.left = oEvent.clientX - disX + "px";
                oDiv1.style.top  = oEvent.clientY - disY + "px";

            };

            document.onmouseup = function(){
                document.onmousemove = null;
                document.onmouseup = null;
                oDiv1.releaseCapture && oDiv1.releaseCapture();
            };
            oDiv1.setCapture && oDiv1.setCapture();
            return false;

        };

    }

    function collTest(obj1,obj2){
        var l1 = obj1.offsetLeft;
        var t1 = obj1.offsetTop;
        var r1 = l1 + obj1.offsetWidth;
        var b1 = t1 + obj1.offsetHeight;

        var l2 = obj2.offsetLeft;
        var t2 = obj2.offsetTop;
        var r2 = l2 + obj2.offsetWidth;
        var b2 = t2 + obj2.offsetHeight;

        if(r1 < l2 || b1 < t2 || l1 > r2 || t1 > b2){//没碰到
            return false;
        } else {
            return true;
        }
    }

};

</script>
</head>

<body>

<div id="div1"></div>
<div style="left:200px;top:100px;"></div>
<div style="left:400px;top:100px;"></div>
<div style="left:600px;top:100px;"></div>
<div style="left:800px;top:100px;"></div>
<div style="left:200px;top:400px;"></div>

<div style="left:400px;top:400px;"></div>
<div style="left:600px;top:400px;"></div>
<div style="left:800px;top:400px;"></div>

</body>
</html>
时间: 2024-08-12 16:23:40

多物体碰撞的相关文章

降维检测物体碰撞

最近了解了一种用 扫描线算法检测碰撞 的流程 原来不是叫扫描线算法... 拿 2D 游戏,游戏中的物体都是 AABB 盒来说(3D 游戏也是可以用这种方式的.2D 游戏分成 x.y 两个维度,3D 分成 x.y.z 三个维度) 1 首先以 x 轴 方向列一条直线 line,将所有的物体都投影到该直线上,于是每个物体在 line 上都映射成一条线段,有 起点 start.终点 end. 2 将这些数据存成一个结构体 struct,包含下面字段: startPos.endPos.objectId 3

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

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

Unity的物理引擎是如何实现碰撞的呢?

物理引擎不允许两个碰撞器重叠,当两个或多个物体碰撞时,Unity会根 据他们的旋转速度计算碰撞效果.计算主要根据物体的碰撞器是静止的还 是动态的.物体是不移动的,例如,墙,地面,院子里的喷池等.动态物 体是移动的,例如玩家控制的球,汽车.当计算碰撞时,静态物体不会被 影响,而动态物体会被影响.例如动态的球碰到“静态”的方块时球被弹 开,而方块不受影响.物理引擎有“碰撞器”重叠发生时,物理引擎孩子 计算碰撞器体积,并追踪碰撞器重叠,但不会在碰撞重叠的物体上体现出 来,因为这不叫碰撞.我们把碰撞器放

unity3d研究1-点击选中物体

方法1:OnMouseDown()只针对脚本挂载的物体有效 首先,要给 物体加上 碰撞器Collider 然后在物体脚本上加入 void OnMouseDown()//只针对脚本挂载的物体有效 { Debug.Log("jiance"); } 方法2:检测从屏幕发出的射线与物体发生碰撞,而这个发生碰撞的物体就是你选中的物体. 首先,要给 物体加上 碰撞器Collider 然后在物体脚本上加入 void MobilePick() { if (Input.touchCount != 1 )

libgdx学习记录21——Box2d物理引擎之碰撞Contact、冲量Impulse、关节Joint

Box2d中,物体可以接受力(Force).冲量(Impulse)和扭矩(Torque).这些物理元素都能改变物体的运动形式,并且默认都会唤醒物体,当然只是针对动态物体. 力是一个持久的效果,通过Box2d内置的积分器实现运动变化. 冲量是一个瞬时效果,能立马改变其效果. 主要函数: body.applyLinearImpulse( Vector2 impulse, Vector2 position, boolean wakeup ) 第一个参数表示冲量,包含x和y方向的大小. 第二个参数表示施

Unity3DGUI:刚体碰撞及消息传递

刚体间碰撞:OnCollisionEnter()方法只能写在碰撞主动方的js里 下图为不同特性物体碰撞,Collision碰撞式信息传递是否可用 触发碰撞模式:OnTriggerEnter()方法只能写在只能写在碰撞主动方的js里,另外碰撞的物体 is Trigger 需要勾选 下图为不同特性的物体间碰撞,Trigger触发式信息传递是否可用

cocos2d-x 3.2 物理碰撞机制

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

Unity3D 游戏的碰撞

首先创建两个精灵,然后都绑定上碰撞方法(这个是在上一篇文章的基本上): 所以添加了差不多就能够实现物体碰撞了: 接下来技术写代码,让碰撞的时候进行触发: 这样就能在碰撞的时候,触发碰撞事件 //检测碰撞会执行此方法 void OnCollisionEnter2D(Collision2D coll) { if(coll.collider.gameObject.name == "bg_1") { Application.LoadLevel("game"); } //if

Unity3D实践系列06,球体撞击物体游戏

本篇实现一个球体在固定区域移动撞击Cube的游戏. 首先有1个Plane当作地面,1个Sphere当作球体,4个Cube当作墙,12个Cube当作被撞击物体,另外还有球体的撞击计算,在撞击的过程适时显示撞击的球体数,12个Cube被撞击后提示游戏结束. 创建项目,创建背景和球 创建一个项目,名称为"MyRollBall",选择项目所在文件,选择"3D"项,点击"Create project". 点击"File"菜单下的&quo