differ
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:A separation axis theorem collision library for Haxe.
[![Logo](docs/images/logo.png)](./index.html)

---
## What is differ?

A [Separating Axis Theorem](http://en.wikipedia.org/wiki/Hyperplane_separation_theorem) collision library for [haxe](http://haxe.org)

[ ![haxe](docs/images/haxe.png) ](http://haxe.org)

----

## Facts

- Implements Separating Axis Theorem, for collision detection.
- Supports convex polygons, circles, and rays.
- 2D only (for now).
- Includes a simple drawing interface for debugging shapes
- **COLLISION ONLY.** No physics/response - this is by design.
- Contributions welcome

## Quick look

**A simple collision example**

```haxe
    var circle = new Circle( 300, 200, 50 );
    var box = Polygon.rectangle( 0, 0, 50, 150 );

    box.rotation = 45;

    var collideInfo = Collision.shapeWithShape( circle, box );

    if(collideInfo != null) {
        //use collideInfo.separationX
        //    collideInfo.separationY
        //    collideInfo.normalAxisX
        //    collideInfo.normalAxisY
        //    collideInfo.overlap
    }
```

![](docs/images/differ-0.gif)
![](docs/images/differ-1.gif)
![](docs/images/differ-2.gif)
![](docs/images/differ-3.gif)

#### See tests/ for usage examples and tests

### Other notes

- **Not** framework specific
- [Original code ported from rocketmandevelopment blog](http://rocketmandevelopment.com/2010/05/19/separation-of-axis-theorem-for-collision-detection/)

### API documentation

https://snowkit.github.io/differ/

## Demos

- [Playable demo](https://snowkit.github.io/differ/demo/)

# Main Contributors

- [@underscorediscovery](https://github.com/underscorediscovery)
- [@Dvergar](https://github.com/Dvergar)
- [@PDeveloper](https://github.com/PDeveloper)

[view all contributors](https://github.com/snowkit/differ/graphs/contributors)

---

# History

**1.4.0 (Latest release, haxelib)**

- Fixes for newer haxe versions
- Fix Polygon.testRay ignoring 'into' parameter

**1.3.0**

The goal of this release is as follows : 
- Reduce the usage of Vector internally, simplifying the code to primitives
- Remove allocations, myriads of them the old code had that carried over
- Add ways to reuse allocated results for efficiency when querying
- Add more test/example cases
- Expose the alternative polygon vs shape overlaps to make better choices based on movement
- Move the code more forward to be internally consistent and maintainable
- Fix the bugs with the rays and add more useful infinite flags

All of this was achieved, with the following changes.

- **Refactor** continued clean up
    - remove all allocations in SAT2D, except for results if not provided
    - refactor away internal uses of `Vector`
    - remove superfluous use of `Vector` in the API
        + `ShapeDrawer`: `drawLine`,`drawPoint`
        + `Collision.pointInPoly`
- **Added** `Ray` infinite mode instead of boolean
    - Not infinite
    - Infinite from start position
    - Infinite in both directions
- **Added** `Rays` test in usage0
- **Added** ShapeCollision/RayCollision/RayIntersection
    - added `clone()`, `copy_from(other)`, `reset()`
- **Added** differ.math.Util
    - removes internal SAT2D use of the `Vector` class
- **Added** `into` argument for all internal and external calls
    - this reuses the existing instance for the result
    - all calls will always reset the collision result
    - all direct calls still return null as "no result"
    - added `Results` results cache helper
    - all plural calls return `Results`
- **Fixed** Bug in `testCircleVsPolygon`
    - When testing polygon vs circle values were flipped/wrong
- **Fixed** Bug in `rayVsRay` with a negative overlap
- **Removed** `Common` util class, it's internal to SAT2D and simplified now 
- **Removed** `drawVector` in `ShapeDrawer`, wasn't used (use `drawLine` if needed)

**1.2.0**

 The biggest change for sure, renamed `hxcollision` to `differ`
 Now that the library is getting more use its better to have a consistent name
 and to have a more explicit path. Think of "differ" as a diff tool for shapes/rays, 
 it tells you how shapes differ (i.e the separation).

 - **Added** ray collision information, rather than just true/false
 - **Added** ray vs ray intersection with info on overlap
 - **Added** more granular tests, that will expand further
    - New test case uses luxe https://luxeengine.com/
    - hxcollision/differ was born for luxe.collision, separate for any framework
 - **Refactor** continued separating code for future 3D vs 2D
    - moved all internal 2D code into differ.sat.SAT2D
    - moved all internal common code into differ.sat.Common
 - **Renamed** `Collision.test` to `Collision.shapeWithShape`
 - **Renamed** `Collision.testShapes` to `Collision.shapeWithShapes`
 - **Renamed** `Collision.rayShape` to `Collision.rayWithShape`
 - **Renamed** `Collision.rayShapes` to `Collision.rayWithShapes`
 - **Renamed** `Collision.rayRay` to `Collision.rayWithRay`
 - **Renamed** `Collision.rayRays` to `Collision.rayWithRays`
 - **Renamed** `Collision.rayRays` to `Collision.rayWithRays`
 - **Renamed** `data.CollisionData` to `data.ShapeCollision`
 - **Renamed** `data.RayCollisionData` to `data.RayCollision`
 - **Renamed** `data.RayIntersectionData` to `data.RayIntersection`
 - **Removed** `OpenFLDrawer`, will replace with gist or test later

**1.1.0**
 - **Added** documentation and clean up of code
 - **Renamed** `Vector2D` to `Vector` and cleaned up code to ONLY what is needed. This class is meant to be as small and easy to integrate as possible.   
 - **Refactor** for easier maintaining in embedded libraries   
 - **Renamed** `BaseShape` to `Shape`, continued refactoring
 - **Renamed** `Collision.testShapes` to `Collision.test`
 - **Renamed** `Collision.testShapeList` to `Collision.testShapes`
 - **Renamed** `Collision.rayCollision` to `Collision.ray`
 - **Fixed** various bugs in collisions
 - **Fixed** `separation`/`unitVector` behaviour (signs bugs)
 - **Fixed** bug with `Polygon`/`Polygon` collisions not returning best vectors 
 - **Fixed** bug where you couldn't `beginFill` using `OpenFLDrawer`
 - **Fixed** `collisionData` in `CheckCircles`, shape2 wasn't assigned.
 - **Fixed** `separation`/`unitVector` is now bound to shape1 as it should be
 - **Added** 2 samples (usage2 & usage3)
 - **Added** `drawVector` in `OpenFLDrawer` showing vector direction
 - **Added** `drawShape` in `ShapeDrawer`, will cast proper types and call appropriate drawing functions.

**1.0.4**
 - **Renamed** `Polygon.normalPolygon` to `Polygon.create`
 - **Added** `testShapeList` for testing one shape with many
 - **Added** changes to the test to display the `unitVector` response (soon to be renamed also)
 - **Refactor** to more integration friendly api, and more logical order of arguments for shapes. 
 - **Fixed** rotation on the base shapes absolute (submitted by @grapefrukt). 
 - **Added** name and data flag to `BaseShape`

**1.0.3**
 - **Fixed** bug in circle vs polygon, when polygon was rotated.
 - **Added** line raycast with collision shapes
 - **Added** a custom `ShapeDrawer` class, for drawing the shapes in a non specific way. 
 - **Update** to latest haxelib revisions
 - Removed dependency on OpenFL, now completely standalone 

**1.0.2**
 - uncommitted internal fixes

**1.0.1**
 - **Added** an option for `Polygon.rectangle()` to be non-centered

**1.0.0**
 - Initial project pull and compile/port, functional

---

 

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。