Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемМарина Нагульнова
1 Лекция 7
2 Раздел 7.1
3 Windows Phone Темы раздела 3
4 Windows Phone XNA 4
5 Windows Phone XNA и Silverlight 5
6 Windows Phone Проект игры 6
7 Windows Phone Действия при запуске игры 7
8 Windows Phone Методы класса XNA Game partial class PongGame : Microsoft.Xna.Framework.Game { protected override void LoadContent (bool loadAllContent) { } protected override void Update(GameTime gameTime) { } protected override void Draw(GameTime gameTime) { } 8
9 Windows Phone Методы класса XNA Game 9
10 Windows Phone Загрузка игрового контента protected override void LoadContent() { // создание группы спрайтов, которая можно использовать // для отрисовки текстур spriteBatch = new SpriteBatch(GraphicsDevice); } 10
11 Windows Phone Загрузка игрового контента ballTexture = Content.Load ("WhiteDot"); 11
12 Windows Phone Хранение текстуры // игровой мир Texture2D ballTexture; 12
13 Windows Phone Загрузка текстуры в программу protected override void LoadContent() { // создание группы спрайтов, которая можно использовать // для отрисовки текстур spriteBatch = new SpriteBatch(GraphicsDevice); ballTexture = Content.Load ("WhiteDot"); } 13
14 Windows Phone Координаты и пиксели 14
15 Windows Phone Оси координат в XNA 15
16 Windows Phone Структура Rectangle Rectangle ballRectangle = new Rectangle( 0, 0, ballTexture.Width, ballTexture.Height), Color.White); 16
17 Windows Phone Метод Draw protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } 17
18 Windows Phone Группы спрайтов 18
19 Windows Phone Методы SpriteBatch Begin и End protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); // сюда нужно добавить код для отрисовки объектов spriteBatch.End(); base.Draw(gameTime); } 19
20 Windows Phone Метод SpriteBatch.Draw spriteBatch.Draw(ballTexture, ballRectangle, Color.White); 20
21 Windows Phone Настройка положения new Rectangle( 0, 0, ballTexture.Width, ballTexture.Height) new Rectangle( 0, 0, // положение 200,100) // размер new Rectangle( 50, 50, // положение 60, 60) // размер 21
22 Windows Phone Масштабирование изображения 22
23 Windows Phone Масштабируемая область ballRectangle = new Rectangle( 0, 0, GraphicsDevice.Viewport.Width / 20, GraphicsDevice.Viewport.Width / 20); 23
24 Windows Phone Метод Update protected override void Update(GameTime gameTime) { // сюда нужно добавить код для обновления изображения base.Update(gameTime); } 24
25 Windows Phone Пример метода Update protected override void Update(GameTime gameTime) { ballRectangle.X++; ballRectangle.Y++; base.Update(gameTime); } 25
26 Windows Phone Краткие итоги 26
27 Раздел 7.2
28 Windows Phone Темы раздела 28
29 Windows Phone Управление движением объекта float ballX = 0; float ballY = 0; ballRectangle.X = (int)(ballX + 0.5f); ballRectangle.Y = (int)(ballY + 0.5f); 29
30 Windows Phone Перемещение объекта ballX = ballX + ballXSpeed; ballY = ballY + ballYSpeed; 30
31 Windows Phone Выход за пределы экрана 31
32 Windows Phone Отскок от границ экрана if (ballX < 0 || ballX + ballRectangle.Width > GraphicsDevice.Viewport.Width) { ballXSpeed = -ballXSpeed; } 32
33 Windows Phone Игровые переменные // шар Texture2D ballTexture; Rectangle ballRectangle; float ballX; float ballY; float ballXSpeed = 3; float ballYSpeed = 3; // левая платформа Texture2D lPaddleTexture; Rectangle lPaddleRectangle; float lPaddleSpeed = 4; float lPaddleY; // правая платформа создаётся аналогично // расстояние от платформы до границы экрана int margin; 33
34 Windows Phone Загрузка игровых текстур protected override void LoadContent() { ballTexture = Content.Load ("ball"); lPaddleTexture = Content.Load ("lpaddle"); rPaddleTexture = Content.Load ("rpaddle"); } 34
35 Windows Phone Настройка платформ margin = GraphicsDevice.Viewport.Width / 20; lPaddleRectangle = new Rectangle( margin, 0, GraphicsDevice.Viewport.Width / 20, GraphicsDevice.Viewport.Height / 5); rPaddleRectangle = new Rectangle( GraphicsDevice.Viewport.Width – lPaddleRectangle.Width - margin, 0, GraphicsDevice.Viewport.Width / 20, GraphicsDevice.Viewport.Height / 5); 35
36 Windows Phone Управление платформой 36
37 Windows Phone Класс TouchPanel TouchCollection touches = TouchPanel.GetState(); 37
38 Windows Phone Информация о сенсорном вводе if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } 38
39 Windows Phone Информация о сенсорном вводе if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } 39
40 Windows Phone Информация о сенсорном вводе if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } 40
41 Windows Phone Информация о сенсорном вводе if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } 41
42 Windows Phone Информация о сенсорном вводе if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } 42
43 Windows Phone Информация о сенсорном вводе if (touches.Count > 0) { if (touches[0].Position.Y > GraphicsDevice.Viewport.Height / 2) { lPaddleY = lPaddleY + lPaddleSpeed; } else { lPaddleY = lPaddleY - lPaddleSpeed; } 43
44 Windows Phone Обнаружение столкновений if (ballRectangle.Intersects(lPaddleRectangle)) { ballXSpeed = -ballXSpeed; } 44
45 Windows Phone Добавление шрифта 45
46 Windows Phone Загрузка шрифта SpriteFont font; protected override void LoadContent() { // остальная часть метода LoadContent font = Content.Load ("MessageFont"); } 46
47 Windows Phone Отрисовка текста protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.DrawString( font, "Hello world", new Vector2(100, 100), Color.White); // остальная часть метода Draw } 47
48 Windows Phone Краткие итоги 48
49 Раздел 7.3
50 Windows Phone Темы раздела 50
51 Windows Phone Акселерометр 51
52 Windows Phone Акселерометр в XNA
53 Windows Phone Добавление библиотеки using Microsoft.Devices.Sensors; 53
54 Windows Phone Класс Accelerometer Accelerometer acc = new Accelerometer(); acc.ReadingChanged += new EventHandler (acc_ReadingChanged); acc.Start(); 54
55 Windows Phone Событие класса Accelerometer Vector3 accelState = Vector3.Zero; void acc_ReadingChanged (object sender, AccelerometerReadingEventArgs e) { accelState.X = (float)e.X; accelState.Y = (float)e.Y; accelState.Z = (float)e.Z; } 55
56 Windows Phone Акселерометр и ориентация 56
57 Windows Phone Эмуляция акселерометра 57
58 Windows Phone Многопоточность 58
59 Windows Phone Возможные проблемы 59
60 Windows Phone Добавление блокировки 60
61 Windows Phone Использование блокировки object accelLock = new object(); void acc_ReadingChanged (object sender, AccelerometerReadingEventArgs e) { lock (accelLock) { accelState.X = (float)e.X; accelState.Y = (float)e.Y; accelState.Z = (float)e.Z; } 61
62 Windows Phone Использование блокировки lock (accelLock) { lPaddleY = lPaddleY - (accelState.X * lPaddleSpeed); } 62
63 Windows Phone Использование звуков в XNA 63
64 Windows Phone Загрузка звуков // звуковые эффекты SoundEffect dingSound; SoundEffect explodeSound; protected override void LoadContent() { dingSound = Content.Load ("ding"); explodeSound = Content.Load ("explode"); } 64
65 Windows Phone Воспроизведение звука if (ballY GraphicsDevice.Viewport.Height) { ballYSpeed = -ballYSpeed; dingSound.Play(); } 65
66 Windows Phone Класс SoundEffectInstance engineInstance = engineSound.CreateInstance(); 66
67 Windows Phone Воспроизведение звука engineInstance.Play();... engineInstance.Pause();... engineInstance.Stop(); 67
68 Windows Phone Управление звуком engineInstance.Volume = accelVector.Length() / volFactor; engineInstance.Pitch = accelVector.Length() / soundFactor; engineInstance.Pan = 0; 68
69 Windows Phone Состояние воспроизведения if (engineInstance.State == SoundState.Stopped) { engineInstance.Play(); } 69
70 Windows Phone Воспроизведение звуковых эффектов в Silverlight 70
71 Windows Phone Добавление XNA в приложение Silverlight 71
72 Windows Phone Загрузка звуков 72 Beep = SoundEffect.FromStream( TitleContainer.OpenStream("Sounds/beep.wav"));
73 Windows Phone Воспроизведение звука 73 beep.Play();
74 Windows Phone Обновление XNA 74 DispatcherTimer timer = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = TimeSpan.FromTicks(333333); timer.Start(); void timer_Tick(object sender, EventArgs e) { FrameworkDispatcher.Update(); }
75 Windows Phone Выбор разрешения экрана 75
76 Windows Phone Полноэкранный режим 76
77 Windows Phone Отмена блокировки экрана Guide.IsScreenSaverEnabled = false; 77
78 Windows Phone Краткие итоги 78
79 Раздел
80 Windows Phone Темы раздела 80
81 Windows Phone XNA и Silverlight 81
82 Windows Phone Комбинированное решение 82
83 Windows Phone Страница игры XNA 83
84 Windows Phone Переход на страницу игры private void Button_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/GamePage.xaml", UriKind.Relative)); } 84
85 Windows Phone Страница игры protected override void OnNavigatedTo(NavigationEventArgs e) protected override void OnNavigatedFrom(NavigationEventArgs e) private void OnUpdate(object sender, GameTimerEventArgs e) private void OnDraw(object sender, GameTimerEventArgs e) 85
86 Windows Phone Элементы Silverlight в XNA 86
87 Windows Phone Добавление элементов Silverlight 87
88 Windows Phone Рендеринг элементов Silverlight UIElementRenderer elementRenderer; 88
89 Windows Phone Создание объекта для рендеринга if (null == elementRenderer) { elementRenderer = new UIElementRenderer(this, (int)ActualWidth, (int)ActualHeight); } 89
90 Windows Phone Рендеринг элементов Silverlight elementRenderer.Render();... spriteBatch.Draw(elementRenderer.Texture, Vector2.Zero, Color.White); 90
91 Windows Phone Краткие итоги 91
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.