Программирование
<<  Тест по редактор 5 класс Тема 2. Разработка ленточного орнамента  >>
XNA game studio express: разработка casual games для PC и xbox 360
XNA game studio express: разработка casual games для PC и xbox 360
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
XNA Game Studio Express
Marblets
Marblets
Marblets
Marblets
Marblets
Marblets
Кроссплатформенные приложения
Кроссплатформенные приложения
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компоненты XNA Framework
Компонент Application Model
Компонент Application Model
Простейшее приложение
Простейшее приложение
Компонент Input
Компонент Input
Компонент Input
Компонент Input
Пример использования компонента Input
Пример использования компонента Input
Компонент Math
Компонент Math
Пример компонента «камера» Взаимодействие с клавиатурой
Пример компонента «камера» Взаимодействие с клавиатурой
Экспорт сцены из 3DS MAX 9
Экспорт сцены из 3DS MAX 9
Класс Model
Класс Model
Анимация винта самолета
Анимация винта самолета
Компонент Graphics
Компонент Graphics
Визуализация самолета
Визуализация самолета
Компонент Content Pipeline Standart Importers
Компонент Content Pipeline Standart Importers
Использование нового Content Processor в C# Express
Использование нового Content Processor в C# Express
Попиксельное освещение Интеграция в приложение
Попиксельное освещение Интеграция в приложение
Content processors из XNA creators club
Content processors из XNA creators club
Компонент Storage
Компонент Storage
Компонент Audio / XACT Основные компоненты проекта
Компонент Audio / XACT Основные компоненты проекта
Компонент Audio / XACT Основные компоненты проекта
Компонент Audio / XACT Основные компоненты проекта
Компонент Audio Основные классы
Компонент Audio Основные классы
Microsoft Cross-Platform Audio Creation Tool (XACT)
Microsoft Cross-Platform Audio Creation Tool (XACT)
Starter Kits
Starter Kits
Starter Kits
Starter Kits
Starter Kits
Starter Kits
Starter Kits
Starter Kits
Учебная литература
Учебная литература
Учебная литература
Учебная литература
Учебная литература
Учебная литература
Учебная литература
Учебная литература
Картинки из презентации «XNA game studio express: разработка casual games для PC и xbox 360» к уроку информатики на тему «Программирование»

Автор: Sergei Gaidukov. Чтобы познакомиться с картинкой полного размера, нажмите на её эскиз. Чтобы можно было использовать все картинки для урока информатики, скачайте бесплатно презентацию «XNA game studio express: разработка casual games для PC и xbox 360.pptx» со всеми картинками в zip-архиве размером 6550 КБ.

XNA game studio express: разработка casual games для PC и xbox 360

содержание презентации «XNA game studio express: разработка casual games для PC и xbox 360.pptx»
Сл Текст Сл Текст
1XNA game studio express: разработка 42(material is BasicMaterialContent) {
casual games для PC и xbox 360. Александр BasicMaterialContent basicMaterial =
Ложечкин Сергей Гайдуков. (BasicMaterialContent)material; //
2Содержание. XNA Framework на платформе Текстура материала if
Windows .NET Compact Framework for Xbox (basicMaterial.Texture != null) {
360 Компоненты XNA Framework Оптимизация myMaterial.Textures.Add("diffuseTextu
XNA-приложений XNA Framework и Windows e", basicMaterial.Texture);
Forms. myMaterial.OpaqueData.Add("textured&q
3XNA Game Studio Express. ot;, true); } else
Инструментарий разработки игровых myMaterial.OpaqueData.Add("textured&q
приложений для платформ Windows Windows XP ot;, false); // Диффузный цвет if
x86 Home/Pro/MCE/Tablet Windows XP x64 (basicMaterial.DiffuseColor != null) {
(посредством WOW64) Windows Vista (с myMaterial.OpaqueData.Add("materialDi
Visual C# 2005 Express SP1) Windows Server fuse", new
2003 (*) Xbox 360 Сферы применения Casual Vector4(basicMaterial.DiffuseColor.Value,
Games Прототипы игр Demo Утилиты 1.0f)); } else
Образование. myMaterial.OpaqueData.Add("materialDi
4Marblets. fuse", Vector4.One); // Цвет бликов и
5XNA Framework. Кроссплатформенный API глянцевитость if
для разработки игровых приложений Не ((basicMaterial.SpecularColor != null)
привязан к Windows Основан на платформе && (basicMaterial.SpecularPower !=
.NET Framework .NET Framework 2.0 null)) {
(Windows) .NET Compact Framework for Xbox myMaterial.OpaqueData.Add("shininess&
360 Mono (Linux). uot;, basicMaterial.SpecularPower.Value);
6XNA на платформе windows. Компоненты myMaterial.OpaqueData.Add("materialSp
для разработки приложений Компоненты для cular", new
распространения приложений Очень просто Vector4(basicMaterial.SpecularColor.Value,
интегрируются в дистрибутив приложения 1.0f)); } else {
средствами Visual Studio 2005 Pro. myMaterial.OpaqueData.Add("materialSp
Компонент. Размер дистрибутива. Компонент. cular", Vector4.One);
Размер дистрибутива. Visual C# Express myMaterial.OpaqueData.Add("shininess&
2005 + SP1. 440MB + (24-53MB). XNA Game uot;, 128.0f); } } else throw new
Studio Express 1.0. 81MB. .NET Framework NotImplementedException(); return
1.1. 23MB. .NET Framework 2.0. 22 – 27MB. base.ConvertMaterial(myMaterial, context);
XNA Framework 1.0. 2MB. Обновление D3DX, } }.
XACT, XINPUT. 4MB. 43Использование нового Content Processor
7.NET Compact Framework 2.0. Отличия от в C# Express.
.NET Framework 2.0: Значительно меньшие 44Попиксельное освещение Интеграция в
требования к ресурсам компьютера Является приложение. Vector4[] lightColor = new
подмножеством .NET Framework (содержит Vector4[] {Vector4.One, new Vector4(0.5f,
примерно 30% классов) Ограниченная 0.5f, 0.5f, 1.0f), new Vector4(0.5f, 0.5f,
поддержка web-приложений и баз данных 0.5f, 1.0f)}; Vector3[] lightDir = new
Ограниченная поддержка Windows Forms Не Vector3[]{ new Vector3(-0.5265408f,
поддерживается генерация кода на лету -0.5735765f, -0.6275069f), new
(System.Reflection.Emit) Ограниченная Vector3(0.7198464f, 0.3420201f,
поддержка JIT аппаратных вычислений с 0.6040227f), new Vector3(-0.4545195f,
плавающей точкой Более простой сборщик 0.7660444f, 0.9545195f)}; Vector3[]
мусора. lightDirView = new Vector3[3]; protected
8.NET Compact Framework /Xbox 360. override void Draw(GameTime gameTime) {
Подмножество .NET Compact Framework Нет graphics.GraphicsDevice.Clear(Color.Cornfl
поддержки Windows Forms В настоящее время werBlue); // Переводим векторы направления
отсутствует поддержка сетевых технологий источников света в // систему координат
Дополнительные возможности Аппаратные камеры for (int k = 0; k <
вычисления с плавающей точкой Но нет lightDir.Length; k++) { Matrix
поддержки векторных инструкций VMX128 normalTransform = camera.View;
Привязка потоков к одному из четырех normalTransform.Translation =
(всего 6) логических процессоров (Hardware Vector3.Zero; lightDirView[k] =
threads) Метод Thread.SetProcessorAffinity Vector3.Normalize(
задаёт логический процессоры, Vector3.Transform(-lightDir[k],
предпочтительные для выполнения потока. normalTransform)); } for (int i = 0; i
9Кроссплатформенные приложения. < biplane.Meshes.Count; i++) {
Создаются отдельные проекты для PC и Xbox ModelMesh mesh = biplane.Meshes[i]; for
360 Проекты могут использовать общий (int j = 0; j < mesh.Effects.Count;
исходный код и контент (Add As Link) j++) { // Получаем доступ к объекту
Поддерживается только C# При создания эффекта Effect effect =
кода, специфичного для Windows и Xbox 360, (Effect)mesh.Effects[j]; // Задаем матрицы
используйте директивы условной компиляции трансформации
#if/#else/#endif и [Conditional]. effect.Parameters.GetParameterBySemantic(
[Conditional("XBOX360"] void "WorldViewProjection").
XboxCode() { // Код, специфичный для Xbox SetValue(biplaneTransforms[mesh.ParentBone
}. #if !XBOX360 // Код, специфичный для Index] * camera.ViewProjection);
Windows #endif. effect.Parameters.GetParameterBySemantic(&
10Компоненты XNA Framework. Extended uot;WorldView").
Framework. Core Framework. Games. SetValue(biplaneTransforms[mesh.ParentBone
Platform. Index] * camera.View); // Цвет источников
11Компонент Application Model. Каркас света
приложения Управление оконной подсистемой effect.Parameters["lightColor"].
Управление графическим устройством etValue(lightColor); // Направление
Direct3D Управление контентом (текстуры, источников света (в системе координат //
модели, звуки) Расширяемая камеры)
функциональность за счет пользовательских effect.Parameters["lightDirView"
компонентов. .SetValue( lightDirView); } mesh.Draw(); }
12Компонент Application Model. base.Draw(gameTime); }.
13Простейшее приложение (Ex01). 45Content processors из XNA creators
14Простейшее приложение. namespace club. Работа со шрифтами и визуализация
MyGame { // Наследник класса Game public текста Генерация ландшафта на основе карты
class Game1 : Microsoft.Xna.Framework.Game высот Height Map -> Normal Map Bump
{ // Объекты графического устройства и mapping Скелетная анимация.
менеджера контента GraphicsDeviceManager http://creators.xna.com/.
graphics; ContentManager content; public 46Компонент Storage. Кроссплатформенная
Game1() { graphics = new надстройка над System.IO Доступ к файлам
GraphicsDeviceManager(this); content = new данных приложения Сохранение конфигурации
ContentManager(Services); } // приложения и сохраненных игр.
Инициализация приложения protected 47Сохранение конфигурации (Ex08).
override void Initialize() { 48Сохранение конфигурации Сериализация
IsFixedTimeStep = true; TargetElapsedTime данных. public class Config { public
= new TimeSpan(166667); // Инициализация Vector2 angles; public Vector3 translate;
пользовательских компонентов // Сохранение объекта в файла public void
base.Initialize(); } // Загрузка контента Save(string filename) { using (TextWriter
protected override void fs = new StreamWriter(filename)) {
LoadGraphicsContent(bool loadAllContent) { XmlSerializer xmlSerializer = new
… } // Освобождение ресурсов protected XmlSerializer(typeof(Config));
override void UnloadGraphicsContent(bool xmlSerializer.Serialize(fs, this); } } //
unloadAllContent) { if (unloadAllContent Загрузка данных из файла public static
== true) { content.Unload(); } } // Config Load(string filename) { Config
Обновление состояния игры protected config; try { using (FileStream fs = new
override void Update(GameTime gameTime) { FileStream(filename, FileMode.Open)) {
... base.Update(gameTime); } // XmlSerializer xmlSerilizer = new
Визуализация изображения protected XmlSerializer(typeof(Config)); config =
override void Draw(GameTime gameTime) { (Config)xmlSerilizer.Deserialize(fs); } }
graphics.GraphicsDevice.Clear(Color.Cornfl // При возникновении проблем используем //
werBlue); // Визуализация всех настройки по умолчанию catch (IOException)
пользовательских DrawableGameComponent { config = new Config(); } catch
base.Draw(gameTime); } } }. (InvalidOperationException) { config = new
15Компонент Input. Работа с устройствами Config(); } return config; } }.
ввода-вывода. Устройство. Устройство. 49Сохранение конфигурации Работа с
Класс. Класс. Поддержка. Поддержка. носителями информации. protected override
Windows. Xbox 360. Клавиатура. Keyboard. void Update(GameTime gameTime) {
X. X. Мышь. Mouse. X. Геймпад. GamePad. X. KeyboardState keyboadState =
X. Keyboard.GetState(); GamePadState
16Компонент Input. gamePadState =
17Пример использования компонента Input GamePad.GetState(PlayerIndex.One); // Если
(Ex02). нажата клавиша S клавиатуры или кнопка B
18Пример использования компонента Input. геймпада if
protected override void Update(GameTime (keyboadState.IsKeyDown(Keys.S) ||
gameTime) { // Если нажата кнопка Back (gamePadState.Buttons.B ==
геймпада if ButtonState.Pressed)) { // Отображаем
(GamePad.GetState(PlayerIndex.One). диалоговое окно выбора устройства хранения
Buttons.Back == ButtonState.Pressed) { // информации StorageDevice storageDevice
Exit(); } // Если на клавиатуре нажата = StorageDevice.ShowStorageDeviceGuide();
клавиша Esc if // Проверяем, подключено ли это устройство
(Keyboard.GetState().IsKeyDown(Keys.Escape if (!storageDevice.IsConnected) return; //
) { Exit(); } base.Update(gameTime); }. Получаем доступ к файлам приложения на
19Компонент Math. устройстве using (StorageContainer
20Компонент Math. Больше не является storageContainer =
настройкой над D3DX Поиск компромисса storageDevice.OpenContainer("GSP.Bipl
между удобством и производительностью ne")) { // Формируем полное имя файла
public static Matrix operator *(Matrix конфигурации string configFile =
matrix1, Matrix matrix2); public static Path.Combine(storageContainer.Path,
Matrix Multiply(Matrix matrix1, Matrix "config.xml"); Config config =
matrix2); public static void Multiply(ref new Config(); config.angles =
Matrix matrix1, ref Matrix matrix2, out camera.angles; config.translate =
Matrix result); Производительность camera.translate; / Сохраняем конфигурацию
операторов и обычных методов в два раза приложения config.Save(configFile); } } //
ниже C++ without SSE c = a * b При Если нажата клавиша L клавиатуры или
использовании ref методов кнопка A геймпада if
производительность примерно равна C++ (Keyboard.GetState().IsKeyDown(Keys.L) ||
without SSE Matrix.Multiply(ref a, ref b, (gamePadState.Buttons.A ==
ref c) Поддерживается только ButtonState.Pressed)) { // Отображаем
правосторонняя система координат. диалоговое окно выбора устройства хранения
21Использования компонента Math на // информации StorageDevice storageDevice
примере встраивания камеры (Ex03). = StorageDevice.ShowStorageDeviceGuide();
22Пример компонента «камера» Каркас // Проверяем, подключено ли это устройство
компонента. public partial class Camera : if (!storageDevice.IsConnected) return; //
Microsoft.Xna.Framework.GameComponent { Получаем доступ к файлам приложения на
public Camera(Game game) : base(game) { } устройстве using (StorageContainer
// Инициализация компонента и загрузка storageContainer =
контента public override void Initialize() storageDevice.OpenContainer("GSP.Bipl
{ base.Initialize(); } // Обновление ne")) { // Формируем полное имя файла
состояния компонента public override void конфигурации string configFile =
Update(GameTime gameTime) { Path.Combine(storageContainer.Path,
base.Update(gameTime); } }. "config.xml"); // Загружаем
23Пример компонента «камера» Расчет конфигурацию приложения Config config =
матриц трансформации. // Углы и положение Config.Load(configFile); camera.angles =
камеры public Vector2 angles = config.angles; camera.translate =
Vector2.Zero; public Vector3 translate = config.translate; } } }.
new Vector3(0.0f, 0.0f, -500.0f); // Угол 50Компонент Audio / XACT. Основан на
обзора и плоскости отсечения public float Microsoft Cross-Platform Audio Creation
fov = MathHelper.Pi / 4.0f; public float Tool (XACT) Визуальный
zNear = 0.1f; public float zFar = windows-инструментарий для создания аудио
10000.0f; // Расчет матриц проекции, вида контента Позволяет создавать именованные
public Matrix Projection { get { float последовательности wave-файлов с
aspect = возможностью организации циклов, изменения
(float)Game.Window.ClientBounds.Width / громкости и т.п., и привязывать их к
(float)Game.Window.ClientBounds.Height; событиям приложения без перекомпиляции
return Высокоуровневая кросс-платформенная
Matrix.CreatePerspectiveFieldOfView(fov, библиотека для работы с аудио подсистемой
aspect, zNear, zFar); } } public Matrix PC и Xbox 360.
View { get { return 51Компонент Audio / XACT Основные
Matrix.CreateRotationY(angles.X) * компоненты проекта. Файл проекта .xap.
Matrix.CreateRotationX(angles.Y) * Текстовый файл, с описанием проекта и
Matrix.CreateTranslation(translate); } } инструкциями по сборке Файл глобальных
public Matrix ViewProjection { get { настроек .gsf, затрагивающих весь проект
return View * Projection; } }. Wave bank – коллекция wave-файлов,
24Пример компонента «камера» логически сгруппированных в один .xwb
Взаимодействие с геймпадом. using файл.
Microsoft.Xna.Framework.Input; public 52Компонент Audio / XACT Основные
override void Update(GameTime gameTime) { компоненты проекта. Soundbank – .Xsb файл
// Джойстик не должен воздействовать с набором sounds и cues sound –
приложение, потерявшее фокус if инструкции, описывающие как надо проиграть
(Game.IsActive) { // Получаем состояние набор указанных звуков (микширование,
миниджойстиков GamePadThumbSticks последовательность, циклы, громкость) cue
ThumbSticks = – логическая группа sounds, проигрываемая
GamePad.GetState(PlayerIndex.One).ThumbSti приложением при наступление определенного
ks; // Правый министик используется для события.
вращения камеры angles.X -= 53Компонент Audio Основные классы.
ThumbSticks.Right.X * 0.01f; angles.Y += Надстройка над XACT AudioEngine – главный
ThumbSticks.Right.Y * 0.01f; // Левый объект, управляющий аудио-подсистемой PC /
джойстик приближает/удаляет камеру Xbox 360. Настройки загружаются из
translate.Z += ThumbSticks.Left.Y * 5f; .gsf-файла WaveBank и SoundBank – работа с
base.Update(gameTime); }. .xwb и .xsb файлами соответственно Доступ
25Пример компонента «камера» к Cue осуществляется методом GetCue класса
Взаимодействие с клавиатурой. // Получаем SoundBank Проигрывание звуков управляется
состояние клавиатуры KeyboardState стандартным набором Play/Pause/Resume/Stop
keyboardState = Keyboard.GetState(); // и свойствами наподобие IsPlaying.
Корректируем углы поворота камеры if 54Звук двигателя (Ex09).
(keyboardState.IsKeyDown(Keys.Left)) 55Microsoft Cross-Platform Audio
angles.X += 0.01f; if Creation Tool (XACT).
(keyboardState.IsKeyDown(Keys.Right)) 56Запуск двигателя самолета. AudioEngine
angles.X -= 0.01f; if audioEngine; WaveBank waveBank; SoundBank
(keyboardState.IsKeyDown(Keys.Up)) soundBank; protected override void
angles.Y += 0.01f; if Initialize() { // Загружаем аудио данные
(keyboardState.IsKeyDown(Keys.Down)) audioEngine = new
angles.Y -= 0.01f; // Корректируем AudioEngine("Content\\audio.xgs"
положение камеры if ; waveBank = new WaveBank(audioEngine,
(keyboardState.IsKeyDown(Keys.PageDown)) "Content\\Wave Bank.xwb");
translate.Z -= 3.0f; if soundBank = new SoundBank(audioEngine,
(keyboardState.IsKeyDown(Keys.PageUp)) "Content\\Sound Bank.xsb"); //
translate.Z += 3.0f; Запускаем проигрывание звука двигателя
26Пример компонента «камера» самолета
Взаимодействие с мышью. bool leftButton = soundBank.PlayCue("Biplane"); …
false; Point lastMousePos; int } protected override void Update(GameTime
lastMouseWheel; public override void gameTime) { // Периодически вызываем метод
Update(GameTime gameTime) { ... // Класс Update экземпляра класса AudioEngine
Mouse не поддерживается Xbox 360 #if audioEngine.Update(); ... }.
!XBOX360 MouseState mouseState = 57Starter Kits.
Mouse.GetState(); Rectangle rect = 58Rocket Commander XNA.
Game.Window.ClientBounds; // 59Чего нет в текущей версии …но появится
Приблежение/удаление камеры осуществляется в будущем. Поддержка сетевых приложений
колесиком int newMouseWheel = Средства разработки GUI-интерфейса
mouseState.ScrollWheelValue; int Низкоуровневая работа с Audio-устройствами
deltaMouseScroll = newMouseWheel - Воспроизведение видеофайлов IDE для
lastMouseWheel; translate.Z += разработки и отладки шейдеров.
(float)deltaMouseScroll * 0.1f; 60Производительность сборщика мусора.
lastMouseWheel = newMouseWheel; // Плюсы сборщика мусора Высокая скорость
Вращение камеры осуществляется посредством выделения памяти Локальность данных,
перемещения // мыши при зажатой левой практически отсутствует проблема
кнопке if (mouseState.LeftButton == фрагментации Нет утечек памяти В том числе
ButtonState.Pressed) { if (leftButton == и при использовании циклических ссылок Но
false) { lastMousePos = new не всё так хорошо Иногда все же приходится
Point(mouseState.X, mouseState.Y); // Если собирать мусор Частый вызов сборщика
в момент нажатия левой кнопки указатель мусора может поставить крест на
мыши //находится за пределами клиентской производительности.
области окна, вращение // начинать не 61Сборщик мусора .NET Framework 2.0.
следует if ((lastMousePos.X >= 0) Сборка мусора похожа на процесс
&& (lastMousePos.Y >= 0) дефрагментации HDD Затраты на сборку
&& (lastMousePos.X < мусора преимущественно определяются
rect.Width) && (lastMousePos.Y количеством “выживших” объектов Сборщик
< rect.Height)) {leftButton = true;} мусора с поддержкой поколении (0, 1, 2)
else leftButton = false; } else { Point Куча располагается в непрерывном адресном
newMousePos = new Point(mouseState.X, пространстве, разделенном на поколения В
mouseState.Y); Vector2 delta = new каждом поколении объекты имеют примерно
Vector2(lastMousePos.X - newMousePos.X, одинаковый возраст Мусор собирается в
lastMousePos.Y - newMousePos.Y); angles += первую очередь в поколении 0 Размер
delta * 0.005f; // Центрируем указатель во поколения 0 примерно равен кэшу L2 При
избежание блокировки if (mouseState.X != построении графа достижимых объектов как
rect.Width / 2) { newMousePos.X = правило игнорируются объекты поколений 1 и
rect.Width / 2; 2 Время сборки мусора в поколении 0
Mouse.SetPosition(newMousePos.X, порядка 1 мс Старайтесь не допустить
newMousePos.Y); } if (mouseState.Y != перехода кратко живущих объектов в старшие
rect.Height / 2) { newMousePos.Y = поколения (избегайте Finalize). Поколение
rect.Height / 2; 2. Поколение 1. Поколение 0. Свободная
Mouse.SetPosition(newMousePos.X, память.
newMousePos.Y); } lastMousePos = 62Сборщик мусора .NET CF for Xbox 360.
newMousePos; } } else leftButton = false; Поколения не поддерживаются Отличная
#endif }. производительность, если объем выделенной
27Пример компонента «камера» Интеграция памяти сопоставим с размером поколения 0 в
в приложение. public class Game1 : .NET Framework 2.0 (порядка 1MB) С ростом
Microsoft.Xna.Framework.Game { Camera объема выделенной памяти эффективность
camera; public Game1() { graphics = new стремительно снижается Заблаговременно
GraphicsDeviceManager(this); content = new выделяйте память перед началом вычислений
ContentManager(Services); // Создаем Даже незначительное выделение памяти при
компонент камера и добавляем его в список визуализации каждого кадра может иметь
// компонентов camera = new Camera(this); печальные последствия Выделяемая памяти
Components.Add(camera); } }. предварительно обнуляется, так что
28Экспорт сцены из 3DS MAX 9. пропускная способность оперативной памяти
29Загрузка модели (Ex04). может стать узким местом Самостоятельно
30Загрузка модели. public class Game1 : форсируйте сборку мусора в местах, не
Microsoft.Xna.Framework.Game { // критичных к незначительным провалам
Информация о модели Model biplane; производительности.
protected override void 63Неявное выделение памяти Боксирование
LoadGraphicsContent(bool loadAllContent) { (boxing). Пример 1 Пример 2. struct MyItem
if (loadAllContent) { // Загружаем модель : IComparable { … } void Test(IComparable
biplane = v1) { … } static void Main(string[] args)
content.Load<Model>("Content\\B { MyItem item; // Неявное выделение памяти
plane"); } } }. в // управляемой куче Test(item); }. void
31Класс Model. Add(object item) { … } … // Неявное
32Анимация винта самолета (Ex05). выделение памяти в // управляемой куче
33Анимация винта самолета. public class Add(2.0f);
Game1 : Microsoft.Xna.Framework.Game { // 64Неявное выделение памяти Цикл foreach.
Матрицы трансформации Matrix[] Получает Enumerator посредством метода
biplaneTransforms; protected override void GetEnumerator Если Enumerator является
LoadGraphicsContent(bool loadAllContent) { классом, происходит выделение памяти Если
… // Выделяем память для хранения матриц Enumerator является структурой Коллекция
трансформациии biplaneTransforms = new List Коллекция EffectPassCollection.
Matrix[biplane.Bones.Count]; } protected public class List<T> :
override void Update(GameTime gameTime) { IList<T>, ... { public struct
… // Получаем значение матриц трасформации Enumerator : IEnumerator<T>, ... {
biplane.CopyBoneTransformsTo(biplaneTransf public bool MoveNext(); public T Current {
rms); // Ищем вал винта for (int i = 0; i get; } } public Enumerator<T>
< biplane.Meshes.Count; i++) { GetEnumerator() { // Нет выделения памяти
ModelMesh mesh = biplane.Meshes[i]; if в управляемой куче // Но если использовать
(mesh.Name == "Prop head") { // коллекцию List<T> через // интерфейс
Поворачиваем вал винта вроде IList<T>, выделение памяти //
biplaneTransforms[mesh.ParentBone.Index] все же произойдет return new
*= Matrix.CreateRotationX(0.05f); } } // Enumerator<T>((List<T>)this);
Копируем измененные матрицы обратно в } }. public sealed class
модель EffectPassCollection :
biplane.CopyBoneTransformsFrom(biplaneTran IEnumerable<EffectPass> { public
forms); // Вычисляем итоговые матрицы struct Enumerator : IEnumerator<T>,
трансформации для каждого меша … { ... } public Enumerator<T>
biplane.CopyAbsoluteBoneTransformsTo(bipla GetEnumerator() { return new
eTransforms); … } }. Enumerator<T>((List<T>)this);
34Компонент Graphics. Объектная } public IEnumerator<EffectPass>
надстройка над Direct3D 9 В отличии от MDX GetEnumerator() { // Внимание:
не является тонкой оберткой над боксирование и выделение памяти в куче.
интерфейсами Direct3D Нет поддержки fixed return
function pipeline Часть функциональности (IEnumerator<EffectPass>)this.pPass.
FFP реализуется посредством класса etEnumerator(); } }.
BasicEffect Пока только вершинное 65Использование XNA Framework в
освещение До трех источников света Одна WinForms. Всегда используйте Platform
текстура Туман Класс SpriteBatch Target x86 Класс GraphicsDevice легко
инкапсулирует спрайтовую графику Нет интегрируется с визуальными компонентами и
встроенных базовых объектов вроде куба, окнами Win32 Для вывода на в заданную
сферы и чайника Нет поддержки визуализации область формы просто разместите должным
вершин без трансформации вершинным образом визуальный компонент,
шейдером и т.д. унаследованный от Control, запретить Erase
35Компонент Graphics. Background и передать его Handle в
36Визуализация самолета (Ex06). GraphicsDevice Не пытайтесь интегрировать
37Визуализация самолета. protected Game в приложение Windows Forms. Он для
override void Draw(GameTime gameTime) { // этого не предназначен Нет поддержки
Закарска экрана синим цветом Content Pipeline Эффекты и текстуры можно
graphics.GraphicsDevice.Clear(Color.Cornfl использовать минуя Content Pipeline Для
werBlue); // Перебираем все меши сцены for экспорта моделей используйте Visual C#
(int i = 0; i < biplane.Meshes.Count; 2005 Express или MS Build Необходимо
i++) { ModelMesh mesh = biplane.Meshes[i]; самостоятельно реализовать интерфейсы
// Перебираем все эффекты меша и классов Game и GraphicsDeviceManage.
устанавливаем параметры for (int j = 0; j 66Пример использования MSBuild для
< mesh.Effects.Count; j++) { компиляции модели. Model.proj. <Project
BasicEffect effect = xmlns="http://schemas.microsoft.com/d
(BasicEffect)mesh.Effects[j]; // Включаем veloper/msbuild/2003">
освещение по умолчанию (3 источника) <UsingTask
effect.EnableDefaultLighting(); // Задаем TaskName="BuildContent"
матрицы мира, вида и проекции effect.World AssemblyName="Microsoft.Xna.Framework
= Content.Pipeline, Version=1.0.0.0,
biplaneTransforms[mesh.ParentBone.Index]; Culture=neutral,
effect.View = camera.View; PublicKeyToken=6d5c3888ef60e27d"
effect.Projection = camera.Projection; } /> <PropertyGroup>
// Визуализируем Mesh mesh.Draw(); } <XnaInstall> C:\Program Files
base.Draw(gameTime); }. (x86)\Microsoft XNA\XNA Game Studio
38Компонент Content Pipeline. DDC Express\v1.0\References\Windows\x86
контент. Content Importer. Content DOM. </XnaInstall> </PropertyGroup>
Content Processor. Content DOM. XNB. <ItemGroup> <PipelineAssembly
Content Manager. Node Content. Model Include="C:\Program Files
Content. Model Reader. X Importer. .X. Fbx (x86)\Microsoft XNA\XNA Game Studio
Importer. Terrain Processor. .FBX. Texture Express\v1.0\References\Windows\x86\Micros
Content. .XNB. Texture2D Reader. Texture ft.Xna.Framework.Content.Pipeline.FBXImpor
Content. Texture Importer. .JPG. .PNG. er.dll" /> <PipelineAssembly
Procedure Texture Importer. .XML. Model Include="C:\Program Files
Processor. Sprite Texture Processor. (x86)\Microsoft XNA\XNA Game Studio
Texture Processor. Model Texture Express\v1.0\References\Windows\x86\Micros
Processor. ft.Xna.Framework.Content.Pipeline.TextureI
39Компонент Content Pipeline Standart porter.dll" /> </ItemGroup>
Importers. Типы файлов. Название <ItemGroup> <Content
импортера. Класс импортера. Выходной Include="biplane.FBX">
класс. .bmp, .dds, .dib, .hdr, .jpg, .pfm, <Importer>FbxImporter</Importer&g
.png, .ppm, .tga. XNA Texture Importer. ;
TextureImporter. TextureContent. .fx. XNA <Processor>ModelProcessor</Proces
Effect Importer. EffectImporter. or> </Content> </ItemGroup>
EffectContent. .x. XNA X File Importer. <Target Name="Build">
Ximporter. NodeContent. .fbx. XNA Autodesk <BuildContent
FBX Importer. FbxImporter. NodeContent. SourceAssets="@(Content)"
.xml. XNA XML Importer. XmlImporter. PipelineAssemblies="@(PipelineAssembl
Object. .xap. XNA XACT Project Importer. )" TargetPlatform="Windows"
-. -. /> </Target> </Project>
40Попиксельное освещение (Ex07). 67Пример подмены классов Game и
41Попиксельное освещение Эффект. const GraphicsDeviceManage. // Реализация класса
static int LightCount = 3; // Текстура GraphicsDeviceManage с поддердкой //
texture diffuseTexture; // Матрицы Windows Forms class
трасформации float4x4 worldViewProj : WinFormsGraphicsDeviceService :
WorldViewProjection; float4x4 worldView : IGraphicsDeviceService,
WorldView; //Направления источников света IGraphicsDeviceManager { private
float3 lightDirView[LightCount]; // Цвета GraphicsDevice graphicsDevice; private
источников света float4 Control renderControl; public
lightColor[LightCount]; // Цвет диффузной PresentationParameters presentParams;
составляющей материала float4 public
materialDiffuse; // Цвет зеркальной WinFormsGraphicsDeviceService(Control
составляющей материла float4 renderControl) { this.renderControl =
materialSpecular; // Глянцевитость float renderControl; } #region
shininess; // Накладывается ли текстура IGraphicsDeviceService Members public
bool textured; struct vertexInput { float3 event EventHandler DeviceCreated; public
position : POSITION; float3 normal : event EventHandler DeviceDisposing; public
NORMAL; float2 texCoordDiffuse: TEXCOORD0; event EventHandler DeviceReset; public
}; struct vertexOutput { float4 hPosition event EventHandler DeviceResetting; public
: POSITION; float2 texCoordDiffuse : GraphicsDevice GraphicsDevice { get {
TEXCOORD0; float3 eye : TEXCOORD1; float3 return this.graphicsDevice; } } #endregion
N : TEXCOORD2; float3 L[LightCount] : #region IGraphicsDeviceManager Members
TEXCOORD3; }; sampler TextureSampler = public void CreateDevice() { presentParams
sampler_state { texture = = new PresentationParameters();
<diffuseTexture>; … }; vertexOutput presentParams.IsFullScreen = false;
VS_PerPixelLighting(vertexInput IN) { presentParams.BackBufferCount = 1;
vertexOutput OUT; OUT.hPosition = mul( presentParams.BackBufferHeight = 0;
float4(IN.position , 1.0) , presentParams.BackBufferWidth = 0;
worldViewProj); OUT.texCoordDiffuse = presentParams.EnableAutoDepthStencil =
IN.texCoordDiffuse; float3 vertPos = true; presentParams.AutoDepthStencilFormat
mul(float4(IN.position.xyz, 1.0), = DepthFormat.Depth24; this.graphicsDevice
worldView).xyz; OUT.N = = new GraphicsDevice(
normalize(mul(IN.normal, GraphicsAdapter.DefaultAdapter,
(float3x3)worldView)); OUT.eye = DeviceType.Hardware,
-normalize(vertPos); for (int i = 0; i this.renderControl.Handle,
< LightCount; i++) { OUT.L[i] = CreateOptions.HardwareVertexProcessing,
lightDirView[i]; } return OUT; } float4 presentParams); } #endregion } //
PS_PerPixelLighting( vertexOutput IN): Имплементация свойства Services класса
COLOR { float3 normN = normalize(IN.N); Game public partial class MainForm : Form,
float3 normEye = normalize(IN.eye); float4 IServiceProvider {
color = float4(0.0, 0.0, 0.0, 0.0); float4 WinFormsGraphicsDeviceService graphics =
diffuseTexture; if (textured) null; ContentManager contentManager =
diffuseTexture = tex2D( TextureSampler, null; private void MainForm _Load(object
IN.texCoordDiffuse ); else diffuseTexture sender, EventArgs e) {
= float4(1.0, 1.0, 1.0, 1.0); for (int i = SetStyle(ControlStyles.Opaque |
0; i < LightCount; i++) { float3 normL ControlStyles.ResizeRedraw, true);
= normalize(IN.L[i]); float diff = max(0, MinimumSize = SizeFromClientSize(new
dot(normN, normL)); float3 H = Size(1, 1)); this.graphics = new
normalize(normEye + normL); float spec = WinFormsGraphicsDeviceService(this);
pow(max(0 , dot(normN,H) ) , shininess ); graphics.CreateDevice(); contentManager =
float4 diffColor = materialDiffuse * diff new ContentManager(this); // Загрузка
* lightColor[i] * diffuseTexture; float4 контента biplane =
specColor = materialSpecular * contentManager.Load<Model>("Con
lightColor[i] * spec; color += diffColor + ent\\biplane"); } #region
specColor; } return color; } technique IServiceProvider Members public object
textured { pass p0 { CullMode = None; GetService(Type serviceType) { if
VertexShader = compile vs_1_1 (serviceType ==
VS_PerPixelLighting(); PixelShader = typeof(IGraphicsDeviceService)) return
compile ps_2_0 PS_PerPixelLighting(); } }. graphics; else throw new
42Попиксельное освещение Content NotImplementedException(); } #endregion }.
Processor. using 68XNA Game Studio Express 1.1. Полная
Microsoft.Xna.Framework.Content.Pipeline; поддержка Windows Vista Поддержка Visual
using Studio 2005 Поддержка спрайтовых шрифтов
Microsoft.Xna.Framework.Content.Pipeline.P Поддержка 3D звука BasicEffect
ocessors; using поддерживает попиксельное освещение
Microsoft.Xna.Framework.Content.Pipeline.G Расширенная математическая библиотека
aphics; ... [ContentProcessor] public Улучшенная технология распространения
class ModelPerpixelLightingProcessor : приложений Обратная совместимость с 1.0.
ModelProcessor { // Конвертирует материалы 69Учебная литература.
модели protected override MaterialContent 70Интернет ресурсы.
ConvertMaterial( MaterialContent material, http://msdn2.microsoft.com/en-us/xna/defau
ContentProcessorContext context) { // t.aspx http://blogs.msdn.com/xna/
Создаем материал, использующий наш эффект http://creators.xna.com/
perpixel.fx EffectMaterialContent http://forums.microsoft.com/msdn/
myMaterial = new EffectMaterialContent(); http://abi.exdream.com/ www.xnadev.ru
string effectPath = www.gotdotnet.ru.
Path.GetFullPath("Content\\perpixel.f 71Вопросы. Александр Ложечкин
"); myMaterial.Effect = new allo@microsoft.com
ExternalReference<EffectContent>(eff http://blogs.gotdotnet.ru/personal/allo
ctPath); // Формируем параметры эффекта на Сергей Гайдуков gsaf@pnz.ru
основе объекта материала // http://blogs.gotdotnet.ru/personal/gsaf.
BasicMaterialConten, созданного XNA if
XNA game studio express: разработка casual games для PC и xbox 360.pptx
http://900igr.net/kartinka/informatika/xna-game-studio-express-razrabotka-casual-games-dlja-pc-i-xbox-360-242341.html
cсылка на страницу

XNA game studio express: разработка casual games для PC и xbox 360

другие презентации на тему «XNA game studio express: разработка casual games для PC и xbox 360»

«Разработка программ» - Выполняется отладка программой td.exe (td32.exe). Выполняет компоновку программа tlink.exe (tlink32.exe). 2. Программное обеспечение для разработки программ на ассемблере. 3. Порядок действий при создании программы на ассемблере: Трансляция - процесс формирования объектного модуля из текстового файла *.asm.

«Глагол разработка урока» - Встречают – открывает – прилетают – выключаем -. Коля подавал гвозди и дощечки. Работа по теме урока. Как изменяются глаголы? Лягушка … собака … воробьи … корова … стрекоза … мышка … кошка … Если не разобрались в теме, было не очень интересно – красный цвет. Запиши вопросы на которые отвечают глаголы в настоящем времени.

«Разработка сайтов» - Сайты бывают разными. Кто Ваши конкуренты? Есть ли жесткие ограничения по срокам и по бюджету? Какие функциональные компоненты будут на сайте? 10 вопросов, чтобы понять, какой сайт нужен: — И простыми, — и сложными, — и красивыми, — и не красивыми, — и удобными, — и не удобными. Какую? 9. Какие сайты Вам нравятся?

«Разработка бизнес-плана» - БП финансового оздоровления. По целевой аудитории: Внутренний. Классификация бизнес-планов. Объем приложений не ограничивается. БП коммерческой идеи или инвестиционного проекта. Содержание разделов бизнес-плана Содержание. Всего предприятия. БП компании или структурного подразделения. Содержание разделов бизнес-плана Описание компании.

«Методическая разработка раздела программы» - Социально-педагогическая значимость презентуемых результатов применения методической разработки. Методические рекомендации по аттестации педагогических работников государственных и муниципальных образовательных учреждений. Структура методической разработки раздела образовательной программы. 7. Календарно-тематическое планирование по разделу.

«Методические разработки» - Методическое обеспечение учащихся 6 класс (новинки 2007 -2008 г.). Методическое обеспечение учащихся (тетради и учебники) 5 класс - девочки. Методические разработки (поурочные планы 1 вариант). Методическое обеспечение современного урока. Методическое обеспечение учащихся (тетради и учебники) 7 класс – девочки (2005 г.).

Программирование

31 презентация о программировании
Урок

Информатика

130 тем
Картинки
900igr.net > Презентации по информатике > Программирование > XNA game studio express: разработка casual games для PC и xbox 360