js碰撞检测

这篇文章主要介绍了JS实现判断碰撞的方法,实例分析了通过js判断实体碰撞的技巧与相关应用,需要的朋友可以参考下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
 <head>  
  <title> demo </title>  
  <style type="text/css">  
  body{margin:0px;}  
    .main{position:relative;}  
    #f1{position:absolute; background:#FF0000; top:100px; left:100px; width:200px; height:200px; z-index:999}  
    #f2{position:absolute; background:#FFFF00; top:0px; left:0px; width:600px; height:150px;}  
  </style>  
 </head>  
 <body>  
 <div class="main">  
    <div id="f1"></div>  
    <div id="f2"></div>  
 </div>  
 <script type="text/javascript">  
    var o = document.getElementById("f1");  
    var d = document.getElementById("f2");  
    alert(impact(o, d));

function impact(obj, dobj) {  
        var o = {  
            x: getDefaultStyle(obj, ‘left‘),  
            y: getDefaultStyle(obj, ‘top‘),  
            w: getDefaultStyle(obj, ‘width‘),  
            h: getDefaultStyle(obj, ‘height‘)  
        }

var d = {  
            x: getDefaultStyle(dobj, ‘left‘),  
            y: getDefaultStyle(dobj, ‘top‘),  
            w: getDefaultStyle(dobj, ‘width‘),  
            h: getDefaultStyle(dobj, ‘height‘)  
        }

var px, py;

px = o.x <= d.x ? d.x : o.x;  
        py = o.y <= d.y ? d.y : o.y;  
  
        // 判断点是否都在两个对象中  
        if (px >= o.x && px <= o.x + o.w && py >= o.y && py <= o.y + o.h && px >= d.x && px <= d.x + d.w && py >= d.y && py <= d.y + d.h) {  
            return true;  
        } else {  
            return false;  
        }  
    }

function getDefaultStyle(obj, attribute) {  
        return parseInt(obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj, false)[attribute]);  
    }  
 </script>  
 </body>  
</html>

时间: 2024-11-15 15:00:02

js碰撞检测的相关文章

js实现圆形的碰撞检测

文章地址:https://www.cnblogs.com/sandraryan/ 碰撞检测这个东西写小游戏挺有用der~~~ 注释写的还挺全,所以就不多说了,看注释 这是页面结构.wrap存放生成的小球 box是用来检测的元素 <div class="wrap"> <!-- 用于做碰撞检测的一个元素 --> <div class="box"></div> </div> css: body { margin:

js原生碰撞检测

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> div{width:100px; height:100px; } #box{background:red; position:absolute; } #box1{background:green;position:absolute;top:3

Yomotsu 使用 THREE.js 创建的示例(Examples created by Yomotsu using THREE.js)

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Examples created by Yomotsu using THREE.js 基本立方体 basic cube 带纹理的基本立方体basi

一个简单用原生js实现的小游戏----FlappyBird

这是一个特别简单的用原生js实现的一个小鸟游戏,比较简单,适合新手练习 这是html结构 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="game"> <div id="b

Web3D编程总结——3D碰撞检测初探

自己动手写一个方法比分析他人的写的方法困难很多,由此而来的对程序的进一步理解也是分析别人的代码很难得到的. 一.先来几张效果图: 1.场景中有两个半径为1的球体,蓝色线段从球心出发指向球体的“正向” 2.物体被选中后改变纹理图片和透明度,可以使用“w.s.a.d.空格.ctrl”控制物体相对于物体的正向“前.后.左.右.上.下”移动,按住按键时间越长移动速度越快,绿色线段由球心指向物体运动方向,速度越快露出物体表面的部分越长,按“g”停止所有移动,再次点击物体取消选中状态. 3.可以选取多个物体

js原生捕鱼达人(三)--完结

先给分享下我写完的效果,github有点卡,我没有压缩代码,不过效果可以看到 https://jasonwang911.github.io/ 转载请注明'转载于Jason齐齐的博客http://www.cnblogs.com/jasonwang2y60/' 继续昨天的进行 11>添加金币   相同的创建了coin.js的文件 //添加金币的构造含函数 function Coin(type){ this.type=type; this.x=0; this.y=0; this.cur=0; this

原生js打飞机小游戏

最近为了巩固一下原生的知识,然后拿了一个js小游戏来入手.主要也是为了学习和练手. js代码如下: 1 window.onload = function(){ 2 var oBtn = document.getElementById('gameBtn'); 3 oBtn.onclick = function(){ 4 this.style.display = 'none'; 5 Game.init('div1');//把父级传进去 6 }; 7 }; 8 //创建Game单体 9 10 var

基于HTML5和JS实现的切水果游戏

切水果游戏曾经是一款风靡手机的休闲游戏,今天要介绍的就是一款网页版的切水果游戏, 由JavaSript和HTML5实现,虽然功能和原版的相差太大,但是基本的功能还是具备了,还是模仿的挺逼真,有一定的JavaSript水平的朋友,可以看看源代码,相信你的JavaSript水平会有很大的提升. /** * this file was compiled by jsbuild 0.9.6 * @date Fri, 20 Jul 2012 16:21:18 UTC * @author dron * @si

HTML5吃豆豆游戏开发实战(四)2d碰撞检测、重构-第二篇

今天下午在家没事,写代码.先总结一下学习HTML5和JS的一些经验,再来说游戏的事吧! 这完全是一个HTML5和JS的入门新手的见解,如果您和我一样是新手的话,欢迎交流,当然,高手如果不介意的话,帮小弟指点一二那就更好啦,谢谢,嘿嘿!入正题吧! 1.语法方面 1.1  JS关于数组的定义方法要注意: 比如:var walls = [new Wall(262,200,100,30),new Wall(662,60,30,400),new Wall(762,300,200,30)]; 这是定义一个墙