Навигация
· 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 - Дом для вашего сайта
Статистика посещений:

Курсор с контента
Система контента в XNA очень многогранна и использовать ее можно так что даже сами разработчики не догадались бы. Здесь я приведу простой пример ее использования.

Была у меня простая задача, добавить в игру курсор мышки. Тут все просто — создаем спрайт и рисуем текстуру курсора в позиции мышки.

	SpriteBatch m_mouseSprite = null;
	Texture2D m_cursorTexture = null;
	Vector2 m_mousePosition = Vector2.Zero;
 
	protected override void Initialize()
	{
		m_mouseSprite = new SpriteBatch(this.GraphicsDevice);
		m_cursorTexture = this.Content.Load<Texture2D>("cursor");
		base.Initialize();
	}
 
	protected override void Update(GameTime gameTime)
	{
		MouseState m_lastState = Mouse.GetState();
		m_mousePosition = new Vector2(m_lastState.X, m_lastState.Y);
		base.Update(gameTime);
	}
 
	protected override void Draw(GameTime gameTime)
	{
		m_mouseSprite.Draw(m_cursorTexture, m_mousePosition, Color.White);
		base.Draw(gameTime);
	}		

 

Вот мы и сделали курсор. Но потом у меня появилась другая проблема, Для курсоров-стрелочек это подходит, а если нам нужен курсор цели? Тогда нам нужно сдвинуть текстуру, для того что бы крестик был в центре. Для этого сделаем класс курсора.

	class MouseCursor
	{
		public Texture2D Texture;
		public Vector2 Offset;
	}

 

Теперь решим как его создавать. Можно прописать в коде, но это очень раздражает когда например надо подменить текстуру. Можно сделать файл с информацией про курсор, но тогда надо точно знать что писать в файле. Мы будем использовать вариант номер три – система контента, а точнее параметры контента.

Создадим класс контента

	class MouseCursorContent
	{
		public Texture2DContent Texture;
		public Vector2 Offset;
	}

 

ридер – райтер думаю напишете сами. А теперь самое интересное – контент-процессор

	[ContentProcessor]
	class MouseCursorProcessor : ContentProcessor<Texture2DContent, MouseCursorContent>
	{ 
		private int m_xOffset = 0;
		private int m_yOffset = 0;
 
		[DefaultValue(0)]
		public int XOffset
		{
			get { return m_xOffset; }
			set { m_xOffset = value; }
		}
		[DefaultValue(0)]
		public int YOffset { 
			get { return m_yOffset; }
			set { m_yOffset = value; }
		}
 
		public override GCursorContent Process(Texture2DContent input, ContentProcessorContext context)
		{
			MouseCursorContent content = new MouseCursorContent();
 
			content.Texture = input;
			content.Offset = new Vector2(m_xOffset, m_yOffset);
 
			return content;
		}
	}

 

Теперь все что нам надо это сменить процессор на текстуре и выставить в параметрах нужное смещение и можно загружать нужный курсор прямо из контента. Теперь поправим семпл.

	SpriteBatch m_mouseSprite = null;
	MouseCursor m_mouseCursor = null;
	Vector2 m_mousePosition = Vector2.Zero;
 
	protected override void Initialize()
	{
		m_mouseSprite = new SpriteBatch(this.GraphicsDevice);
		m_mouseCursor = this.Content.Load<MouseCursor>("cursor");
		base.Initialize();
	}
 
	protected override void Update(GameTime gameTime)
	{
		MouseState m_lastState = Mouse.GetState();
		m_mousePosition = new Vector2(m_lastState.X, m_lastState.Y);
		base.Update(gameTime);
	}
 
	protected override void Draw(GameTime gameTime)
	{
		m_mouseSprite.Begin();
		m_mouseSprite.Draw(m_mouseCursor.Texture, m_mousePosition - m_mouseCursor.Offset, Color.White);
		 m_mouseSprite.End();
 
		base.Draw(gameTime);
	}	

 

Вот и все. Используйте контент в полную силу.

С уважением,
Байдалка Владимир ака Chort

Комментарии
#1 | GinX 11.04.2009 14:51:47
Отлчьный урок спс....
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

Нет данных для оценки.
Авторизация
Логин

Пароль



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

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

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,04 секунд 8,709,724 уникальных посетителей