36
Podstawy tworzenia gier w J2ME, dla początkujących adeptów sztuki programowania Marcin Stachniuk [email protected] Blog: mstachniuk.blogspot.com Twitter: @MarcinStachniuk 27 maja 2012 Marcin Stachniuk Podstawy tworzenia gier w J2ME 1/34

Podstawy tworzenia gier w J2ME, dla początkujących adeptów sztuki programowania

Embed Size (px)

DESCRIPTION

Prezentacja pokazująca podstawy tworzenia gier w technologii J2ME z wykorzystaniem niskopoziomowego API.Prezentacja dla osób zaczynających przygodę z programowaniem.

Citation preview

  • 1. Podstawy tworzenia gier w J2ME, dlapocztkujcych adeptw sztuki programowania Marcin Stachniuk [email protected] Blog: mstachniuk.blogspot.comTwitter: @MarcinStachniuk 27 maja 2012Marcin StachniukPodstawy tworzenia gier w J2ME 1/34

2. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 2/34 3. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 3/34 4. GameCanvasGameCanvasPrzestrze po ktrej bdziemy malowa.Marcin Stachniuk Podstawy tworzenia gier w J2ME 4/34 5. GameCanvas - moliwociMetody:setFullScreenMode(true); ustawienie penego ekranu.Graphics g = getGraphics(); pobranie buforugracznego.flushGraphics(); namalowanie graki z buforaMarcin Stachniuk Podstawy tworzenia gier w J2ME 5/34 6. GraphicsGraphicsKlasa suca do rysowania prymityww, obrazkw i tekstw.Metody:g.setColor(0xFFFFFF) / g.setColor(255, 255, 255) ustawienie aktualnego koloru na biayg.drawRect(10, 20, 50, 60) malowanie prostokta wpunkcie [10,20] i szerokoci 50px i wysokoci 60pxg.fillRect(10, 20, 50, 60) malowanie wypenionegoprostoktaMarcin StachniukPodstawy tworzenia gier w J2ME 6/34 7. ImageImageKlasa suca do wczytywania obrazkw.Metody:Image tankImage = createImage("tank.png"); wczytywanie obrazka z pliku tank.pngtankImage.getHeight() pobranie wysokoci obrazkatankImage.getWidth() pobranie szerokoci obrazkaMarcin Stachniuk Podstawy tworzenia gier w J2ME 7/34 8. Szkielet aplikacji cz. 1 Gwna ptla programu Tank2012.java 1public void run() { 2while (!canvas.isEndGame()) { // dopoki gra sie nie skonczya 3try { 4canvas.inputKeys(); // obsluga wcisnietych klawiszy 5canvas.think(); // pozostala logika gry 6canvas.paint(); // odmalowanie ekranu 7Thread.sleep(100); // uspienie watku na 100 ms 8} catch (Exception ex) { 9ex.printStackTrace();10}11}12destroyApp(false); // sprzatanie przed zamknieciem aplikacji13notifyDestroyed(); // zamkniecie aplikacji14} Marcin Stachniuk Podstawy tworzenia gier w J2ME 8/34 9. Szkielet aplikacji cz. 2 Tu bdzie nasza implementacja TankGameCanvas.java 1 public class TankGameCanvas extends AbstractTankCanvas { 2 /** Przygotowanie aplikacji */ 3 public void init() { 4 } 5 6 /** Metoda odpowiedzialna za malowanie po ekranie */ 7 public void paint() { 8 } 910 /** Obsluga naciskanych klawiszy. */11 public void inputKeys() {12 }1314 /** Miejsce na logike aplikacji. */15 public void think() {16 }1718 /** Metoda informujaca, czy gra sie juz zakonczyla czy nie. */19 public boolean isEndGame() {20 }21 } Marcin StachniukPodstawy tworzenia gier w J2ME 9/34 10. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 10/34 11. Obsuga klawiszy gry w GameCanvasMetody klasy GameCanvasint keyStates = getKeyStates(); pobranie stanuwcinitych klawiszy(keyStates & LEFT PRESSED) != 0 sprawdzenie czynacinito w lewoKlawisze akcji gryDOWN PRESSED, LEFT PRESSED, RIGHT PRESSED,UP PRESSED, FIRE PRESSED, GAME A PRESSED,GAME B PRESSED, GAME C PRESSED, GAME D PRESSEDMarcin Stachniuk Podstawy tworzenia gier w J2ME 11/34 12. Obsuga klawiszy przykad1if ((keyStates & LEFT_PRESSED) != 0) {2// dalsza logika3}Marcin StachniukPodstawy tworzenia gier w J2ME 12/34 13. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 13/34 14. Spritehttp://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/Sprite.html Marcin Stachniuk Podstawy tworzenia gier w J2ME 14/34 15. Sprite podstawowe waciwociUtworzenie Spritea:tank = new Sprite(tankImage, 30, 30); utworzenieSprite dla czoguMetody:tank.paint(Graphics g) namalowanie czogutank.setVisible(true) czog staje si widocznytank.setVisible(false) czog staje si niewidocznytank.isVisible() sprawdzenie czy czog jest widocznyMarcin Stachniuk Podstawy tworzenia gier w J2ME 15/34 16. Sprite pozycja, wielko i zmiana pozycjiMetody:tank.getX() pobranie wsprzdnej X dla czogutank.getY() pobranie wsprzdnej Y dla czogutank.getHeight() pobranie wysokoci dla czogutank.getWidth() pobranie szerokoci dla czogutank.setPosition(2, 3) ustawienie pozycji czoguw punkcie [2, 3]tank.move(5, 8) przesuniecie czogu o wektor [5, 8]tank.defineReferencePixel(1, 5) denicja pikselareferencyjnego dla czogutank.setRefPixelPosition(4, 6) ustawienie pozycjipiksela referencyjnego czogu w pozycji [4, 6]Marcin StachniukPodstawy tworzenia gier w J2ME 16/34 17. ZadaniaZadanie 1Dopisa poruszanie si czogu w pionie i poziomie, za pomocstrzaek na klawiaturze telefonu.Zadanie 2Dopisa ograniczenie aby czog nie wyjeda po za ekran.Marcin StachniukPodstawy tworzenia gier w J2ME 17/34 18. ZadaniaZadanie 1Dopisa poruszanie si czogu w pionie i poziomie, za pomocstrzaek na klawiaturze telefonu.Zadanie 2Dopisa ograniczenie aby czog nie wyjeda po za ekran.Marcin StachniukPodstawy tworzenia gier w J2ME 17/34 19. Sprite - moliwo animacjiMetody:tank.setFrameSequence(new int [] 2,3,0,1) ustawienie sekwencji animacji na klatki (2,3,0,1)tank.nextFrame() ustawienie nastpnej klatkitank.prevFrame() ustawienie poprzedniej klatkitank.getFrame() pobranie numeru aktualnej klatkitank.setFrame(3) wybranie 3ciej klatki animacjiMarcin StachniukPodstawy tworzenia gier w J2ME 18/34 20. ZadaniaZadanie 3Dopisa obracanie czogu luf w kierunku jazdy.Marcin StachniukPodstawy tworzenia gier w J2ME 19/34 21. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 20/34 22. TiledLayerhttp://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/TiledLayer.htmlMarcin StachniukPodstawy tworzenia gier w J2ME 21/34 23. TiledLayerhttp://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/TiledLayer.htmlMarcin StachniukPodstawy tworzenia gier w J2ME 22/34 24. TiledLayer podstawyKonstruktor:tiles = new TiledLayer(4, 6, image, 20, 20); utworzenie nowego TiledLayera o 4ch kolumnach, 6ciuwierszach i rozmiarze pojedynczego kafelka 20x20.Metody:tiles.setCell(2, 3, 1) - ustawienie kafelka nr. 1 napozycji [2,3]Marcin StachniukPodstawy tworzenia gier w J2ME 23/34 25. ZadaniaZadanie 4Wywietli TiledLayera z traw na ekranie. Czog moe sischowa w trawie.Marcin StachniukPodstawy tworzenia gier w J2ME 24/34 26. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 25/34 27. Sprite, TiledLayer - wykrywanie kolizjiMetody w Sprite: tank.collidesWith(missile, false) test kolizji czogu z innym Spritem (missile) tank.collidesWith(tiles, false) sprawdzanie kolizji czogu z kafelkiem TiledLayera Marcin StachniukPodstawy tworzenia gier w J2ME 26/34 28. ZadaniaZadanie 5Wywietli TiledLayera z biaymi cegami i wod na ekranie.Przez biae cegy i wod nie mona przejecha.Podpowied: Uyj nowego TiledLayera.Marcin StachniukPodstawy tworzenia gier w J2ME 27/34 29. Plan prezentacji1 Podstawy rysowania2 Obsuga klawiszy3 Sprite4 TiledLayer5 Wykrywanie kolizji6 AnimacjaMarcin Stachniuk Podstawy tworzenia gier w J2ME 28/34 30. TiledLayer animacjaMetody:int animatedTile = tiles.createAnimatedTile(0); -utworzenie animowanego kafelkatiles.setAnimatedTile(animatedTile, 2) - ustawienieanimowanego kafelka o numerze animatedTile na kafeleknr. 2.Marcin Stachniuk Podstawy tworzenia gier w J2ME 29/34 31. ZadaniaZadanie 6Spraw, aby woda si animowaa.Zadanie 7Wywietl na ekranie mr z czerwonych cegie i spraw, aby monabyo zniszczy cegy za pomoc wystrzeliwanych pociskw.Podpowied 1: Dla kadego murku utwrz pojedynczego Spritea.Podpowied 2: Dla Spritea bdcego pociskiem zdeniuj pixelreferencyjny w jego centrum.Marcin StachniukPodstawy tworzenia gier w J2ME 30/34 32. ZadaniaZadanie 6Spraw, aby woda si animowaa.Zadanie 7Wywietl na ekranie mr z czerwonych cegie i spraw, aby monabyo zniszczy cegy za pomoc wystrzeliwanych pociskw.Podpowied 1: Dla kadego murku utwrz pojedynczego Spritea.Podpowied 2: Dla Spritea bdcego pociskiem zdeniuj pixelreferencyjny w jego centrum.Marcin StachniukPodstawy tworzenia gier w J2ME 30/34 33. EfektPowinnimy osign co takiego:Marcin Stachniuk Podstawy tworzenia gier w J2ME 31/34 34. Pytania ?Marcin Stachniuk Podstawy tworzenia gier w J2ME 32/34 35. Wicej informacjiKontakt z autorem:e-mail: [email protected]: mstachniuk.blogspot.comtwitter: @MarcinStachniukKod rdowy:https://github.com/mstachniuk/tank2012j2meMarcin StachniukPodstawy tworzenia gier w J2ME 33/34 36. Podstawy tworzenia gier w J2ME, dlapocztkujcych adeptw sztuki programowania Marcin Stachniuk [email protected] Dziki za uwag! 27 maja 2012Marcin StachniukPodstawy tworzenia gier w J2ME 34/34