Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Урок 1. Пишем первое приложение с XNA 3.0
Это первый урок из серии уроков по XNA, поэтому он самый простой, и я не думаю, что те, кто работал с MDX (Managed DirectX) найдут здесь что-то необычное. Прошу меня не винить, если вам что–то не нравиться в моем коде или статье, я средний программист и просто у меня нашлось время разобраться в XNA и написать пару статей.

Что предполагается разобрать и сделать на этом уроке:
  • подключить сборки XNA Framework,
  • создать пустое приложение с закрашиванием фона
  • реализовать полноэкранный режим (fullscreen).

Первым делом создайте пустой проект. Сейчас вы должны подключить сборки XNA Framework. Для этого нажмите правой кнопкой мыши на References и нажмите Add References. Выберите Microsoft.XNA.Framework и Microsoft.XNA.Framework.Game.

Добавьте файл класса и придумайте ему, какое-нибудь название, например, “Simple.cs”. Пропишите в директиву using объявления сборок как показано ниже:

 

1
2
3
4
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

Теперь вы уже готовы чтобы работать с XNA. Для реализации основного класса игры можете либо использовать главный класс программы, где у вас точка входа, либо написать в другом классе, например, class Game1. Мы напишем в нашем главном классе. Унаследуйте ваш класс от Microsoft.Xna.Framework.Game.

 

 

1
class Program : Microsoft.Xna.Framework.Game

 

Это даст нам доступ к методам рисования, обновления, инициализации приложения и т.п. Теперь пропишите в точке входа main следующий код:

 

1
2
3
4
5
6
7
static void Main(string[] args)
{
using(Program game1 = new Program())
{
game1.Run();
}
}

Где “Program” это название вашего класса, вы можете использовать любое другое. Здесь мы просто запускаем наше приложение – игру (функция Run()), которую переопределять нет необходимости. Создайте в классе Program графический компонент, который мы будем использовать для вывода графики. Объявите переменную “graphics” как показано ниже и пропишите конструктор, где будет инициализироваться эта переменная.

 

 

1
2
3
4
5
6
7
//Объявляем графический компонент - который будет использоваться для вывода
GraphicsDeviceManager graphics;
 
public Program()
{
graphics = new GraphicsDeviceManager(this);
}

 

Также на будущее можете переопределить функцию обновления и рисования (где мы зальем светло синим цветом экран).

 

1
2
3
4
5
6
7
8
9
protected override void Update(GameTime gameTime)
{
//обновление различных параметров (напр. Использование физики)
}
 
protected override void Draw(GameTime gameTime)
{
//рисование
}

 

Теперь мы можем смело рисовать в окне. Для того чтобы закрасить экран напишите в функции Draw() этот код.

 

1
2
3
4
5
6
7
8
9
//Используем графический компонент для очистки в светло-синий цвет
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
 
graphics.GraphicsDevice.BeginScene();
 
//Здесь описывается сама сцена
 
//Представляем все на экран
base.Draw(gameTime);

Очистка экрана выполняется с помощью Clear которая имеет пять вариантов:

В первом который мы используем пристутствует один параметр который задает, каким цветом мы хотим очистить главную область. Есть также такие варианты:

 

1
2
3
4
void GraphicsDevice.Clear(ClearOptions options, Color color, float depth, int stencil);
void GraphicsDevice.Clear(ClearOptions options, Vector4 color, float depth, int stencil);
void GraphicsDevice.Clear(ClearOptions options, Color color, float depth, Rectangle[] regions);
void GraphicsDevice.Clear(ClearOptions options, Vector4 color, float depth, Rectangle[] regions);

Второй и тертий(четверты и пятый) варианты отличатся лишь тем что по разному задается компонента цвета. В тертьем варианте задается с помощью четырех параметров (RGBA). Параметр regions позволяет задать какие определенные прямоуголные области будут подвергнуты очистке.

Если вы хотите сделать ваше приложение (игру) полноэкранным то добавьте в функцию инициализации графического компонента следующий код.

1
2
3
4
5
6
7
8
9
10
//настраиваем устройство
this.graphics.BackBufferWidth = 800;//Задаем ширину
this.graphics.BackBufferHeight = 600;//И высоту
 
//перед тем как задавать формат пиксела рекомендуется удостовериться, что
//этот форат поддерживает ваша видеокарта
this.graphics.BackBufferFormat = SurfaceFormat.Bgr565; //Устанавливаем формат пиксела
 
//Задаем режим fullscreen
this.graphics.IsFullScreen = true;

 

В следуещем уроке вы узнаете как вводить спрайты и загружать текстуры.

Автор: Василенко Владислав
Комментарии
#1 | Gargo 03.05.2009 22:42:07
1)блин, а нельзя было сделать, чтобы код можно было нормально скопировать со страницы, ато либо вручную приходится, либо копировать, потом править каждую строчку. А если у человека времени в обрез на изучение?
По крайней мере такое в Эксплорере.
2)эта строчка XNA3.0 не воспринимает вообще:
graphics.GraphicsDevice.BeginScene();
#2 | SolarWind 05.05.2009 22:13:01
Эти уроки писались когда XNA была еще в бете.
Для торопящихся изучить все есть готовые исходники - http://xnadev.ru/downloads.php?page_id=9
#3 | starostin 28.11.2009 20:41:39
По-моему надо подправить, когда реч зашла о полноэкранном режиме возникли проблемы с именами методов
#4 | semverchenko 31.01.2010 18:31:23
так, вроде, работает(XNA 3.1)

GeSHi: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using Microsoft.Xna.Framework;
  4. using Microsoft.Xna.Framework.Graphics;
  5.  
  6. class Program : Microsoft.Xna.Framework.Game
  7. {
  8. protected override void Update(GameTime gameTime)
  9. {
  10. //обновление различных параметров (напр. Использование физики)
  11. }
  12. protected override void Draw(GameTime gameTime)
  13. {
  14. graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
  15. base.Draw(gameTime);
  16. }
  17. GraphicsDeviceManager graphics;
  18. public Program()
  19. {
  20. graphics = new GraphicsDeviceManager(this);
  21. //настраиваем устройство
  22. graphics.PreferredBackBufferWidth = 1024;//Задаем ширину
  23. graphics.PreferredBackBufferHeight = 768;//И высоту
  24. //перед тем как задавать формат пиксела рекомендуется удостовериться, что
  25. //этот форат поддерживает ваша видеокарта
  26. graphics.PreferredBackBufferFormat = SurfaceFormat.Bgr565; //Устанавливаем формат пиксела
  27. //Задаем режим fullscreen
  28. graphics.IsFullScreen = true;
  29. }
  30. static void Main(string[] args)
  31. {
  32. using (Program game1 = new Program())
  33. {
  34. game1.Run();
  35. }
  36. }
  37. }
  38.  
  39.  
Добавлено за 0.009 секунд, используя GeSHi 1.0.8.2
#5 | Hale_32bit 24.02.2010 18:41:18
Пропишите пожалуйста в уроке закрытие программы по нажатию кнопки, а то не хорошо получается.
#6 | inverse 04.03.2010 16:36:31
Подскажите как сделать, чтобы окно было на весь экран, но возможность свернуть его или уменьшить оставалась?
#7 | NeoN 24.03.2010 23:00:17
//закрытие приложения по нажатии кнопки ESC
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
this.Exit();
//размещение в методе Update
#8 | NeoN 24.03.2010 23:01:55
inverse:
как ты себе представляешь уменьшение или увеличение полно экранного приложения. вопрос яснее пожалуйста.
#9 | XmAN 09.08.2010 21:07:05
Для XNA 3.1 пришлось поправить, чтобы заработало:
1) Убрать из метода Draw() строку
GeSHi: C#
  1. graphics.GraphicsDevice.BeginScene();
Добавлено за 0.004 секунд, используя GeSHi 1.0.8.2

2) В функцию инициализации графического компонента добавить следующий код
GeSHi: C#
  1. this.graphics.ApplyChanges();
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2
#10 | NightmareZ 20.03.2012 16:37:16
NeoN: Я бы лучше сделал так:
GeSHi: C#
  1. if (Keyboard.GetState().GetPressedKeys().Contains(Keys.Escape))
  2. Exit();
Добавлено за 0.004 секунд, используя GeSHi 1.0.8.2
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Отлично! Отлично! 56% [5 Голоса]
Очень хорошо Очень хорошо 11% [1 Голос]
Хорошо Хорошо 22% [2 Голоса]
Удовлетворительно Удовлетворительно 11% [1 Голос]
Плохо Плохо 0% [Нет голосов]
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,25 секунд 8,709,504 уникальных посетителей