碰撞检测实现

判断两个元素是否碰撞。

在以下四种情况下两个元素是不会碰撞的:

1.元素1的底部 < 元素2的顶部

2.元素1的顶部 > 元素2的底部

3.元素1的左边 >元素2的右边

4.元素1的右边 < 元素2的左边

那么在不符合这四种情况的时候两个元素就是碰撞的。

function collision(obj1 , obj2){
      var T1 = obj1.offsetTop,
      B1 = T1 + obj1.offsetHeight,
      L1 = obj1.offsetLeft,
      R1 = L1 + obj1.offsetWidth;

     var T2 = obj2.offsetTop,
     B2 = T2 + obj2.offsetHeight,
     L2 = obj2.offsetLeft,
     R2 = L2 + obj2.offsetWidth;

    return !(R1 < L2 || B1 < T2 || L1 > R2 || T1 > B2);

 }
时间: 2024-12-18 00:32:18

碰撞检测实现的相关文章

Cocos2d-x3.2 碰撞检测--圆形

//GameScene.h #include "cocos2d.h" USING_NS_CC; class GameScene : public cocos2d::Layer { public:     static cocos2d::Scene* createScene();          virtual bool init();          virtual bool onTouchBegan(Touch *touch, Event *unused_event);     

Physics 碰撞检测回调方法出错或者没有效果解决方法

1.碰撞检测回调方法编译出错; auto *listener = EventListenerPhysicsContact::create(); listener->onContactBegin = CC_CALLBACK_1(HelloWorld::onContactBegin,this); 在3.0rc版本中回调函数的参数变为一个,不能使用原来的两个参数; bool HelloWorld::onContactBegin(PhysicsContact& contact) { auto spr

简单圆形碰撞检测

整理以前的文件时看到之前写过的圆形的碰撞检测,简单记录下. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="cav" width="500" height=&quo

Egret 矢量绘图、遮罩、碰撞检测

矢量绘图: 1. 为矢量绘图绘制外边 - graphics.lineStype() private createGameScene():void { console.log("Runtime start."); var myShape:egret.Shape = new egret.Shape(); myShape.graphics.lineStyle(10, 0x00ff00, 1); myShape.graphics.beginFill(0xff0000, 1); myShape.

显示对象的像素级碰撞检测

mc2.gotoAndStop(1); var bmd1 = new BitmapData(mc1.width, mc1.height, true, 0); bmd1.draw(mc1); var bmd2 = new BitmapData(mc2.width, mc2.height, true, 0); bmd2.draw(mc2); stage.addEventListener(Event.ENTER_FRAME,frameFunc); function frameFunc(e:Event)

Cocos2d-x Tiled地图编辑器(二)精灵走动起来、碰撞检测

图: 程序代码: 头文件声明函数及变量 void registerWithTouchDispatcher(void); bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); void setViewpointCenter(CCPoint position) ; void setSpritePoint(CCPoint position) ;

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

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

HTML5实现3D和2D可视化QuadTree四叉树碰撞检测

QuadTree四叉树顾名思义就是树状的数据结构,其每个节点有四个孩子节点,可将二维平面递归分割子区域.QuadTree常用于空间数据库索引,3D的椎体可见区域裁剪,甚至图片分析处理,我们今天介绍的是QuadTree最常被游戏领域使用到的碰撞检测.采用QuadTree算法将大大减少需要测试碰撞的次数,从而提高游戏刷新性能,本文例子基于HT for Web的Canvas拓扑图和WebGL的3D引擎组件,通过GraphView和Graph3dView共享同一数据模型DataModel,同时呈现Qua

旋转矩形碰撞检测 OBB方向包围盒算法

在cocos2dx中进行矩形的碰撞检测时需要对旋转过的矩形做碰撞检查,由于游戏没有使用Box2D等物理引擎,所以采用了OBB(Oriented bounding box)方向包围盒算法,这个算法是基于SAT(Separating Axis Theorem)分离轴定律的. 分离轴定律:两个凸多边形物体,如果我们能找到一个轴,使得两个在物体在该轴上的投影互不重叠,则这两个物体之间没有碰撞发生,该轴为Separating Axis.也就是说两个多边形在所有轴上的投影都发生重叠,则判定为碰撞:否则,没有

windows编程:画线,简单的碰撞检测,简单的帧率锁定

#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <windowsx.h> #include <mmsystem.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define WINDOW_CLASS_NAME "WINCLASS1" #define WINDOW_WIDTH