[Java]O esqueleto dos games 2d em java  Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Java]O esqueleto dos games 2d em java

Ir para baixo

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

Mensagem por CDZ 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
CDZ
CDZ
Novato
Novato

Mensagens : 22
Créditos : 0

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos