AA 碰撞体 就是将所有的物体设置为矩形框进行碰撞计算。下面是代码

  1. /*
  2. * Copyright (C) 2010 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. *      http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.replica.replicaisland;
  17. /**
  18. * An Axis-Aligned rectangular collision volume.  This code treats other volumes as if they are
  19. * also rectangles when calculating intersections.  Therefore certain types of intersections, such
  20. * as sphere vs rectangle, may not be absolutely precise (in the case of a sphere vs a rectangle,
  21. * for example, a new rectangle that fits the sphere is used to perform the intersection test, so
  22. * there is some potential for false-positives at the corners).  However, for our purposes absolute
  23. * precision isn't necessary, so this simple implementation is sufficient.
  24. */
  25. public class AABoxCollisionVolume extends CollisionVolume {
  26. private Vector2 mWidthHeight;
  27. private Vector2 mBottomLeft;
  28. public AABoxCollisionVolume(float offsetX, float offsetY, float width, float height) {
  29. super();
  30. mBottomLeft = new Vector2(offsetX, offsetY);
  31. mWidthHeight = new Vector2(width, height);
  32. }
  33. public AABoxCollisionVolume(float offsetX, float offsetY, float width, float height,
  34. int hit) {
  35. super(hit);
  36. mBottomLeft = new Vector2(offsetX, offsetY);
  37. mWidthHeight = new Vector2(width, height);
  38. }
  39. @Override
  40. public final float getMaxX() {
  41. return mBottomLeft.x + mWidthHeight.x;
  42. }
  43. @Override
  44. public final float getMinX() {
  45. return mBottomLeft.x;
  46. }
  47. @Override
  48. public final float getMaxY() {
  49. return mBottomLeft.y + mWidthHeight.y;
  50. }
  51. @Override
  52. public final float getMinY() {
  53. return mBottomLeft.y;
  54. }
  55. /**
  56. * Calculates the intersection of this volume and another, and returns true if the
  57. * volumes intersect.  This test treats the other volume as an AABox.
  58. * @param position The world position of this volume.
  59. * @param other The volume to test for intersections.
  60. * @param otherPosition The world position of the other volume.
  61. * @return true if the volumes overlap, false otherwise.
  62. */
  63. @Override
  64. public boolean intersects(Vector2 position, FlipInfo flip, CollisionVolume other,
  65. Vector2 otherPosition, FlipInfo otherFlip) {
  66. final float left = getMinXPosition(flip) + position.x;
  67. final float right = getMaxXPosition(flip) + position.x;
  68. final float bottom = getMinYPosition(flip) + position.y;
  69. final float top = getMaxYPosition(flip) + position.y;
  70. final float otherLeft = other.getMinXPosition(otherFlip) + otherPosition.x;
  71. final float otherRight = other.getMaxXPosition(otherFlip) + otherPosition.x;
  72. final float otherBottom = other.getMinYPosition(otherFlip) + otherPosition.y;
  73. final float otherTop = other.getMaxYPosition(otherFlip) + otherPosition.y;
  74. final boolean result = boxIntersect(left, right, top, bottom,
  75. otherLeft, otherRight, otherTop, otherBottom)
  76. || boxIntersect(otherLeft, otherRight, otherTop, otherBottom,
  77. left, right, top, bottom);
  78. return result;
  79. }
  80. /** Tests two axis-aligned boxes for overlap. */
  81. private boolean boxIntersect(float left1, float right1, float top1, float bottom1,
  82. float left2, float right2, float top2, float bottom2) {
  83. final boolean horizontalIntersection = left1 < right2 && left2 < right1;
  84. final boolean verticalIntersection = top1 > bottom2 && top2 > bottom1;
  85. final boolean intersecting = horizontalIntersection && verticalIntersection;
  86. return intersecting;
  87. }
  88. /** Increases the size of this volume as necessary to fit the passed volume. */
  89. public void growBy(CollisionVolume other) {
  90. final float maxX;
  91. final float minX;
  92. final float maxY;
  93. final float minY;
  94. if (mWidthHeight.length2() > 0) {
  95. maxX = Math.max(getMaxX(), other.getMaxX());
  96. minX = Math.max(getMinX(), other.getMinX());
  97. maxY = Math.max(getMaxY(), other.getMaxY());
  98. minY = Math.max(getMinY(), other.getMinY());
  99. } else {
  100. maxX = other.getMaxX();
  101. minX = other.getMinX();
  102. maxY = other.getMaxY();
  103. minY = other.getMinY();
  104. }
  105. final float horizontalDelta = maxX - minX;
  106. final float verticalDelta = maxY - minY;
  107. mBottomLeft.set(minX, minY);
  108. mWidthHeight.set(horizontalDelta, verticalDelta);
  109. }
  110. }

Android游戏框架之基础之AA碰撞系统的更多相关文章

  1. Android游戏框架Libgdx使用入门

    转载自:http://blog.csdn.net/cping1982/article/details/6176191 Libgdx作者博客:http://www.badlogicgames.com/ ...

  2. 识货的拿走:Android游戏框架解读之总体结构

    Android游戏开发的框架图无偿奉上.

  3. 5个最佳的Android测试框架(带示例)

    谷歌的Android生态系统正在不断地迅速扩张.有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸.ROM /固件.芯片组以及等等等等,层出不穷.于是乎,对于Android开发人员而言 ...

  4. 八款常见的Android游戏引擎

    原文地址:http://bbs.csdn.net/topics/380203732 1.Angle  Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL  ...

  5. Android 游戏教程让人物动起来

    在这里给大家分享Android游戏教程怎样让人物动起来,话不多说了,直接进入正题. 一. 准备工作     首先要准备好要使用的人物动作图和地形图.把它分割成16个不同的动作,循环播放同一行的4个不同 ...

  6. 记录一下八款开源 Android 游戏引擎

    记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...

  7. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  8. 八款开源 Android 游戏引擎 (巨好的资源)

    转载地址:http://software.intel.com/zh-cn/blogs/2012/01/13/android-4 初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道 ...

  9. Android 八款开源 Android 游戏引擎

    原文地址 本文内容 Angle Rokon LGame AndEngine libgdx jPCT Alien3d Catcake 最近无意间看到一篇关于 Android 搜索引擎的文章,于是搜索了, ...

随机推荐

  1. JavaScript中的Function(函数)对象

    1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4. ...

  2. iOS学习笔记之Category

    iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...

  3. SQL Server 最小化日志操作解析,应用[手稿]

    Sql Server 中数据库在BULK_LOGGED/SIMPLE模式下的一些操作会采用最小化日志的记录方式,以减小tran log落盘日志量从而提高整体性能. 这里我简单介绍下哪些操作在什么样的情 ...

  4. First step of using junit---------Software Testing Lab 1---2016.03.18

    1. Install junit a)      Download “junit.jar” b)      In eclipse, Windows->Preferences->Java-& ...

  5. strtol()函数

    #include <stdlib.h>#include <stdio.h> int main(){ char a[] = "100"; char b[] = ...

  6. Determining IP information for eth0... failed; no link present. Check cable?

    在RedHat下重启网络,service network restart之后,出现问题 Determining IP information for eth0... failed; no link p ...

  7. InfiniBand

    Mellanox InfiniBand卡线缆性能延迟性测试程序源码,C源码实现操作mysql库,实现简单的增删改查,代码当前用的是增插入20000条数据 具体见源码 #include <mysq ...

  8. 您的IP不在有效范围 ip:port为 [10.15.22.15]

  9. 安装php5.5

    安装php5.5 ./configure --prefix=/usr/local/php5.5.14/ --with-apxs2=/usr/local/apache2.2.27/bin/apxs -- ...

  10. JavaScript学习——内置属性

    在js中,几乎所有的对象都是同源对象,都继承Object对象.对象的内置属性指的是它们作为Object实例所具有的属性,这些属性通常反映对象本身的基本信息和数据无关.因此我们称它们为元属性.这些属性通 ...