public void draw(GameTimer gameTime, Graphics2D graphics)
	{
		// Get the font.
		Font font = _ScreenManager.getMenuFont();
		Font textFont = _ScreenManager.getTextFont();

		// The position of the menu and text.
		Vector2 position = new Vector2(_MenuPosition.x, _MenuPosition.y);
		Vector2 textPosition = new Vector2(_TextPosition.x, _TextPosition.y);

		// Make the menu slide into place during transitions, using a
		// power curve to make things look more interesting (this makes
		// the movement slow down as it nears the end).
		float transitionOffset = (float) Math.pow(_TransitionPosition, 2);

		if (_ScreenState == ScreenState.TransitionOn)
		{
			position.x -= transitionOffset * 512;
			textPosition.x += transitionOffset * 512;
		}
		else
		{
			position.x += transitionOffset * 1024;
			textPosition.x -= transitionOffset * 1024;
		}

		// Draw each menu entry in turn.
		for (int i = 0; i < _MenuEntries.size(); i++)
		{
			MenuEntry menuEntry = _MenuEntries.get(i);
			boolean isSelected = getIsActive() && (i == _SelectedEntry);
			menuEntry.draw(this, position, isSelected, gameTime, graphics);

			position.y += menuEntry.getHeight(this);
		}

		// Draw the menu title.
		Vector2 titlePosition = new Vector2(_TitlePosition.x, _TitlePosition.y);
		Vector2 titleOrigin = Vector2.divide(new Vector2(font.getStringBounds(_MenuTitle, graphics.getFontRenderContext())), 2);
		Color titleColor = new Color(62, 69, 71, getTransitionAlpha());
		float titleScale = 1f;

		titlePosition.y -= transitionOffset * 100;

		// Create a transformation for the text.
		AffineTransform transform = new AffineTransform();
		transform.scale(titleScale, titleScale);
		transform.translate(titlePosition.x - titleOrigin.x, titlePosition.y - titleOrigin.y);

		// Draw the text.
		Helper.drawString(_MenuTitle, font, transform, titleColor, graphics);

		// The about text.
		Color textColor = new Color(250, 250, 250, getTransitionAlpha());
		float textScale = 1.5f;

		// The loop data.
		int index = 0;
		int rowStart = 0;
		boolean done = false;

		while (!done)
		{
			// When to make a new row.
			if (textFont.getStringBounds(_Text.substring(rowStart, index), graphics.getFontRenderContext()).getWidth() > 300)
			{
				// Get the start of the next row.
				index = _Text.substring(index).indexOf(" ") + 1 + index;
				if (_Text.substring(index).indexOf(" ") == -1)
				{
					index = _Text.length();
				}

				// Position the text correctly.
				textPosition.y += 15;
				Vector2 textOrigin = Vector2.divide(new Vector2(textFont.getStringBounds(_Text.substring(rowStart, index), graphics.getFontRenderContext())), 2);

				// Create a transformation for the text.
				transform = new AffineTransform();
				transform.scale(textScale, textScale);
				transform.translate(textPosition.x - textOrigin.x, textPosition.y - textOrigin.y);

				// Draw the text.
				Helper.drawString(_Text.substring(rowStart, index), textFont, transform, textColor, graphics);

				// Increment the row.
				rowStart = index;
			}
			else
			{
				index++;

				if (index > _Text.length())
				{
					done = true;
				}
			}

		}
	}