Java 2D Game Engine Development - Solving Concurrency Issues and Moving with Direction