Version 3.3.0

William Bittle // Apr 15, 2018 7:58:19 PM

This release was focused on Java 9, OSGi, and Maven but also includes some behavior changes and performance improvements.

For those just using the library, the behavior changes to be aware of are:

  • The GJK algorithm has changed slighty.  It now exits after N number of iterations.  This has been changed to ensure that the algorithm doesn’t run forever in some rare instances.  If you need to go back to the original behavior you can set the maximum number of iterations to Integer.MAX_VALUE, but it’s not recommended.
  • The ContactListener.sensed method is deprecated now and is no longer being called.  Instead, you will get notifications of sensed contacts through the other methods (begin, persist, etc.). This was done so that sensed contacts have the same lifecycle as normal contacts.  There’s a flag on the Contact argument that flags the contact as a sensor contact.
  • Some of the ContactListener methods should return true or false, indicating whether the contact should be solved or not.  The behavior here has changed a bit.  Before 3.3.0 the processing of that contact would halt whenever false was returned and drop the contact.  The new behavior is that the contact proceeds as normal through the pipeline, but is just disabled from contact resolution.  The effect is the same, apart from the fact that all caching information and the contact’s state is retained.

Version 3.2.4

William Bittle // May 2, 2017 4:36:39 AM

This is a maintenance release to fix the issue where the a Joint removed from a World cannot be added back or to a different world due to an internal member not being cleared.

Version 3.2.3

William Bittle // Sep 4, 2016 8:41:14 PM

This release fixes issues with the getRadius(Vector2) method for the Slice, Capsule, Ellipse, and HalfEllipse shapes under local rotation and fixes the detect(AABB) method in the Sap broadphase.

Sadly, the getRadius(Vector2) method for the Ellipse classes boils down to a maximization/root finding problem.  Thankfully, the method should be called rarely so should have negligible performance impact.

Version 3.2.2

William Bittle // Jun 20, 2016 5:49:41 AM

This release is primarily for a new collision shape called Link. This shape extends the existing Segment shape and provides for smooth sliding across chains of Links.

There were some minor fixes and code clean up as well.

Version 3.2.1

William Bittle // Nov 24, 2015 3:38:22 AM

This is a maintenance release to fix a few critical bugs in the Polygon, Rectangle, and Segment classes for local rotations (see this post for details).

This release also contains some small enhancements (a few new methods) to some of the joints and a complete rewrite of all the joint class javadoc documentation.  The documentation should be much easier to read and should explain common use.

Version 3.2.0

William Bittle // Oct 1, 2015 6:00:06 AM

The primary goals for this release were performance enhancements and API clean up.  It took a lot longer than I had expected but I’m very happy with the results.  Highlights include improvements in the performance of collision detection and ray casting operations and a much cleaner public API and more thorough javadoc comments.Turbo Meme

The API has been changed a good bit and you’ll find some breaking changes.  Most, if not all, should be simple find/replace changes, the behavior should remain the same.  Those of note are:

  1. Body.setMass() was deprecated.  Use Body.setMass(MassType) instead.
  2. Mass.Type was renamed to MassType.
  3. MouseJoint was renamed to PinJoint.

All this got me thinking of the old days of the Turbo button which funny enough did the opposite of what you’d think…


dyn4j Moved to GitHub

William Bittle // Mar 14, 2015 7:07:35 AM

Due to Google’s decision to drop Google Code, I’ve moved the project to GitHub.  In truth, I’ve been contemplating this for a while now, but have had reservations about lost version history.  I feel this will help others contribute bug fixes and allow them to create their own forks and branches easier than before.

I haven’t fully check the revision history, but it looks like everything came over as expected.  I had to manually move all the wiki pages, but I was planning to do this anyway as well.  You can find them under Documentation on

JogAmp Release 2.3.0

Sven // Mar 12, 2015 12:00:36 PM

Release 2.3.0 has been published:

The test applets.

Overview of notable fixed bugs:


introducing API CHANGES.
It CAN NOT be used as a binary/jar drop-in replacement.

API Changes
Extracted from our GlueGen and JOGL semantic versioning unit tests!

See Semantic Version Numbers


Version 3.1.11

William Bittle // Jan 31, 2015 9:28:24 PM

This is a maintenance release of dyn4j that includes a bug fix for a StackOverflowException thrown from the raycast(Ray, double, boolean, boolean, List) method.  This release also includes some very minor performance tweaks. See the change detail in the release notes.

The Sandbox app was updated to fix a bug in the Java code exporter (Rays were not being exported).

Version 3.1.10

William Bittle // Jul 20, 2014 6:53:26 PM

This is a maintenance release of dyn4j that includes some major bug fixes.  See the change detail in the release notes.

The Sandbox app was not updated in this release.