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

02 introdução ao open gl
02 introdução ao open gl02 introdução ao open gl
02 introdução ao open glAuberto Macie
 
Introdução Programação Em Maple
Introdução Programação Em MapleIntrodução Programação Em Maple
Introdução Programação Em Maplejeandson correa
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
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áticasKirmayr tomaz
 
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 STLMarcos Castro
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
Lp1 C# conversões
Lp1 C# conversõesLp1 C# conversões
Lp1 C# conversõesMauro Duarte
 
[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...Loiane Groner
 
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.NETLeonardo Melo Santos
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasdiogoa21
 
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 2013Intel Software Brasil
 
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
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 
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...Tchelinux
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 

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

Intentional Inhibition
Intentional InhibitionIntentional Inhibition
Intentional Inhibitionmcneeljc86
 
Spirituality At The End Of Life
Spirituality At The End Of LifeSpirituality At The End Of Life
Spirituality At The End Of Lifemcneeljc86
 
Maximizing Profits
Maximizing ProfitsMaximizing Profits
Maximizing Profitsbrunsgregory
 
How To Make A Great Pbj
How To Make A Great PbjHow To Make A Great Pbj
How To Make A Great Pbjguest37d54
 
Problem Solving
Problem SolvingProblem Solving
Problem Solvingmcneeljc86
 
Did Presentation
Did PresentationDid Presentation
Did Presentationmcneeljc86
 
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 BlockadeChris Catto-Smith
 
Music And Mental Imagery
Music And Mental ImageryMusic And Mental Imagery
Music And Mental Imagerymcneeljc86
 
Vividness Of Mental Imagery
Vividness Of Mental ImageryVividness Of Mental Imagery
Vividness Of Mental Imagerymcneeljc86
 
Arun article 2
Arun article 2Arun article 2
Arun article 2chocolates
 
Locus Of Control And Weight Reduction
Locus Of Control And Weight ReductionLocus Of Control And Weight Reduction
Locus Of Control And Weight Reductionmcneeljc86
 
Aphasia Presentation
Aphasia PresentationAphasia Presentation
Aphasia Presentationmcneeljc86
 

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

Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataformaAndré Santee
 
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 TensorflowFabrício Vargas Matos
 
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 2Odair Bonin Borges
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It YourselfBruno Nascimento
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygameTchelinux
 
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...Tchelinux
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!Rodrigo Stefani Domingues
 
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ídaDeivid Martins
 
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...PotiLivre Sobrenome
 
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 DevelopersiMasters
 
Advanced topics for game developers
Advanced topics for game developersAdvanced topics for game developers
Advanced topics for game developersjuliocoopergames
 
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 - Mackenziejonathanblacknight
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
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...Ricardo Valeriano
 
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 CElaine Cecília Gatto
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Mini Curso Android basico EATI-2017
Mini Curso Android basico EATI-2017Mini Curso Android basico EATI-2017
Mini Curso Android basico EATI-2017Jonathan Filho
 

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

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 espacialEloi Júnior
 
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 MarvelEloi Júnior
 
Android: Projetando e Pensando em Design
Android: Projetando e Pensando em DesignAndroid: Projetando e Pensando em Design
Android: Projetando e Pensando em DesignEloi Júnior
 
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!Eloi Júnior
 
Android app communication
Android app communicationAndroid app communication
Android app communicationEloi Júnior
 
Carreira e CV: construa-os!
Carreira e CV: construa-os!Carreira e CV: construa-os!
Carreira e CV: construa-os!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 aliadoEloi 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