public void start() {
		ImageLoader.init();
		Game.init();
		game = Game.getInstance();

		final int DELTA_TARGET_NANOS = DELTA_TARGET * 1000 * 1000;

		while (true) {
			long timeStart = System.nanoTime();

			BufferStrategy bs = getBufferStrategy();
			if (bs == null) {
				createBufferStrategy(3);
				continue;
			}

			tick();

			graphics2d.setGraphics(bs.getDrawGraphics());
			render();

			if (bs != null)
				bs.show();

			long timePassed = System.nanoTime() - timeStart;
			if (timePassed < DELTA_TARGET_NANOS) {
				long sleepTime = DELTA_TARGET_NANOS - timePassed;

				long millis = sleepTime / (1000 * 1000);
				int nano = (int) (sleepTime % (1000 * 1000));
				// System.out.println(millis + " : " + nano);

				try {
					Thread.sleep(millis, nano);
				} catch (InterruptedException e) {
				}
			}

			cpuWorkload = (float) timePassed / DELTA_TARGET_NANOS;
		}
	}