Предыдущая Следующая
/// <summary>
/// Рисуем заставку
/// <summary>
public void DrawScreen(SpriteBatch spriteBatch, GraphicsDeviceManager graphics, int x, int y, GameTime gameTime)
{
Рисуем на экране все двухмерные изображения.
graphics.GraphicsDevice.Clear(Color.DarkGreen); spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
Название игры ставим по ширине в самый центр экрана. По высоте опускаем изображение от верхней части экрана на тридцать пикселей.
342 Последние штрихи
spriteBatch.Draw(title, new Vector2(x /2 - title.Width/2, 30), Color.White);
Футбольное поле ставим четко в центр экрана.
spriteBatch.Draw(screen, new Vector2(x/2 - screen.Width/2, y/2 — screen.Height/2), Color.White);
Надпись «Нажмите - А» по ширине экрана находится в самом центре, а по высоте приподнята на тридцать пикселей от нижней части экрана.
spriteBatch.Draw(enter, new Vector2(x / 2 - enter.Width / 2, y - 30 — enter.Height), Color.White); for (int i = 0; hole.Length > i;
{
spriteBatch.Draw(hole[i], position[i], Color.White);
}
spriteBatch.End();
Теперь пришло время вывести на экран мяч.
graphics.GraphicsDevice.RenderState.DepthBufferEnable = true;
Позиция глаз для мячика удалена на 230 пикселей. Таким образом, мы удалили мяч от себя и в то же время уменьшили его в размерах. При желании можно сам мяч уменьшить, например, в 3ds Max, и тогда позиция камеры может быть намного меньше, вплоть до единичного значения по оси Z. Тут все зависит от физического размера самой модели.
view = Matrix.CreateLookAt(new Vector3(0.0f, 0.0f, 230.0f), Vector3.Zero, Vector3.Up);
proj = Matrix.CreatePerspectiveFieldOfView(FOV, aspectRatio, nearClip, farClip);
Переменная angle получает прошедшее время за один такт, которое мы умножаем на взятую с неба цифру 3.0f. Здесь цифра может быть любой, но меньшее значение всегда соответствует меньшей скорости вращения, а большая цифра -большей скорости вращения модели.
angle += (float)(gameTime.ElapsedGameTime.TotalSeconds * 3.0f);
Затем для вращения мячика именно по оси Y используется метод CreateRotationY(), который возвращает матрицу вращения по оси Y.
rotationMatrixY = Matrix.CreateRotationY((float)angle);
Если вы вспомните главу 15, где мы разбирали основы программирования трехмерной графики и, в частности, раздел, связанный с матрицей вращения по оси Y, то вам сразу станет понятно, как работает метод CreateRotationY().
Заставки Помощь, Об игре и Книги 343
Для того чтобы все установки вращения вступили в силу, нужно умножить матрицу вращения на матрицу трансляции и сохранить итоговый результат в мировой матрице. Предыдущая Следующая
|