public void render(GraphicsContext gc) {
		// save original coordinate system before transforming
		gc.save();

		double renderX = x.get();
		double renderY = y.get();
		final double renderW = frameWidth.get();
		final double renderH = frameHeight.get();

		// first check for rotation
		if (rotationInDegrees != 0) {
			int halfW = width.get() / 2;
			int halfH = height.get() / 2;

			// move origin to render location
			gc.translate(renderX, renderY);
			// move to the center of the sprite
			gc.translate(halfW, halfH);
			// rotate coordinate system
			gc.rotate(rotationInDegrees);
			// adjust render location
			renderX = -halfW;
			renderY = -halfH;
		}

		// second check for scaling
		if (scaleWidth.get() != 1 || scaleHeight.get() != 1) {
			gc.translate(renderX, renderY);
			gc.scale(scaleWidth.get(), scaleHeight.get());
			renderX = 0;
			renderY = 0;
		}

		final int sourceX = (int) (currentColumn * frameWidth.get());
		final int sourceY = (int) (currentRow * frameHeight.get());

		gc.setGlobalAlpha(transparency);

		if (isFlippedHorizontal)
			gc.drawImage(texture, sourceX + renderW, sourceY, -renderW, renderH, renderX, renderY, renderW, renderH);
		else
			gc.drawImage(texture, sourceX, sourceY, renderW, renderH, renderX, renderY, renderW, renderH);

		gc.restore();
	}