Suporte no desenvolvimento de jogos


    [Java]O esqueleto dos games 2d em java

    avatar
    /_Lucas
    Novato
    Novato

    Mensagens : 19
    Créditos : 0

    [Java]O esqueleto dos games 2d em java  Empty [Java]O esqueleto dos games 2d em java

    Mensagem por /_Lucas em Dom Mar 17, 2019 11:01 pm

    Tipo: Tutorial
    Nível: Intermediário.
    Linguagem: java.
    Contato e mais informações:  https://lucasindiesh1p.wordpress.com/ 
    Mais tutorais sobre:  https://lucasindiesh1p.wordpress.com/2019/02/18/o-esqueleto-dos-games-2d-em-java/
    Os 8 passos:
    1º Criação do JFrame;
    2 Criação do JPanel;
    3º Adicionar o JPanel ao frame;
    4º Criação e invocação da instancia do frame no método main (execução do programa);
    5º Criação dos métodos para desenhar no frame(ou chamar imagens; herança e reescrita (@override) do método paint ou paintComponent do JPanel para chamar o(s) método(s) que desenha(m) ou mostra(m) imagens).~
    6º Implementar animação das imagens p.ex. com: Swing timer ou Utility timer ou Thread.
    7º Implementar controle do usuário
    8º Implementar sistema de colisão




    Notas:




    *O 2ºe o 5º passo trata-se apenas de uma boa prática de programação, pois pode-se fazer tudo diretamente com o @override dos métodos update() (que é chamado constantemente) método paintComponent() ou paint() e/ou de outra forma).
    O método update () é conhecido como “retorno de chamada”. É chamado automaticamente pela biblioteca Swing ou awt. Assim também como o paint (), é também um retorno de chamada que o Swing (ou awt) chamará automaticamente.
    No Swing “moderno”, apenas deve-se chamar o paintComponent () em vez de paint ().
    *Porque normalmente todos os pacotes utilizados para fazer o esqueleto/moldura dos games em java 2d usam awt? R: Pois são os toolkits disponibilizados no java para a criação do ambiente gráfico (GUI), mas existem outras API novas também que podem ser utilizadas. Vale relembrar que o swing foi desenvolvido tempos depois da já existencia do pacote awt.
    *Um pouco da história do awt e do swing:
    “Quando a Sun Microsystems lançou o Java pela primeira vez em 1995, os widgets AWT forneceram um nível de abstração em relação à interface do usuário nativa subjacente. Por exemplo, criar uma caixa de seleção AWT faria com que o AWT chamasse diretamente a sub-rotina nativa subjacente que criou uma caixa de seleção. No entanto, uma caixa de seleção no Microsoft Windows não é exatamente igual a uma caixa de seleção no Mac OS ou nos vários tipos de Unix.. Alguns desenvolvedores de aplicativos preferem esse modelo porque ele oferece um alto grau de fidelidade ao kit de ferramentas de janelas nativo subjacente e integração perfeita com aplicativos nativos. Em outras palavras, um programa GUI escrito usando AWT se parece com um aplicativo nativo do Microsoft Windows quando executado no Windows, mas o mesmo programa se parece com um aplicativo Apple Macintosh nativo quando executado em um Mac, etc. No entanto, alguns desenvolvedores de aplicativos não gostam desse modelo eles preferem que seus aplicativos sejam exatamente iguais em todas as plataformas.
    No J2SE 1.2 , o kit de ferramentas Swing substituiu amplamente os widgets do AWT. Além de fornecer um conjunto mais rico de widgets de UI, o Swing desenha seus próprios widgets (usando Java 2D para chamar sub-rotinas de baixo nível no subsistema gráfico local) em vez de depender do módulo de interface de usuário de alto nível do sistema operacional. O Swing oferece a opção de usar a aparência e a aparência de uma plataforma nativa ou uma aparência e ambiente entre plataformas (o “Java Look and Feel”) que parece o mesmo em todos os sistemas de janelas” fonte (https://en.wikipedia.org/wiki/Abstract_Window_Toolkit)
    “A Internet Foundation Classes (IFC) era uma biblioteca de gráficos para Java originalmente desenvolvida pela Netscape Communications Corporation e lançada em 16 de dezembro de 1996. Em 2 de abril de 1997, a Sun Microsystems e a Netscape Communications Corporation anunciaram sua intenção de incorporar a IFC a outras tecnologias. formam as Classes da Fundação Java . [4] O “Java Foundation Classes” foi posteriormente renomeado como “Swing”.
    O Swing introduziu um mecanismo que permitia que a aparência e o comportamento de todos os componentes de um aplicativo fossem alterados sem fazer alterações substanciais no código do aplicativo. […]” (fonte: https://en.wikipedia.org/wiki/Swing_(Java)
    *A classe Component e a Container (são as que contem originalmente o paint e o paintComponent) estão acima do JFrame e JPanel na hierarquia do Java. Veja as hierarquias:

    • java.lang.Object

      • java.awt.Component


        • java.awt.Container 


          • javax.swing.JComponent


            • javax.swing.JPanel ***










     

    • java.lang.Object

      • java.awt.Component


        • java.awt.Container


          • java.awt.Window


            • java.awt.Frame


              • javax.swing.JFrame












    Ou seja tanto JPanel e JFrame tem acesso aos métodos paint e paintComponent como a classe Frame também, então é possivel sim utilizar o Frame ao invés do JFrame caso queira.

    Sobre o método herdado @override  update (ele é executado automaticamente): “The update() method it what is known as a “callback”. It is called by the Swing library. Similarly paint() is also a callback that Swing will call automatically.

    ***Lembrando que tanto ele quanto o método paint pertencem a classe javax.swing.JComponent que é pai hierarquicamente da classe JPanel que os herda. ****
    Meu exemplo que eu digitei e postei a dúvida no stackoverflow:
    Example: When we create a JFrame in a main method, and override the update, we do not need to call the update at the instance of the Jframe to start the loop, this method begin automatically
    Código:
    public class Example extends JPanel{
    public Example(){
    setSize(new Dimension(500, 400));
    setPreferredSize(new Dimension(500, 400));
    setBackground(Color.BLACK);
    setFocusable(true);}
    @Override
    public void update(Graphics g) {
    paint(g);
    System.out.println("The method update is always being running, but I never call it at main method!")

    }
    @Override
    public void paint(Graphics g) {
    g.setColor(Color.WHITE);
    g.fillOval(0, 0, 40, 40);
    g.dispose();
    repaint();
    }
    public static void main(String[]args){
    Example example = new Example();
    JFrame frame = new JFrame();
    frame.setTitle(“Why?”);
    frame.add(example);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    }
     

     
    Referências:
    https://www.tutorialspoint.com/awt/awt_quick_guide.htm
    http://www.guj.com.br/t/o-que-e-awt-e-swing/61655/2
    http://zetcode.com/
    https://stackoverflow.com/questions/7358775/java-gui-frameworks-what-to-choose-swing-swt-awt-swingx-jgoodies-javafx/
    https://docs.oracle.com
    https://stackoverflow.com/questions/54757094/if-the-methods-need-to-be-called-why-the-updategraphics-g-method-can-run-auto
    http://zetcode.com/tutorials/javagamestutorial/animation/
    Diferença do paint e do paintcomponent:
    “AWT, override paint(), The rest of Swing, override paintComponent().”
    fonte: https://stackoverflow.com/questions/9389187/difference-between-paint-paintcomponent-and-paintcomponents-in-swing

      Data/hora atual: Ter Abr 23, 2019 1:42 pm