SlideShare a Scribd company logo
1 of 44
Download to read offline
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009




     Tworzenie graficznego inferface’u użytkownika
                  niskiego poziomu

                                 Marcin Stachniuk
                               mstachniuk@gmail.com

                              Politechnika Wrocławska
                                 Wydział Elektroniki
           Studenckie Koło Naukowe Informatyki Systemów Autonomicznych
                               i Adaptacyjnych ISA2


                                    5 listopad 2009



Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    1/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                 Tworzenie GUI niskiego poziomu    2/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                 Tworzenie GUI niskiego poziomu    3/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Displayable




  Display.setCurrent(Displayable nextDisplayable) - ustawienie co ma
  być wyswietlane na ekranie



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    4/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Canvas
  Canvas
  Klasa bazowa do pisania aplikacji wykorzystujących GUI
  niskopoziomowe (low-level).
  O Canvas’ie należy myśleć jak o przestrzeni po której możemy
  malować.




  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    5/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Canvas - możliwości


  Metody:
        boolean isDoubleBuffered() - test czy Canvas jest podwójnie
        buforowany
        repaint() - zgłoszenie konieczności odmalowania ekranu
        serviceRepaints() - wymuszenie odmalowania
        setFullScreenMode(boolean mode) - ustawienie pełnego
        ekranu (od MIDP 2.0)
        protected abstract void paint(Graphics g) - abstrakcyjna
        metoda, w której odbywa się rysowanie




  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    6/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Graphics


  Graphics
  Klasa służąca do rysowania prymitywów, obrazków i tekstów.

  Metody:
        setColor(int RGB) / setColor(int red, int green, int blue) -
        ustawienie aktualnego koloru
        drawLine(int x1, int y1, int x2, int y2) - malowanie linii
        drawRect(int x, int y, int width, int height) - malowanie
        prostokąta
        fillRect(int x, int y, int width, int height) - malowanie
        wypełnionego prostokąta



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    7/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Graphics




  Malowanie tekstu:
        setFont(Font font) - ustawienie czcionki
        drawString(String str, int x, int y, int anchor) - wydrukowanie
        napisu
        drawChar(char character, int x, int y, int anchor) -
        wydrukowanie znaku




  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    8/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Graphics - anchor



  Wyrównanie textu w poziomie:
        LEFT - do lewej
        HCENTER - wyśrodkowane
        RIGHT - do prawej
  Wyrównanie textu w pionie:
        TOP - do góry
        BASELINE - wyśrodkowanie do lini bazowej
        BOTTOM - do dołu




  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    9/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Image



  Metody:
        static Image createImage(String name) - wczytywanie orazka
        z pliku
        int getHeight() - pobranie wysokości obrazka
        int getWidth() - pobranie szerokości obrazka

  Wyświetlanie za pomocą klasy Graphics:
        drawImage(Image img, int x, int y, int anchor) - malowanie
        obrazka




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    10/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Szkielet aplikacji cz. 1 I



     LowLevel01.java
 1         public class LowLevel01 extends MIDlet implements Runnable {
 2
 3         private LowLevelCanvas canvas;
 4
 5         public void startApp() {
 6                canvas = new LowLevelCanvas();
 7                Display display = Display.getDisplay(this);
 8                display.setCurrent(canvas);
 9                Thread thread = new Thread(this);
10                thread.start();
11         }




     Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    11/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Szkielet aplikacji cz. 2 I


     LowLevel01.java
 1    public void run() {
 2        while(!canvas.isEndGame()) {
 3            try {
 4                canvas.think();
 5                canvas.repaint();
 6                canvas.serviceRepaints();
 7                Thread.sleep(100);
 8            } catch (InterruptedException ex) {
 9                ex.printStackTrace();
10            }
11        }
12        destroyApp(false);
13        notifyDestroyed();
14    }




     Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    12/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Szkielet aplikacji cz. 3 I

     LowLevelCanvas.java
 1         public class LowLevelCanvas extends Canvas {
 2             private boolean endGame = false;
 3
 4               public LowLevelCanvas() {
 5                   init();
 6               }
 7
 8               private void init() {
 9               }
10
11               public void think() {
12               }
13
14               public void paint(Graphics g) {
15               }
16               public boolean isEndGame() {
17                   return endGame;
18               }
19         }


     Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    13/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Podstawy rysowania - demo




                     LowLevel01.zip               LowLevel02.zip


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    14/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    15/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Obsługa klawiszy

  Metody:
        keyPressed(int keyCode) - naciśnięto klawisz
        keyReleased(int keyCode) - puszczono klawisz
        keyRepeated(int keyCode) - powtórzono klawisz

  Kody klawiszy
  KEY NUM0, KEY NUM1, KEY NUM2, KEY NUM3,
  KEY NUM4, KEY NUM5, KEY NUM6, KEY NUM7,
  KEY NUM8, KEY NUM9, KEY STAR, KEY POUND

  Akcje gry
  UP, DOWN, LEFT, RIGHT, FIRE, GAME A, GAME B, GAME C,
  GAME D


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    16/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Obsługa klawiszy - przykład I


 1    protected void keyPressed(int keyCode) {
 2        switch (getGameAction(keyCode)) {
 3            case Canvas.LEFT:
 4                // naciśnięto w lewo
 5                break;
 6
 7               case Canvas.RIGHT:
 8                   // naciśnięto w prawo
 9                   break;
10          }
11    }




          LowLevel03.zip




     Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    17/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Obsługa ekranu dotykowego


  Metody:
        boolean hasPointerEvents() - test czy telefon obsługuje ekran
        dotykowy
        boolean hasPointerMotionEvents() - test czy telefon wspiera
        przesuwanie po ekranie dotykowym
        pointerPressed(int x, int y) - obsługa ”wciśnięcia” ekranu
        pointerReleased(int x, int y) - obsługa ”puszczenia” ekranu
        pointerDragged(int x, int y) - obsługa ”przesuwania”
        wskaźnikiem po ekranie




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    18/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    19/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

GameCanvas


  GameCanvas
  Rozszerzenie klasy Canvas, wpomagajace pisanie gier. Umożliwia
  zastosowanie podwójnego buffora przy malowaniu i statusu
  wciśniętych klawiszy.

  Metody:
        Graphics getGraphics() - uzyskanie dostępu do buffora
        ekranowego
        flushGraphics() - podmiana wyświetlanego buffora,
        odświeżenie ekranu
        int getKeyStates() - pobranie statusu klawiatury



  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    20/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

GameCanvas - Szkielet aplikacji cz. 1 I



     LowLevel04.java
 1    public void run() {
 2        while(!canvas.isEndGame()) {
 3            canvas.inputKeys();
 4            canvas.think();
 5            canvas.paint();
 6        }
 7        destroyApp(false);
 8        notifyDestroyed();
 9    }




     Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    21/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

GameCanvas - Szkielet aplikacji cz. 2 I
     LowLevelGameCanvas.java
 1    public LowLevelGameCanvas() {
 2        super(true);
 3        init();
 4    }
 5
 6    void paint() {
 7        Graphics g = getGraphics();
 8
 9          flushGraphics();
10    }
11
12    void inputKeys() {
13    }
14
15    void think() {
16    }




          LowLevel04.zip

     Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    22/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

GameCanvas - demo




     LowLevel05.zip


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    23/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    24/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                           5 listopad 2009

Sprite




  http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/Sprite.html



   Marcin Stachniuk                                                      Tworzenie GUI niskiego poziomu    25/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Sprite - podstawowe właściwości


  Metody:
        int getHeight() - pobranie wysokości
        int getWidth() - pobranie szerokości
        int getX() - pobranie współrzędnej X
        int getY() - pobranie współrzędnej Y
        setPosition(int x, int y) - ustawienie pozycji
        move(int dx, int dy) - przesuniecie o dany wektor
        paint(Graphics g) - namalowanie Sprite’a
        setVisible(boolean visible) - ustawienie widoczności
        boolean isVisible() - sprawdzenie widoczności



  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    26/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Sprite - możliwość animacji


  Konstruktor:
        Sprite(Image image, int frameWidth, int frameHeight)
  Metody:
        setFrameSequence(int[] sequence) - ustawienie sekwencji
        kolejnych klatek animacji
        nextFrame() - następna klatka
        prevFrame() - poprzednia klatka
        int getFrame() - pobranie numeru aktualnej klatki
        setFrame(int sequenceIndex) - ustawienie aktualnej klatki
        animacji



  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    27/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                           5 listopad 2009

Sprite - możliwość transformacji

  Transformacje:
  TRANS MIRROR, TRANS MIRROR ROT180,
  TRANS MIRROR ROT270, TRANS MIRROR ROT90,
  TRANS NONE, TRANS ROT180, TRANS ROT270,
  TRANS ROT90




  http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/Sprite.html



  Marcin Stachniuk                                                       Tworzenie GUI niskiego poziomu    28/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Sprite - demo




     LowLevel06.zip


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    29/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Sprite - wykrywanie kolizji

  Metody:
         boolean collidesWith(Image image, int x, int y, boolean
         pixelLevel) - test kolizji z obrazkiem
         boolean collidesWith(Sprite s, boolean pixelLevel) - test kolizji
         z innym Sprite’m
         defineCollisionRectangle(int x, int y, int width, int height) -
         definicja obszaru kolizyjnego




   Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    30/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Sprite - wykrywanie kolizji - demo




     LowLevel07.zip


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    31/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    32/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                          5 listopad 2009

TiledLayer




  http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/TiledLayer.html

  Marcin Stachniuk                                                      Tworzenie GUI niskiego poziomu    33/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                          5 listopad 2009

TiledLayer




  http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/TiledLayer.html




  Marcin Stachniuk                                                      Tworzenie GUI niskiego poziomu    34/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

TiledLayer

  Konstruktor:
        TiledLayer(int columns, int rows, Image image, int tileWidth,
        int tileHeight) - tworzenie nowego TiledLayer’a
  Metody:
        fillCells(int col, int row, int numCols, int numRows, int
        tileIndex) - częściowe wypełnianie wartościami
        setCell(int col, int row, int tileIndex) - ustawienie wartości
        danej komórki
        getAnimatedTile(int animatedTileIndex) - utworzenie
        animawonego kafelka
        setAnimatedTile(int animatedTileIndex, int staticTileIndex) -
        ustawienie numeru kafelka, który będzie teraz aktualny


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    35/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

TiledLayer - demo




     LowLevel08.zip


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    36/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Jak to wszystko wykorzystać?




  Sprite: boolean collidesWith(TiledLayer t, boolean pixelLevel) -
  sprawdzanie kolizji Sprite’a z TiledLayer’em




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    37/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Sprite i TiledLayer - demo




     LowLevel09.zip


  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    38/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

GameBuilder




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    39/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Plan prezentacji


  1   Podstawy rysowania

  2   Obsługa klawiszy i ekranu dotykowego

  3   Ulepszony Canvas

  4   Sprite

  5   TiledLayer

  6   Podsumowanie



  Marcin Stachniuk                                                Tworzenie GUI niskiego poziomu    40/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Czego się dzisiaj nauczyliśmy?




        Działanie Canvas’u i GameCanvas’u
        Malowanie po ekranie za pomocą Graphics
        Obsługa klawiszy
        Działanie klas Sprite i TiledLayer
        Jak można pisać pierwsze gry




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    41/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Pytania




                                                ?




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    42/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                     5 listopad 2009

Kolejne spotkanie




  Temat: Tworzenie GUI wysokiego poziomu
  Prowadzenie: Marcin Majak
  Data: 12.11.2009, godzina: 17.00
  Gdzie: sala 23 C-3




  Marcin Stachniuk                                               Tworzenie GUI niskiego poziomu    43/44
Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME                           5 listopad 2009

Więcej informacji

        Kontakt z autorem:
        mstachniuk@gmail.com
        Strona koła naukowego ISA2
        http://autonom.ict.pwr.wroc.pl/
        Strona warsztatów:
        http://autonom.ict.pwr.wroc.pl/∼mstachniuk
        Adres tego dokumentu:
        http://autonom.ict.pwr.wroc.pl/∼mstachniuk/files/warsztaty2009/03-lowlevel-2009.11.05.pdf
        Pliki z kodami źródłowymi wykorzystywanymi w prezentacji:
        http://autonom.ict.pwr.wroc.pl/∼mstachniuk/files/warsztaty2009/LowLevelAll.zip
        Tworzenie GUI niskiego poziomu
        http://midlety.net/site/praktyka/LowLevelGUI.html
        MID Profile - dokumentacja Javadoc
        http://java.sun.com/javame/reference/apis/jsr118/
        Creating 2D Action Games with the Game API
        http://developers.sun.com/mobility/midp/articles/game/
        Working with the TiledLayer Class
        http://www.dbarnes.com/midlet/tiledlayer/
        Getting Started With the MIDP 2.0 Game API
        http://developers.sun.com/mobility/midp/articles/gameapi/
        GameCanvas - czyli dalej rysujemy po ekranie
        http://4programmers.net/Java/J2ME/GameCanvas - czyli dalej rysujemy po ekranie
        NetBeans
        http://www.netbeans.org/




  Marcin Stachniuk                                                    Tworzenie GUI niskiego poziomu     44/44

More Related Content

Viewers also liked

Adecco Poland_Raport Płacowy_2015
Adecco Poland_Raport Płacowy_2015Adecco Poland_Raport Płacowy_2015
Adecco Poland_Raport Płacowy_2015Bartlomiej Rozmus
 
Wioski tematyczne - prezentacja na Forum Obszarów Wiejskich
Wioski tematyczne - prezentacja na Forum Obszarów WiejskichWioski tematyczne - prezentacja na Forum Obszarów Wiejskich
Wioski tematyczne - prezentacja na Forum Obszarów WiejskichKarol Gutsze
 
Ustawa o zmianie ustawy o usługach płatniczych
Ustawa o zmianie ustawy o usługach płatniczych Ustawa o zmianie ustawy o usługach płatniczych
Ustawa o zmianie ustawy o usługach płatniczych Grupa PTWP S.A.
 
Podroze do-wnetrza-siebie Joe Vitale
Podroze do-wnetrza-siebie Joe VitalePodroze do-wnetrza-siebie Joe Vitale
Podroze do-wnetrza-siebie Joe Vitalerumek320
 
Žandov 2011-Propozice
Žandov 2011-PropoziceŽandov 2011-Propozice
Žandov 2011-PropoziceFSM Multimedia
 
Wykład 15 Mechanika kwantowa - atom wodoru
Wykład 15 Mechanika kwantowa - atom wodoruWykład 15 Mechanika kwantowa - atom wodoru
Wykład 15 Mechanika kwantowa - atom wodorulojewska
 
Optymalizacja zapasow prezentacja-v2
Optymalizacja zapasow prezentacja-v2Optymalizacja zapasow prezentacja-v2
Optymalizacja zapasow prezentacja-v2Michal Pajdak
 
Strategia
StrategiaStrategia
Strategiaptwp
 
Kable Sieciowe
Kable SiecioweKable Sieciowe
Kable Sieciowearkulik
 
Zenobia Niculita - Psihosociologia comunitatilor virtuale
Zenobia Niculita - Psihosociologia comunitatilor virtualeZenobia Niculita - Psihosociologia comunitatilor virtuale
Zenobia Niculita - Psihosociologia comunitatilor virtualeCristian Niculita
 
Fae elementy rynku energii w polsce
Fae elementy  rynku energii w polsceFae elementy  rynku energii w polsce
Fae elementy rynku energii w polsceGrupa PTWP S.A.
 

Viewers also liked (18)

Adecco Poland_Raport Płacowy_2015
Adecco Poland_Raport Płacowy_2015Adecco Poland_Raport Płacowy_2015
Adecco Poland_Raport Płacowy_2015
 
Wioski tematyczne - prezentacja na Forum Obszarów Wiejskich
Wioski tematyczne - prezentacja na Forum Obszarów WiejskichWioski tematyczne - prezentacja na Forum Obszarów Wiejskich
Wioski tematyczne - prezentacja na Forum Obszarów Wiejskich
 
Ustawa o zmianie ustawy o usługach płatniczych
Ustawa o zmianie ustawy o usługach płatniczych Ustawa o zmianie ustawy o usługach płatniczych
Ustawa o zmianie ustawy o usługach płatniczych
 
Podroze do-wnetrza-siebie Joe Vitale
Podroze do-wnetrza-siebie Joe VitalePodroze do-wnetrza-siebie Joe Vitale
Podroze do-wnetrza-siebie Joe Vitale
 
Matazd
MatazdMatazd
Matazd
 
Žandov 2011-Propozice
Žandov 2011-PropoziceŽandov 2011-Propozice
Žandov 2011-Propozice
 
Anglia
AngliaAnglia
Anglia
 
TrendBook2012
TrendBook2012TrendBook2012
TrendBook2012
 
Wykład 15 Mechanika kwantowa - atom wodoru
Wykład 15 Mechanika kwantowa - atom wodoruWykład 15 Mechanika kwantowa - atom wodoru
Wykład 15 Mechanika kwantowa - atom wodoru
 
Optymalizacja zapasow prezentacja-v2
Optymalizacja zapasow prezentacja-v2Optymalizacja zapasow prezentacja-v2
Optymalizacja zapasow prezentacja-v2
 
Strategia
StrategiaStrategia
Strategia
 
Podstawy oceny EKG
Podstawy oceny EKGPodstawy oceny EKG
Podstawy oceny EKG
 
Kable Sieciowe
Kable SiecioweKable Sieciowe
Kable Sieciowe
 
Zenobia Niculita - Psihosociologia comunitatilor virtuale
Zenobia Niculita - Psihosociologia comunitatilor virtualeZenobia Niculita - Psihosociologia comunitatilor virtuale
Zenobia Niculita - Psihosociologia comunitatilor virtuale
 
Fae elementy rynku energii w polsce
Fae elementy  rynku energii w polsceFae elementy  rynku energii w polsce
Fae elementy rynku energii w polsce
 
Rozbudowa domu czy warto?
Rozbudowa domu czy warto?Rozbudowa domu czy warto?
Rozbudowa domu czy warto?
 
TYTAN katalog produktow 2013 / 2014
TYTAN katalog produktow 2013 / 2014TYTAN katalog produktow 2013 / 2014
TYTAN katalog produktow 2013 / 2014
 
Biogaz
BiogazBiogaz
Biogaz
 

More from MarcinStachniuk

GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyGraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyMarcinStachniuk
 
Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaMarcinStachniuk
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoMarcinStachniuk
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedMarcinStachniuk
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using ShipkitMarcinStachniuk
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedMarcinStachniuk
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąMarcinStachniuk
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychMarcinStachniuk
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oMarcinStachniuk
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseMarcinStachniuk
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oMarcinStachniuk
 

More from MarcinStachniuk (20)

GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademyGraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
GraphQL - Piękne API w Twojej Aplikacji - KrakowGraphAcademy
 
Wroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in JavaWroclaw GraphQL - GraphQL in Java
Wroclaw GraphQL - GraphQL in Java
 
[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało[DevCrowd] GraphQL - gdy API RESTowe to za mało
[DevCrowd] GraphQL - gdy API RESTowe to za mało
 
GraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za małoGraphQL - gdy API RESTowe to za mało
GraphQL - gdy API RESTowe to za mało
 
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learnedBruJUG Brussels GraphQL when RESR API is to less - lessons learned
BruJUG Brussels GraphQL when RESR API is to less - lessons learned
 
[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit[WroclawJUG] Continuous Delivery in OSS using Shipkit
[WroclawJUG] Continuous Delivery in OSS using Shipkit
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.org
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danych
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4o
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object database
 
Zastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4oZastosowanie obiektowych baz danych na przykładzie db4o
Zastosowanie obiektowych baz danych na przykładzie db4o
 
Wprowadzenie do J2ME
Wprowadzenie do J2MEWprowadzenie do J2ME
Wprowadzenie do J2ME
 

02 Tworzenie graficznego inferface’u użytkownika niskiego poziomu w j2me

  • 1. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Tworzenie graficznego inferface’u użytkownika niskiego poziomu Marcin Stachniuk mstachniuk@gmail.com Politechnika Wrocławska Wydział Elektroniki Studenckie Koło Naukowe Informatyki Systemów Autonomicznych i Adaptacyjnych ISA2 5 listopad 2009 Marcin Stachniuk Tworzenie GUI niskiego poziomu 1/44
  • 2. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 2/44
  • 3. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 3/44
  • 4. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Displayable Display.setCurrent(Displayable nextDisplayable) - ustawienie co ma być wyswietlane na ekranie Marcin Stachniuk Tworzenie GUI niskiego poziomu 4/44
  • 5. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Canvas Canvas Klasa bazowa do pisania aplikacji wykorzystujących GUI niskopoziomowe (low-level). O Canvas’ie należy myśleć jak o przestrzeni po której możemy malować. Marcin Stachniuk Tworzenie GUI niskiego poziomu 5/44
  • 6. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Canvas - możliwości Metody: boolean isDoubleBuffered() - test czy Canvas jest podwójnie buforowany repaint() - zgłoszenie konieczności odmalowania ekranu serviceRepaints() - wymuszenie odmalowania setFullScreenMode(boolean mode) - ustawienie pełnego ekranu (od MIDP 2.0) protected abstract void paint(Graphics g) - abstrakcyjna metoda, w której odbywa się rysowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 6/44
  • 7. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Graphics Graphics Klasa służąca do rysowania prymitywów, obrazków i tekstów. Metody: setColor(int RGB) / setColor(int red, int green, int blue) - ustawienie aktualnego koloru drawLine(int x1, int y1, int x2, int y2) - malowanie linii drawRect(int x, int y, int width, int height) - malowanie prostokąta fillRect(int x, int y, int width, int height) - malowanie wypełnionego prostokąta Marcin Stachniuk Tworzenie GUI niskiego poziomu 7/44
  • 8. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Graphics Malowanie tekstu: setFont(Font font) - ustawienie czcionki drawString(String str, int x, int y, int anchor) - wydrukowanie napisu drawChar(char character, int x, int y, int anchor) - wydrukowanie znaku Marcin Stachniuk Tworzenie GUI niskiego poziomu 8/44
  • 9. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Graphics - anchor Wyrównanie textu w poziomie: LEFT - do lewej HCENTER - wyśrodkowane RIGHT - do prawej Wyrównanie textu w pionie: TOP - do góry BASELINE - wyśrodkowanie do lini bazowej BOTTOM - do dołu Marcin Stachniuk Tworzenie GUI niskiego poziomu 9/44
  • 10. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Image Metody: static Image createImage(String name) - wczytywanie orazka z pliku int getHeight() - pobranie wysokości obrazka int getWidth() - pobranie szerokości obrazka Wyświetlanie za pomocą klasy Graphics: drawImage(Image img, int x, int y, int anchor) - malowanie obrazka Marcin Stachniuk Tworzenie GUI niskiego poziomu 10/44
  • 11. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Szkielet aplikacji cz. 1 I LowLevel01.java 1 public class LowLevel01 extends MIDlet implements Runnable { 2 3 private LowLevelCanvas canvas; 4 5 public void startApp() { 6 canvas = new LowLevelCanvas(); 7 Display display = Display.getDisplay(this); 8 display.setCurrent(canvas); 9 Thread thread = new Thread(this); 10 thread.start(); 11 } Marcin Stachniuk Tworzenie GUI niskiego poziomu 11/44
  • 12. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Szkielet aplikacji cz. 2 I LowLevel01.java 1 public void run() { 2 while(!canvas.isEndGame()) { 3 try { 4 canvas.think(); 5 canvas.repaint(); 6 canvas.serviceRepaints(); 7 Thread.sleep(100); 8 } catch (InterruptedException ex) { 9 ex.printStackTrace(); 10 } 11 } 12 destroyApp(false); 13 notifyDestroyed(); 14 } Marcin Stachniuk Tworzenie GUI niskiego poziomu 12/44
  • 13. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Szkielet aplikacji cz. 3 I LowLevelCanvas.java 1 public class LowLevelCanvas extends Canvas { 2 private boolean endGame = false; 3 4 public LowLevelCanvas() { 5 init(); 6 } 7 8 private void init() { 9 } 10 11 public void think() { 12 } 13 14 public void paint(Graphics g) { 15 } 16 public boolean isEndGame() { 17 return endGame; 18 } 19 } Marcin Stachniuk Tworzenie GUI niskiego poziomu 13/44
  • 14. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Podstawy rysowania - demo LowLevel01.zip LowLevel02.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 14/44
  • 15. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 15/44
  • 16. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Obsługa klawiszy Metody: keyPressed(int keyCode) - naciśnięto klawisz keyReleased(int keyCode) - puszczono klawisz keyRepeated(int keyCode) - powtórzono klawisz Kody klawiszy KEY NUM0, KEY NUM1, KEY NUM2, KEY NUM3, KEY NUM4, KEY NUM5, KEY NUM6, KEY NUM7, KEY NUM8, KEY NUM9, KEY STAR, KEY POUND Akcje gry UP, DOWN, LEFT, RIGHT, FIRE, GAME A, GAME B, GAME C, GAME D Marcin Stachniuk Tworzenie GUI niskiego poziomu 16/44
  • 17. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Obsługa klawiszy - przykład I 1 protected void keyPressed(int keyCode) { 2 switch (getGameAction(keyCode)) { 3 case Canvas.LEFT: 4 // naciśnięto w lewo 5 break; 6 7 case Canvas.RIGHT: 8 // naciśnięto w prawo 9 break; 10 } 11 } LowLevel03.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 17/44
  • 18. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Obsługa ekranu dotykowego Metody: boolean hasPointerEvents() - test czy telefon obsługuje ekran dotykowy boolean hasPointerMotionEvents() - test czy telefon wspiera przesuwanie po ekranie dotykowym pointerPressed(int x, int y) - obsługa ”wciśnięcia” ekranu pointerReleased(int x, int y) - obsługa ”puszczenia” ekranu pointerDragged(int x, int y) - obsługa ”przesuwania” wskaźnikiem po ekranie Marcin Stachniuk Tworzenie GUI niskiego poziomu 18/44
  • 19. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 19/44
  • 20. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 GameCanvas GameCanvas Rozszerzenie klasy Canvas, wpomagajace pisanie gier. Umożliwia zastosowanie podwójnego buffora przy malowaniu i statusu wciśniętych klawiszy. Metody: Graphics getGraphics() - uzyskanie dostępu do buffora ekranowego flushGraphics() - podmiana wyświetlanego buffora, odświeżenie ekranu int getKeyStates() - pobranie statusu klawiatury Marcin Stachniuk Tworzenie GUI niskiego poziomu 20/44
  • 21. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 GameCanvas - Szkielet aplikacji cz. 1 I LowLevel04.java 1 public void run() { 2 while(!canvas.isEndGame()) { 3 canvas.inputKeys(); 4 canvas.think(); 5 canvas.paint(); 6 } 7 destroyApp(false); 8 notifyDestroyed(); 9 } Marcin Stachniuk Tworzenie GUI niskiego poziomu 21/44
  • 22. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 GameCanvas - Szkielet aplikacji cz. 2 I LowLevelGameCanvas.java 1 public LowLevelGameCanvas() { 2 super(true); 3 init(); 4 } 5 6 void paint() { 7 Graphics g = getGraphics(); 8 9 flushGraphics(); 10 } 11 12 void inputKeys() { 13 } 14 15 void think() { 16 } LowLevel04.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 22/44
  • 23. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 GameCanvas - demo LowLevel05.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 23/44
  • 24. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 24/44
  • 25. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/Sprite.html Marcin Stachniuk Tworzenie GUI niskiego poziomu 25/44
  • 26. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite - podstawowe właściwości Metody: int getHeight() - pobranie wysokości int getWidth() - pobranie szerokości int getX() - pobranie współrzędnej X int getY() - pobranie współrzędnej Y setPosition(int x, int y) - ustawienie pozycji move(int dx, int dy) - przesuniecie o dany wektor paint(Graphics g) - namalowanie Sprite’a setVisible(boolean visible) - ustawienie widoczności boolean isVisible() - sprawdzenie widoczności Marcin Stachniuk Tworzenie GUI niskiego poziomu 26/44
  • 27. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite - możliwość animacji Konstruktor: Sprite(Image image, int frameWidth, int frameHeight) Metody: setFrameSequence(int[] sequence) - ustawienie sekwencji kolejnych klatek animacji nextFrame() - następna klatka prevFrame() - poprzednia klatka int getFrame() - pobranie numeru aktualnej klatki setFrame(int sequenceIndex) - ustawienie aktualnej klatki animacji Marcin Stachniuk Tworzenie GUI niskiego poziomu 27/44
  • 28. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite - możliwość transformacji Transformacje: TRANS MIRROR, TRANS MIRROR ROT180, TRANS MIRROR ROT270, TRANS MIRROR ROT90, TRANS NONE, TRANS ROT180, TRANS ROT270, TRANS ROT90 http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/Sprite.html Marcin Stachniuk Tworzenie GUI niskiego poziomu 28/44
  • 29. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite - demo LowLevel06.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 29/44
  • 30. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite - wykrywanie kolizji Metody: boolean collidesWith(Image image, int x, int y, boolean pixelLevel) - test kolizji z obrazkiem boolean collidesWith(Sprite s, boolean pixelLevel) - test kolizji z innym Sprite’m defineCollisionRectangle(int x, int y, int width, int height) - definicja obszaru kolizyjnego Marcin Stachniuk Tworzenie GUI niskiego poziomu 30/44
  • 31. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite - wykrywanie kolizji - demo LowLevel07.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 31/44
  • 32. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 32/44
  • 33. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 TiledLayer http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/TiledLayer.html Marcin Stachniuk Tworzenie GUI niskiego poziomu 33/44
  • 34. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 TiledLayer http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/game/TiledLayer.html Marcin Stachniuk Tworzenie GUI niskiego poziomu 34/44
  • 35. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 TiledLayer Konstruktor: TiledLayer(int columns, int rows, Image image, int tileWidth, int tileHeight) - tworzenie nowego TiledLayer’a Metody: fillCells(int col, int row, int numCols, int numRows, int tileIndex) - częściowe wypełnianie wartościami setCell(int col, int row, int tileIndex) - ustawienie wartości danej komórki getAnimatedTile(int animatedTileIndex) - utworzenie animawonego kafelka setAnimatedTile(int animatedTileIndex, int staticTileIndex) - ustawienie numeru kafelka, który będzie teraz aktualny Marcin Stachniuk Tworzenie GUI niskiego poziomu 35/44
  • 36. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 TiledLayer - demo LowLevel08.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 36/44
  • 37. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Jak to wszystko wykorzystać? Sprite: boolean collidesWith(TiledLayer t, boolean pixelLevel) - sprawdzanie kolizji Sprite’a z TiledLayer’em Marcin Stachniuk Tworzenie GUI niskiego poziomu 37/44
  • 38. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Sprite i TiledLayer - demo LowLevel09.zip Marcin Stachniuk Tworzenie GUI niskiego poziomu 38/44
  • 39. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 GameBuilder Marcin Stachniuk Tworzenie GUI niskiego poziomu 39/44
  • 40. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Plan prezentacji 1 Podstawy rysowania 2 Obsługa klawiszy i ekranu dotykowego 3 Ulepszony Canvas 4 Sprite 5 TiledLayer 6 Podsumowanie Marcin Stachniuk Tworzenie GUI niskiego poziomu 40/44
  • 41. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Czego się dzisiaj nauczyliśmy? Działanie Canvas’u i GameCanvas’u Malowanie po ekranie za pomocą Graphics Obsługa klawiszy Działanie klas Sprite i TiledLayer Jak można pisać pierwsze gry Marcin Stachniuk Tworzenie GUI niskiego poziomu 41/44
  • 42. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Pytania ? Marcin Stachniuk Tworzenie GUI niskiego poziomu 42/44
  • 43. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Kolejne spotkanie Temat: Tworzenie GUI wysokiego poziomu Prowadzenie: Marcin Majak Data: 12.11.2009, godzina: 17.00 Gdzie: sala 23 C-3 Marcin Stachniuk Tworzenie GUI niskiego poziomu 43/44
  • 44. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 5 listopad 2009 Więcej informacji Kontakt z autorem: mstachniuk@gmail.com Strona koła naukowego ISA2 http://autonom.ict.pwr.wroc.pl/ Strona warsztatów: http://autonom.ict.pwr.wroc.pl/∼mstachniuk Adres tego dokumentu: http://autonom.ict.pwr.wroc.pl/∼mstachniuk/files/warsztaty2009/03-lowlevel-2009.11.05.pdf Pliki z kodami źródłowymi wykorzystywanymi w prezentacji: http://autonom.ict.pwr.wroc.pl/∼mstachniuk/files/warsztaty2009/LowLevelAll.zip Tworzenie GUI niskiego poziomu http://midlety.net/site/praktyka/LowLevelGUI.html MID Profile - dokumentacja Javadoc http://java.sun.com/javame/reference/apis/jsr118/ Creating 2D Action Games with the Game API http://developers.sun.com/mobility/midp/articles/game/ Working with the TiledLayer Class http://www.dbarnes.com/midlet/tiledlayer/ Getting Started With the MIDP 2.0 Game API http://developers.sun.com/mobility/midp/articles/gameapi/ GameCanvas - czyli dalej rysujemy po ekranie http://4programmers.net/Java/J2ME/GameCanvas - czyli dalej rysujemy po ekranie NetBeans http://www.netbeans.org/ Marcin Stachniuk Tworzenie GUI niskiego poziomu 44/44