Programowanie telefonów z Windows Phone 7, cz. 3



Podobne dokumenty
Programowanie telefonów z Windows Phone 7, cz. 5

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Programowanie telefonów z Windows Phone 7, cz. 2

Politechnika Poznańska, Instytut Informatyki, SUM-TWO

Rozdział 4 Komponenty gry na przykładzie prostopadłościanu

Programowanie telefonów z Windows Phone 7, cz. 4

Rozdział 6 Cienie rzucane. Mieszanie kolorów

Systemy wirtualnej rzeczywistości. Sterowanie i wykrywanie kolizji

Rozdział 1 Podstawowe koncepcje grafiki 3D

Systemy wirtualnej rzeczywistości. Podstawy grafiki 3D

Unity 2D - prosta gra

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Unity 3D - własny ekran startowy i menu gry

Stereoskopia. Implementacja w XNA 4.0

Programowanie obiektowe i zdarzeniowe

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Wykład 11: Programowanie Apletów

Wykład 5_2 Arkusze stylów dziedziczenie. Technologie internetowe Zofia Kruczkiewicz

Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)

Laboratorium programowania urządzeń mobilnych

Technologie i usługi internetowe cz. 2

Laboratorium 10 - Web Services

Programowanie Komputerów

Programowanie obiektowe

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Kurs programowania 2 - listy

Zaawansowany kurs języka Python

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Microsoft IT Academy kurs programowania

Windows Vista i DirectX 10 to największe

Programowanie Procesorów Graficznych

Spis treści. 1 Aplet. 2 Od aplikacji do apletu. 1 Aplet 1. 2 Od aplikacji do apletu 1. 3 Budowa apletu 3. 4 Cykl życia apletu 4

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

2 Przygotował: mgr inż. Maciej Lasota

Klasy i obiekty cz II

Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows

Podstawy programowania obiektowego

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Enkapsulacja, dziedziczenie, polimorfizm

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Grafika trójwymiarowa

Rozdział 2, Kilka praktycznych uwag dotyczących projektów gier w MonoGame

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Język Java. Rysowanie GUI Określanie wyglądu komponentów

Metody Metody, parametry, zwracanie wartości

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Klasy abstrakcyjne i interfejsy

Języki programowania imperatywnego

Programowanie obiektowe

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Podstawy Języka Java

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Grafika 3D na przykładzie XNA 3.1

Mechanizm dziedziczenia

Programowanie obiektowe

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Podstawy Programowania Obiektowego

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Rozdział 5 Oświetlenie: cienie własne i rzucane. Mieszanie kolorów

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

Programowanie obiektowe

MVC w praktyce tworzymy system artykułów. cz. 1

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Unity 3D - pierwsze skrypty

Unity 3D - podpowiedzi w grze. System cząstek

Wykład 2 Składnia języka C# (cz. 1)

Platformy Programistyczne Podstawy języka Java

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Podstawy i języki programowania

Plan wykładu. Tworzenie programów dla platformy.net. Predefiniowane typy C# Pierwszy program. Typy wartości i typy referencyjne

Programowanie aplikacji okienkowych Windows

Programowanie obiektowe i zdarzeniowe

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Gry Komputerowe Laboratorium 3. Organizacja obiektów sceny Kolizje obiektów. mgr inż. Michał Chwesiuk 1/20. Szczecin, r

Wstęp do JUNG. Omówione elementy wykorzystane w Edge Color Project

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie obiektowe

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie obiektowe

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Wykład 4: Klasy i Metody

Mapowanie sześcienne otoczenia (cubic environment mapping)

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Grafika komputerowa i wizualizacja

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy programowania obiektowego

Transkrypt:

Programowanie telefonów z Windows Phone 7, cz. 3 Piotr M. Szczypiński Instytut Elektroniki Politechniki Łódzkiej http://www.eletel.p.lodz.pl/pms/ piotr.szczypinski@p.lodz.pl Budynek B9, II piętro, pokój 217A 1/34

Dziś w menu 1. XNA i grafika raczej płaska wypisywanie tekstu w XNA SpriteFont wyświetlanie map bitowych Texture2D obsługa ekranu dotykowego TouchCollection wykrywanie kolizji BoundingBox efekty dźwiękowe SoundEffect 2. XNA i trójwymiarowość definiowanie obiektów trójwymiarowych transformacje współrzędnych obiektów ustawienie kamery i rzutowanie obrazu na płaszczyznę ekranu bryła obcinania, ukrywanie ścianek 2/34

XNA i grafika raczej płaska Zróbmy prostą grę z dwoma obiektami (ang. sprite). Jeden z obiektów będzie się poruszał i odbijał od brzegów ekranu. Położenie drugiego obiektu będziemy kontrolować dotykając ekran. Obiekty będą się zderzać, kolizję trzeba wykryć i wygenerować efekt dźwiękowy. 3/34

XNA i grafika raczej płaska Przed utworzeniem nowego projektu trzeba przygotować mapy bitowe spritów (z przeźroczystością) i dźwięk efektu zderzenia. brzdek.wav sprite1.png sprite2.png 4/34

5/34

1 (add existing item) 2 3 6/34

1 (add new item) 2 7/34

2 1 8/34

9/34

Wypisywanie tekstu public class Game1 : Microsoft.Xna.Framework.Game GraphicsDeviceManager graphics; SpriteBatch spritebatch; string text = "Witaj XNA"; SpriteFont font1; Vector2 textposition1; public Game1() graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content";... // Frame rate is 30 fps by default for Windows Phone. TargetElapsedTime = TimeSpan.FromTicks(333333); Update() Draw() 10/34

Wypisywanie tekstu protected override void LoadContent() // Create a new SpriteBatch, which can be used to draw textures. spritebatch = new SpriteBatch(GraphicsDevice); font1 = this.content.load<spritefont>("spritefont1"); Vector2 textsize = font1.measurestring(text); Viewport viewport = this.graphicsdevice.viewport; textposition1 = new Vector2((viewport.Width - textsize.x) / 2, (viewport.height - textsize.y) / 2); 11/34

Wypisywanie tekstu protected override void Draw(GameTime gametime) GraphicsDevice.Clear(Color.SaddleBrown); spritebatch.begin(); spritebatch.drawstring(font1, text, textposition1, Color.Black); spritebatch.end(); base.draw(gametime); 12/34

Wyświetlanie map bitowych public class Game1 : Microsoft.Xna.Framework.Game GraphicsDeviceManager graphics; SpriteBatch spritebatch; string text = "Witaj XNA"; SpriteFont font1; Vector2 textposition1; Texture2D texture1; Texture2D texture2; Vector2 spriteposition1; Vector2 spriteposition2; Vector2 spritespeed1 = new Vector2(100.0f, 50.0f); SoundEffect soundeffect;... 13/34

Wyświetlanie map bitowych protected override void LoadContent()... texture1 = Content.Load<Texture2D>("sprite1"); texture2 = Content.Load<Texture2D>("sprite2"); soundeffect = Content.Load<SoundEffect>("brzdek"); spriteposition1.x = 0; spriteposition1.y = 0; spriteposition2.x = graphics.graphicsdevice.viewport.width - texture2.width; spriteposition2.y = graphics.graphicsdevice.viewport.height - texture2.height; 14/34

Wyświetlanie map bitowych protected override void Update(GameTime gametime) if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.exit(); UpdateSprite(gameTime, ref spriteposition1, ref spritespeed1); base.update(gametime); protected override void Draw(GameTime gametime)... spritebatch.begin(spritesortmode.backtofront, BlendState.AlphaBlend); spritebatch.draw(texture1, spriteposition1, Color.White); spritebatch.end(); base.draw(gametime); 15/34

UpdateSprite(GameTime gametime, ref Vector2 spriteposition, ref Vector2 spritespeed) void spriteposition += spritespeed * (float)gametime.elapsedgametime.totalseconds; int int int int Right = graphics.graphicsdevice.viewport.width - texture1.width; Left = 0; Bottom = graphics.graphicsdevice.viewport.height - texture1.height; Top = 0; if (spriteposition.x > Right) spritespeed.x *= -1; spriteposition.x else if (spriteposition.x < Left) spritespeed.x *= -1; spriteposition.x if (spriteposition.y > Bottom) spritespeed.y *= -1; spriteposition.y else if (spriteposition.y < Top) spritespeed.y *= -1; spriteposition.y = Right; = Left; = Bottom; = Top; 16/34

Obsługa ekranu dotykowego protected override void Update(GameTime gametime) if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.exit(); TouchCollection touchlocations = TouchPanel.GetState(); if (touchlocations.count > 0) foreach (TouchLocation touchlocation in touchlocations) if (touchlocation.state == TouchLocationState.Pressed touchlocation.state == TouchLocationState.Moved) spriteposition2.x = touchlocation.position.x - texture2.width / 2; spriteposition2.y = touchlocation.position.y - texture2.height / 2; //spriteposition2 = touchlocation.position;... 17/34

Obsługa ekranu dotykowego protected override void Draw(GameTime gametime) GraphicsDevice.Clear(Color.SaddleBrown); spritebatch.begin(); spritebatch.drawstring(font1, text, textposition1, Color.Black); spritebatch.end(); spritebatch.begin(spritesortmode.backtofront, BlendState.AlphaBlend); spritebatch.draw(texture1, spriteposition1, Color.White); spritebatch.end(); spritebatch.begin(spritesortmode.backtofront, BlendState.AlphaBlend); spritebatch.draw(texture2, spriteposition2, Color.White); spritebatch.end(); base.draw(gametime); 18/34

Wykrywanie kolizji i efekty dźwiękowe protected override void Update(GameTime gametime)... CheckForCollision(); base.update(gametime); 19/34

CheckForCollision() void BoundingBox bb1 = new BoundingBox( new Vector3(spritePosition1.X spriteposition1.y new Vector3(spritePosition1.X + spriteposition1.y + BoundingBox bb2 = new BoundingBox( new Vector3(spritePosition2.X spriteposition2.y new Vector3(spritePosition2.X + spriteposition2.y + (texture1.bounds.width / 2), (texture1.bounds.height / 2), 0), (texture1.bounds.width / 2), (texture1.bounds.height / 2), 0)); (texture2.bounds.width / 2), (texture2.bounds.height / 2), 0), (texture2.bounds.width / 2), (texture2.bounds.height / 2), 0)); if (bb1.intersects(bb2)) soundeffect.play(); spritespeed1.x *= -1; spritespeed1.y *= -1; 20/34

Grafika 3D wprowadzenie Wszystko można zrobić z trójkątów Nie interesuje nas wnętrze bryły 21/34

Grafika 3D wprowadzenie Układy współrzędnych Transformacje układów współrzędnych 22/34

Grafika 3D wprowadzenie Rzutowanie perspektywiczne 23/34

Grafika 3D wprowadzenie Bryła obcinania 24/34

Grafika 3D wprowadzenie Face culling ukrywanie ścianek Bufor Z ukrywanie tego co przesłonięte 25/34

XNA i trójwymiarowość 26/34

XNA i trójwymiarowość public class Game1 : Microsoft.Xna.Framework.Game GraphicsDeviceManager graphics; //SpriteBatch spritebatch; Vector3 cameraposition = new Vector3(0, 20, 50); Vector3 cameratarget = new Vector3(0, 0, 0); Vector3 upvector = new Vector3(0, 1, 0); float fieldofview = 0.4f; Matrix worldmatrix, viewmatrix, projectionmatrix; public float angle = 0f; VertexPositionColor[] trianglevertices; BasicEffect triangleeffect;... 27/34

protected override void LoadContent() //spritebatch = new SpriteBatch(GraphicsDevice); int i = 0; Vector3 punktw = new Vector3(0, 10, 0); Vector3 punkta = new Vector3(-7, 0, 3); Vector3 punktb = new Vector3(7, 0, 3); Vector3 punktc = new Vector3(0, 0, -6); trianglevertices = new VertexPositionColor[12]; trianglevertices[i++] = new VertexPositionColor(punktW, Color.Yellow); trianglevertices[i++] = new VertexPositionColor(punktA, Color.Green); trianglevertices[i++] = new VertexPositionColor(punktC, Color.Green); trianglevertices[i++] = new VertexPositionColor(punktW, Color.Yellow); trianglevertices[i++] = new VertexPositionColor(punktB, Color.Blue); trianglevertices[i++] = new VertexPositionColor(punktC, Color.Blue); trianglevertices[i++] = new VertexPositionColor(punktW, Color.Yellow); trianglevertices[i++] = new VertexPositionColor(punktA, Color.Red); trianglevertices[i++] = new VertexPositionColor(punktB, Color.Red); trianglevertices[i++] = new VertexPositionColor(punktA, Color.Black); trianglevertices[i++] = new VertexPositionColor(punktC, Color.Black); trianglevertices[i++] = new VertexPositionColor(punktB, Color.Black); 28/34

triangleeffect = new BasicEffect(GraphicsDevice); triangleeffect.vertexcolorenabled = true; viewmatrix = Matrix.CreateLookAt(cameraPosition, cameratarget, upvector); projectionmatrix = Matrix.CreatePerspectiveFieldOfView(fieldOfView, GraphicsDevice.Viewport.AspectRatio, 1.0f, 300.0f); 29/34

protected override void Update(GameTime gametime) if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.exit(); angle += (float)(0.3f * gametime.elapsedgametime.totalseconds); base.update(gametime); protected override void Draw(GameTime gametime) GraphicsDevice.Clear(Color.CornflowerBlue); worldmatrix = Matrix.CreateRotationY(angle); triangleeffect.world = worldmatrix; triangleeffect.view = viewmatrix; triangleeffect.projection = projectionmatrix; // Process each Technique in the Effect. foreach (EffectPass pass in triangleeffect.currenttechnique.passes) pass.apply(); GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, trianglevertices, 0, 4, VertexPositionColor.VertexDeclaration); base.draw(gametime); 30/34

Ukrywanie ścianek? 31/34

Ukrywanie ścianek! trianglevertices[i++] = new VertexPositionColor(punktW, Color.Yellow); trianglevertices[i++] = new VertexPositionColor(punktB, Color.Blue); trianglevertices[i++] = new VertexPositionColor(punktC, Color.Blue); W B C W C B trianglevertices[i++] = new VertexPositionColor(punktW, Color.Yellow); trianglevertices[i++] = new VertexPositionColor(punktC, Color.Blue); trianglevertices[i++] = new VertexPositionColor(punktB, Color.Blue); 32/34

Więcej o grafice 3D 33/34

...i na tym koniec trzeciej części wykładu 34/34