SlideShare uma empresa Scribd logo
1 de 37
Portando app JavaME S40 para C# WP7:
Um estudo de caso real da app CalcSphere


                    @eloijr

                    http://eloisjr.blogspot.com
Eloi Jr
●   Iniciou na área mobile em 2005
●   Palestrou em diversos eventos de TI
●   Escreveu artigos técnicos
●   Trabalha com Java ME e Android
●   Possui uma app JavaME no GetJar com + 74K
    downloads
●   Projeto hospedado no java.net: Tranqueira
●   Empreendedor no Maranhão!?!??
CalcSphere
●   É uma nova e intuitiva calculadora com uma
    interface completamente diferente de tudo o
    que você já viu.
●   Baseada em JavaME
●   Free com ads e paga sem Ads
CalcSphere
●   Asha 202, Asha 203, Asha 300, Asha 303, X3-
    02, C3-01, C2-02, C2-03, C2-06
●   Touch and type, 240x320
●   Nokia Store: 26/09/2012
●   + 400 downloads
Porque Portar pro WP7?
●   INdT em Imperatriz-MA: Setembro/2012
●   Minicurso XNA Game API: @sergiocavalc
●   Primeira vez no VS!!!
●   Desafio!
Objetivo da Apresentação
●   Port não finalizado ainda!
●   Nada de guerra entre linguagens/plataformas
●   Observações de sintaxe
●   Apresentar dificuldades no processo
●   Alguns caminhos observados
●   Iniciante em C#, WP7!
Desenvolvedor Mobile
●   JavaME?
●   iOS?
●   Android?
●   Windows Phone?
Desenvolvedor Mobile
●   JavaME?
●   iOS?
●   Android?
●   Windows Phone?
●   A oportunidade pode ser a mesma!!
Framework
●   JavaME: Game API (Java)
●   C#: XNA Game API (WP7)
JavaME e C#(XNA): Game API
●   JavaME: GameCanvas, Layer, Sprite,
    TiledLayer, LayerManager
           public class Midlet extends MIDlet {

               public void startApp() {
               }

               public void pauseApp() {
               }

               public void destroyApp(boolean uncon) {
               }
           }
JavaME e C#(XNA): Game API
●   C#:
    class Game1 : Microsoft.Xna.Framework.Game {
     public Game1() {...}

     void Initialize() {...}

     void LoadContent() {...}

     void UnloadContent() {...}

     void Update(GameTime gmt) {...}

     void Draw(GameTime gmt) {…} }
JavaME e C#(XNA): Game Loop
●   JavaME:
    while (running) {
     long cStart = System.currentTimeMillis();

        input();
        render(g);

        long tStart = (cStart - System.currentTimeMillis());
        if (tStart < MS_PER_FRAME) {
           try {
             Thread.sleep(MS_PER_FRAME - tStart);
           } catch (InterruptedException e) { }
        }
    }
JavaME e C#(XNA): Game Loop
●   C#(XNA):
    public Game1() {
      ...
      // Frame rate is 30 fps by default for WP.
      TargetElapsedTime =
    TimeSpan.FromTicks(333333);
      ...
    }

    Update(GameTime gmt) {...}

    Draw(GameTime gmt) {…}
Design Imagens
●   Original: 240x320
●   WP7: 480x800
●   Novas imagens???
Design Imagens
●   Redimensionamento de imagens:
    Draw(GameTime gt) {
     spriteBatch.Begin()

        spriteBatch.Draw( background,
         new Rectangle(0, 0,
               graphics.PreferredBackBufferWidth,
               graphics.PreferredBackBufferHeight),
         Color.White );

        spriteBatch.End();
    }
Design Imagens
●   Redimensionamento de imagens:
    Draw(GameTime gt) {
     spriteBatch.Begin()

        spriteBatch.Draw( sphere,
         new Rectangle( X, Y,
                        (sphere.Width * SCALE),
                        (sphere.Height * SCALE) ),
         Color.White );

        spriteBatch.End();
    }
Carregar Imagens
●   JavaME:
    Image background =
     Image.createImage("background.png");

●   C#(XNA):
    Texture2D background =
    Content.Load<Texture2D>("background");
Declaração Constantes
●   JavaME:
    public static final int COLOR_DIGIT_BOX =
    0x57b8c0;

●   C#(XNA):
    public const string COLOR_DIGIT_BOX     =
    "#57b8c0";
Collection
●   JavaME:
    Vector[] memoryHistory = {null, null, null, null, null};


●   C#(XNA):
    List<Operation>[] memoryHistory = { null, null, null,
    null, null };
Drawing
●   JavaME:
    Graphics g = getGraphics();
    …
    g.drawImage(background, canvasWidth >> 1,
                              CanvasHeight >> 1,
                  Graphics.HCENTER |
                  Graphics.VCENTER
      );
    ...
    flushGraphics();
Drawing
●   C#(XNA):
    Draw(GameTime gt) {
     spriteBatch.Begin()

        spriteBatch.Draw( background,
         new Rectangle(0, 0,
               graphics.PreferredBackBufferWidth,
               graphics.PreferredBackBufferHeight),
         Color.White );

        spriteBatch.End();
    }
Método calcAngle
●   atan2() => Math.Atan2()
●   Math.abs() => Math.Abs()
●   Math.toDegress() => MathHelper.ToDegress()
●   Math.PI == Math.PI!!!
Conversões de Tipo (char to int)
●   JavaME:
    char c = '1';
    ...
    int n = Integer.parseInt(String.ValueOf(c));
●   C#(XNA):
    char c = '1';
    ...
    int n = c – '0';
Conversões de Tipo (int to String)
●   JavaME:
    int currentDigit = 1;
    ...
    String conv = String.valueOf(currentDigit)
●   C#(XNA):
    int currentDigit = 1;
    ...
    String conv = Convert.ToString(currentDigit, 10);
Conversões de Tipo (String to
               Double)
●   JavaME:
    String value = “12.1”;
    ...
    double number2 = Double.parseDouble(value);
●   C#(XNA):
    String value = “12.1”
    ...
    double number2 = Double.Parse(value);
Fragmentos sem Conversão!

private void setHistoryFromMemory(int m) {

    calc.setHistory(memoryHistory[m]);
    memoryHistory[m] = null;
}
Áreas Touch
●   Classes (Rectangle já existia!):
    Rectangle {
      …
      isPointerInside(int x, int y) { … }
      ...
    }

    Circle {
      …
      inCircle(int x, int y) { … }
      ...
    }
Áreas Touch: JavaME
●   Métodos PointerPressed(), PointerReleased() e
    PointerDragged()
●   Timer para monitorar e gerenciar um Long Tap
●   Monitoramento manual e individual dos tipos de
    gestos e toques
Áreas Touch: C#(XNA)
●   Definir tipos de gestos que deseja monitorar
●   Monitoramento dos gestos
●   Disparar ações
Áreas Touch: C#(XNA)

protected override void LoadContent() {
  ...
  TouchPanel.EnabledGestures =
      GestureType.DragComplete | GestureType.Tap |
      GestureType.FreeDrag | GestureType.Hold;
  ...
}
Áreas Touch: C#(XNA)

protected override void Update(GameTime gt) {
 ...
 while (TouchPanel.IsGestureAvailable) {
   GestureSample gesture =
     TouchPanel.ReadGesture();
   Vector2 pos = gesture.Position;

  switch (gesture.GestureType) {
   case GestureType.Tap:
     ChkTap((int)pos.X, (int)pos.Y);
     break;
   ...
Persistência
●   JavaME:
    RecordStore rsAppState =
     RecordStore.openRecordStore("appstate", true);

    if (rsAppState.getNumRecords() == 0)
      rsAppState.addRecord(null, 0, 0);

    ByteArrayOutputStream bout =
     new ByteArrayOutputStream();

    DataOutputStream dout =
     new DataOutputStream(bout);

    dout.writeInt(currentTheme);
Persistência
●   C#(XNA): IsolateStorageFile
    using
     (IsolatedStorageFile isf =

     IsolatedStorageFile.GetUserStoreForApplication())

    using (IsolatedStorageFileStream isfs =
     new IsolatedStorageFileStream("appstate.txt",
     FileMode.Create, isf))

    using (StreamWriter writer = new StreamWriter(isfs))

    writer.WriteLine(CurrentTheme);
Padrões
●   JavaME: Primeira letra do nome dos atributos e
    métodos em MINÚSCULO
●   C#: Primeira letra do nome dos atributos e
    métodos em MAIÚSCULO
Classes
●   World
●   Calc
●   Historico
●   Operation
●   Rect
●   Circle
●   ScrollArea
Tarefas/Problemas Pendentes
●   Desenho de primitivas (rectangle, circle)
●   SplashScreen
●   Área de Scroll para as operações
●   Efeito flick nas esferas de operadores e dígitos
●   Seleção de Temas
●   Menu
CalcSphere Free: store.ovi.com/content/313798
CalcSphere Paga: store.ovi.com/content/313832




                Email: eloimuon@gmail.com


                 @eloijr

                 http://eloisjr.blogspot.com

Mais conteúdo relacionado

Mais procurados

Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
jeandson correa
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
Ricardo Bolanho
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)
Cristiano Rafael Steffens
 

Mais procurados (20)

02 introdução ao open gl
02 introdução ao open gl02 introdução ao open gl
02 introdução ao open gl
 
Introdução à OpenGL
Introdução à OpenGLIntrodução à OpenGL
Introdução à OpenGL
 
Tutorial JavaFX simples
Tutorial JavaFX simplesTutorial JavaFX simples
Tutorial JavaFX simples
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maple
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
Tdc2010
Tdc2010Tdc2010
Tdc2010
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
Lp1 C# conversões
Lp1 C# conversõesLp1 C# conversões
Lp1 C# conversões
 
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
[Curso Java Basico - Orientacao a Objetos] Aula 34: Variáveis e metodos estat...
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 

Destaque (18)

Intentional Inhibition
Intentional InhibitionIntentional Inhibition
Intentional Inhibition
 
Spirituality At The End Of Life
Spirituality At The End Of LifeSpirituality At The End Of Life
Spirituality At The End Of Life
 
E comerce
E comerceE comerce
E comerce
 
Ribes dora act11
Ribes dora act11Ribes dora act11
Ribes dora act11
 
Maximizing Profits
Maximizing ProfitsMaximizing Profits
Maximizing Profits
 
30 Band Marks
30 Band Marks30 Band Marks
30 Band Marks
 
Carnival
CarnivalCarnival
Carnival
 
Arun article1
Arun article1Arun article1
Arun article1
 
How To Make A Great Pbj
How To Make A Great PbjHow To Make A Great Pbj
How To Make A Great Pbj
 
Problem Solving
Problem SolvingProblem Solving
Problem Solving
 
Did Presentation
Did PresentationDid Presentation
Did Presentation
 
Bangkok Post 3 Dec08 Damage Done Bkk Airport Blockade
Bangkok Post 3 Dec08 Damage Done Bkk Airport BlockadeBangkok Post 3 Dec08 Damage Done Bkk Airport Blockade
Bangkok Post 3 Dec08 Damage Done Bkk Airport Blockade
 
Music And Mental Imagery
Music And Mental ImageryMusic And Mental Imagery
Music And Mental Imagery
 
Fairfax
FairfaxFairfax
Fairfax
 
Vividness Of Mental Imagery
Vividness Of Mental ImageryVividness Of Mental Imagery
Vividness Of Mental Imagery
 
Arun article 2
Arun article 2Arun article 2
Arun article 2
 
Locus Of Control And Weight Reduction
Locus Of Control And Weight ReductionLocus Of Control And Weight Reduction
Locus Of Control And Weight Reduction
 
Aphasia Presentation
Aphasia PresentationAphasia Presentation
Aphasia Presentation
 

Semelhante a Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere

Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
juliocoopergames
 

Semelhante a Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere (20)

Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataforma
 
Python ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao TensorflowPython ES 2017 - Introdução ao Tensorflow
Python ES 2017 - Introdução ao Tensorflow
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Minicurso Java && Cl
Minicurso Java && ClMinicurso Java && Cl
Minicurso Java && Cl
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Desenvolvendo Jogos com pygame - Rafael Guterres Jeffman - Tchelinux Caxias d...
Desenvolvendo Jogos com pygame - Rafael Guterres Jeffman - Tchelinux Caxias d...Desenvolvendo Jogos com pygame - Rafael Guterres Jeffman - Tchelinux Caxias d...
Desenvolvendo Jogos com pygame - Rafael Guterres Jeffman - Tchelinux Caxias d...
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
 
Mini-Curso: gnuplot
Mini-Curso: gnuplotMini-Curso: gnuplot
Mini-Curso: gnuplot
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game Developers
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developers
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Mini Curso Android basico EATI-2017
Mini Curso Android basico EATI-2017Mini Curso Android basico EATI-2017
Mini Curso Android basico EATI-2017
 

Mais de Eloi Júnior

Pomodoro o tempo é o seu aliado
Pomodoro o tempo é o seu aliadoPomodoro o tempo é o seu aliado
Pomodoro o tempo é o seu aliado
Eloi Júnior
 

Mais de Eloi Júnior (7)

Missão Rosetta: Uma história emocionante sobre ciência espacial
Missão Rosetta: Uma história emocionante sobre ciência espacialMissão Rosetta: Uma história emocionante sobre ciência espacial
Missão Rosetta: Uma história emocionante sobre ciência espacial
 
Projeto Android Your Heroes que Utiliza a API Marvel
Projeto Android Your Heroes que Utiliza a API MarvelProjeto Android Your Heroes que Utiliza a API Marvel
Projeto Android Your Heroes que Utiliza a API Marvel
 
Android: Projetando e Pensando em Design
Android: Projetando e Pensando em DesignAndroid: Projetando e Pensando em Design
Android: Projetando e Pensando em Design
 
Desenvolvedor out of road: Saia da cadeira e seja um!
Desenvolvedor out of road: Saia da cadeira e seja um!Desenvolvedor out of road: Saia da cadeira e seja um!
Desenvolvedor out of road: Saia da cadeira e seja um!
 
Android app communication
Android app communicationAndroid app communication
Android app communication
 
Carreira e CV: construa-os!
Carreira e CV: construa-os!Carreira e CV: construa-os!
Carreira e CV: construa-os!
 
Pomodoro o tempo é o seu aliado
Pomodoro o tempo é o seu aliadoPomodoro o tempo é o seu aliado
Pomodoro o tempo é o seu aliado
 

Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere

  • 1. Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere @eloijr http://eloisjr.blogspot.com
  • 2. Eloi Jr ● Iniciou na área mobile em 2005 ● Palestrou em diversos eventos de TI ● Escreveu artigos técnicos ● Trabalha com Java ME e Android ● Possui uma app JavaME no GetJar com + 74K downloads ● Projeto hospedado no java.net: Tranqueira ● Empreendedor no Maranhão!?!??
  • 3. CalcSphere ● É uma nova e intuitiva calculadora com uma interface completamente diferente de tudo o que você já viu. ● Baseada em JavaME ● Free com ads e paga sem Ads
  • 4. CalcSphere ● Asha 202, Asha 203, Asha 300, Asha 303, X3- 02, C3-01, C2-02, C2-03, C2-06 ● Touch and type, 240x320 ● Nokia Store: 26/09/2012 ● + 400 downloads
  • 5. Porque Portar pro WP7? ● INdT em Imperatriz-MA: Setembro/2012 ● Minicurso XNA Game API: @sergiocavalc ● Primeira vez no VS!!! ● Desafio!
  • 6. Objetivo da Apresentação ● Port não finalizado ainda! ● Nada de guerra entre linguagens/plataformas ● Observações de sintaxe ● Apresentar dificuldades no processo ● Alguns caminhos observados ● Iniciante em C#, WP7!
  • 7. Desenvolvedor Mobile ● JavaME? ● iOS? ● Android? ● Windows Phone?
  • 8. Desenvolvedor Mobile ● JavaME? ● iOS? ● Android? ● Windows Phone? ● A oportunidade pode ser a mesma!!
  • 9. Framework ● JavaME: Game API (Java) ● C#: XNA Game API (WP7)
  • 10. JavaME e C#(XNA): Game API ● JavaME: GameCanvas, Layer, Sprite, TiledLayer, LayerManager public class Midlet extends MIDlet { public void startApp() { } public void pauseApp() { } public void destroyApp(boolean uncon) { } }
  • 11. JavaME e C#(XNA): Game API ● C#: class Game1 : Microsoft.Xna.Framework.Game { public Game1() {...} void Initialize() {...} void LoadContent() {...} void UnloadContent() {...} void Update(GameTime gmt) {...} void Draw(GameTime gmt) {…} }
  • 12. JavaME e C#(XNA): Game Loop ● JavaME: while (running) { long cStart = System.currentTimeMillis(); input(); render(g); long tStart = (cStart - System.currentTimeMillis()); if (tStart < MS_PER_FRAME) { try { Thread.sleep(MS_PER_FRAME - tStart); } catch (InterruptedException e) { } } }
  • 13. JavaME e C#(XNA): Game Loop ● C#(XNA): public Game1() { ... // Frame rate is 30 fps by default for WP. TargetElapsedTime = TimeSpan.FromTicks(333333); ... } Update(GameTime gmt) {...} Draw(GameTime gmt) {…}
  • 14. Design Imagens ● Original: 240x320 ● WP7: 480x800 ● Novas imagens???
  • 15. Design Imagens ● Redimensionamento de imagens: Draw(GameTime gt) { spriteBatch.Begin() spriteBatch.Draw( background, new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight), Color.White ); spriteBatch.End(); }
  • 16. Design Imagens ● Redimensionamento de imagens: Draw(GameTime gt) { spriteBatch.Begin() spriteBatch.Draw( sphere, new Rectangle( X, Y, (sphere.Width * SCALE), (sphere.Height * SCALE) ), Color.White ); spriteBatch.End(); }
  • 17. Carregar Imagens ● JavaME: Image background = Image.createImage("background.png"); ● C#(XNA): Texture2D background = Content.Load<Texture2D>("background");
  • 18. Declaração Constantes ● JavaME: public static final int COLOR_DIGIT_BOX = 0x57b8c0; ● C#(XNA): public const string COLOR_DIGIT_BOX = "#57b8c0";
  • 19. Collection ● JavaME: Vector[] memoryHistory = {null, null, null, null, null}; ● C#(XNA): List<Operation>[] memoryHistory = { null, null, null, null, null };
  • 20. Drawing ● JavaME: Graphics g = getGraphics(); … g.drawImage(background, canvasWidth >> 1, CanvasHeight >> 1, Graphics.HCENTER | Graphics.VCENTER ); ... flushGraphics();
  • 21. Drawing ● C#(XNA): Draw(GameTime gt) { spriteBatch.Begin() spriteBatch.Draw( background, new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight), Color.White ); spriteBatch.End(); }
  • 22. Método calcAngle ● atan2() => Math.Atan2() ● Math.abs() => Math.Abs() ● Math.toDegress() => MathHelper.ToDegress() ● Math.PI == Math.PI!!!
  • 23. Conversões de Tipo (char to int) ● JavaME: char c = '1'; ... int n = Integer.parseInt(String.ValueOf(c)); ● C#(XNA): char c = '1'; ... int n = c – '0';
  • 24. Conversões de Tipo (int to String) ● JavaME: int currentDigit = 1; ... String conv = String.valueOf(currentDigit) ● C#(XNA): int currentDigit = 1; ... String conv = Convert.ToString(currentDigit, 10);
  • 25. Conversões de Tipo (String to Double) ● JavaME: String value = “12.1”; ... double number2 = Double.parseDouble(value); ● C#(XNA): String value = “12.1” ... double number2 = Double.Parse(value);
  • 26. Fragmentos sem Conversão! private void setHistoryFromMemory(int m) { calc.setHistory(memoryHistory[m]); memoryHistory[m] = null; }
  • 27. Áreas Touch ● Classes (Rectangle já existia!): Rectangle { … isPointerInside(int x, int y) { … } ... } Circle { … inCircle(int x, int y) { … } ... }
  • 28. Áreas Touch: JavaME ● Métodos PointerPressed(), PointerReleased() e PointerDragged() ● Timer para monitorar e gerenciar um Long Tap ● Monitoramento manual e individual dos tipos de gestos e toques
  • 29. Áreas Touch: C#(XNA) ● Definir tipos de gestos que deseja monitorar ● Monitoramento dos gestos ● Disparar ações
  • 30. Áreas Touch: C#(XNA) protected override void LoadContent() { ... TouchPanel.EnabledGestures = GestureType.DragComplete | GestureType.Tap | GestureType.FreeDrag | GestureType.Hold; ... }
  • 31. Áreas Touch: C#(XNA) protected override void Update(GameTime gt) { ... while (TouchPanel.IsGestureAvailable) { GestureSample gesture = TouchPanel.ReadGesture(); Vector2 pos = gesture.Position; switch (gesture.GestureType) { case GestureType.Tap: ChkTap((int)pos.X, (int)pos.Y); break; ...
  • 32. Persistência ● JavaME: RecordStore rsAppState = RecordStore.openRecordStore("appstate", true); if (rsAppState.getNumRecords() == 0) rsAppState.addRecord(null, 0, 0); ByteArrayOutputStream bout = new ByteArrayOutputStream(); DataOutputStream dout = new DataOutputStream(bout); dout.writeInt(currentTheme);
  • 33. Persistência ● C#(XNA): IsolateStorageFile using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream("appstate.txt", FileMode.Create, isf)) using (StreamWriter writer = new StreamWriter(isfs)) writer.WriteLine(CurrentTheme);
  • 34. Padrões ● JavaME: Primeira letra do nome dos atributos e métodos em MINÚSCULO ● C#: Primeira letra do nome dos atributos e métodos em MAIÚSCULO
  • 35. Classes ● World ● Calc ● Historico ● Operation ● Rect ● Circle ● ScrollArea
  • 36. Tarefas/Problemas Pendentes ● Desenho de primitivas (rectangle, circle) ● SplashScreen ● Área de Scroll para as operações ● Efeito flick nas esferas de operadores e dígitos ● Seleção de Temas ● Menu
  • 37. CalcSphere Free: store.ovi.com/content/313798 CalcSphere Paga: store.ovi.com/content/313832 Email: eloimuon@gmail.com @eloijr http://eloisjr.blogspot.com