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

Рисование элементов WinForms в окне приложения XNA
Мало кто знает, но в окно XNA приложения можно добавлять стандартные элементы управления WinForms. Это занимает совсем мало времени и трудозатрат. Есть правда одно «НО» работать это дело под XBOX 360 не будет не под каким предлогом. Итак приступим, создайте новый проект Windows Game. В ссылках проекта (References) добавьте ссылку на сборку System.Windows.Forms.
В блоке using класса игры Game1 добавим альяс для пространства имен System.Windows.Forms, так как по умолчанию он конфликтует с пространством имён Microsoft.Xna.Framework.Input и создадим альяс для перечисления ButtonState.

1
2
using ButtonState=Microsoft.Xna.Framework.Input.ButtonState;
using WinForms = System.Windows.Forms;

Объявим две переменные уровня класса:

1
2
3
private WinForms.Label lblFPS;
private WinForms.Button cmdClick;

Далее в стандартном методе Initialize() создадим их экземпляры и зададим параметры и методы обработки событий.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
protected override void Initialize()
{
lblFPS = new WinForms.Label();
cmdClick = new WinForms.Button();
cmdClick.Left = lblFPS.Width + 20;
cmdClick.Text = "Click me!";
cmdClick.Click += new EventHandler(cmdClick_Click);
WinForms.Control mainWindow = WinForms.Control.FromHandle(Window.Handle);
mainWindow.Controls.Add(lblFPS);
mainWindow.Controls.Add(cmdClick);
 
base.Initialize();
}
 

Обратите внимание на стоку WinForms.Control mainWindow = WinForms.Control.FromHandle(Window.Handle); в ней мы получаем форму XNA приложения в виде элемента управления по её хендлеру и наши элементы управления просто добавляем как дочерние контроллы. Добавим метод который будет срабатывать по событию Click нашей кнопки.

1
2
3
4
5
6
private void cmdClick_Click(object sender, EventArgs e)
{
WinForms.MessageBox.Show(string.Format("Click on button {0}", sender));
}
 
 

Затем возмем за основу код счетчика и будем выводить FPS в label: Объявляем еще переменные класса:
1
2
3
int frameRate = 0;
int frameCounter = 0;
TimeSpan elapsedTime = TimeSpan.Zero;

В метод Update() прописываем логику подсчета FPS.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
 
elapsedTime += gameTime.ElapsedGameTime;
 
if (elapsedTime > TimeSpan.FromSeconds(1))
{
elapsedTime -= TimeSpan.FromSeconds(1);
frameRate = frameCounter;
frameCounter = 0;
}
 
base.Update(gameTime);
}
 
 

А в метод Draw() отрисовку счетчика в Label.
1
2
3
4
5
6
7
8
9
10
11
	protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
 
frameCounter++;
lblFPS.Text = "FPS: " + frameRate.ToString();
 
base.Draw(gameTime);
}
 
 

Запускаем приложение и любуемся контроллами на форме.



Вот собственно и все, метод вполне подходит для быстрой отладки приложения.
Комментарии
#1 | mike 17.02.2009 11:54:31
интересный способ, как на счет мерцания - мерцает?
#2 | SolarWind 17.02.2009 11:56:03
У меня нет Smile
#3 | Chort 17.02.2009 12:05:51
Мерцания нет, но есть траблы с полу-прозрачностью
#4 | Megakot 02.09.2009 19:46:37
А кто подскажет, как бы так сделать, чтобы XNA работала не со всем окном, а с отдельной панелью, чтобы можно было в оставшейся части окна разместить свои контролы?
Подозреваю, что это просто, но, увы, туплю Smile
#5 | SolarWind 03.09.2009 00:13:58
Вопрос в форуме увидит намного больше народу, на коментарии некоторые даже не смотрят.
#6 | starostin 28.05.2010 13:17:21
Вот тут нашёл проект, тут и листбоксы, и текстбоксы, в общем весь стандартный набор вроде присутствует
http://www.gameprojects.com/project/?id=e68f3464c4
#7 | Kirbers 04.04.2011 18:00:55
Да, дополню:
Если вы добавите в самом начале инициализации строчку
GeSHi: C#
  1. Application.EnableVisualStyles();
Добавлено за 0.005 секунд, используя GeSHi 1.0.8.2

то сработает распознавание операционной системы и все Control станут гораздо красивее...
P. S. это я из Main() взял
#8 | Kirbers 04.04.2011 23:32:16
Возник вопрос. А вы не знаете, случаем, как сделать набор текста в TextBox по вашему методу? А то TextBox на клавиатуру не реагирует. . . Frown
#9 | MeryString 14.03.2013 14:57:40
А есть ли в XNA аналог winForm или может сторонняя библиотека?
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

Отлично! Отлично! 80% [4 Голоса]
Очень хорошо Очень хорошо 20% [1 Голос]
Хорошо Хорошо 0% [Нет голосов]
Удовлетворительно Удовлетворительно 0% [Нет голосов]
Плохо Плохо 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,08 секунд 8,709,956 уникальных посетителей