Luis Zeni Me, IT and some thinks…

3Sep/091

Ola Macacada! Um Hello World com JMonkey Engine

monkey

Seguindo a onda de tutoriais do JMonkey, aqui vou mostrar como criar um "Hello World" com JMonkey. Lembrando que estou traduzindo isto da wiki oficial do JMonkey então se tu consegues ler em inglês, ja pode continuar os outros tutoriais que estão bem mais avançados. Caso você não tenha um ambiente configurado clique aqui para aprender.

Hello World

Aqui iremos aprender o básico para criar um programa com JME, explorando a SimpleGame, Box e rootNode. Ok, vamos lá. Aqui tem o código do programa.
import com.jme.app.SimpleGame;
import com.jme.scene.shape.Box;
import com.jme.math.Vector3f;

/**
* Started Date: Jul 20, 2004<br><br>
* Simple HelloWorld program for jME
* @author Jack Lindamood
*/

public class HelloWorld extends SimpleGame{
   public static void main(String[] args) {
       //Create Object
       HelloWorld app = new HelloWorld();
       //Signal to show properties dialog
       app.setConfigShowMode(ConfigShowMode.AlwaysShow);
       app.start();
       //Start the program
  }

  protected void simpleInitGame() {
       // Make a box
       Box b = new Box("Mybox", new Vector3f(0,0,0), new Vector3f(1,1,1));
       rootNode.attachChild(b);
       //Put it in the scene graph
  }
}

Bem curto né? Nosso programa começa na seguinte parte:

public class HelloWorld extends SimpleGame{

SimpleGame faz um monte de inicializações para nós sem nos preocuparmos. Se você quiser, pode olhar o código da mesma, mas por enquanto entenda que ela cria a parte básica necessária para renderizar. É uma ótima classe para prototificar ou  testar alguma coisa.

app.setConfigShowMode(ConfigShowMode.AlwaysShow);

Você conheçe a imagem do macaco que aparece na primeira vez que o programa, e que ela serve para selecionar a resolução?

Bem, este comando faz isto aparecer, como o nome diz,a cada vez que rodar o programa vai aparecer a properties dialog. Você nunca vera esta janela se substituir pelo seguinte código.

ConfigShowMode.NeverShow

Não é dificil =)...

app.start();

A função start() é um laço de repetição while. Primeiro, ele inicializa o sistema da jME. Depois, o laço faz duas coisas por repetição: primeiro, ele avisa tudo no seu game que precisa se movimentar, e segundo, ele renderiza tudo. Basicamente, ele faz o jogo funcionar.

	protected void simpleInitGame() {
		// Make a box
 		Box b = new Box("Mybox", new Vector3f(0,0,0), new Vector3f(1,1,1));
 		rootNode.attachChild(b); // Put it in the scene graph
	}

A função simpleInitGame() é abstrata no SimpleGame, então você é forçado a implementa-la cada vez que estender a SimpleGame. Olhando o código nós podemos ver que duas coisas acontecem. Primeiro, eu fiz uma box(é o que tu vê na tela).Segundo, eu adicionei a box no root da minha cena gráfica. O objeto rootNode é da classe Node que é criada pelo SimpleGame para você. Você ira adicionar tudo nele ou em seus filhos. Eu coloquei 3 parametros em b: uma String e dois objetos Vector3f. Todo Node, Box, Circulo, Pessoa ou qualquer coisa em sua cena gráfica precisa de um nome. Normalmente você coloca um nome especifico para cada objeto. Eu chamei este de "My box", mas você poderia chamar de qualquer coisa. Os próximos dois parâmetros especificam os cantos da box. Ela tem um canto na origem e outro no x=1, y=1, z=1. Basicamente, é uma unidade de cubo. Ok, eu criei uma box, mas eu tenho que dizer que quero que ela também seja renderizada. É por isto que eu adicionei ela no objeto rootNode. A sua scene graph basicamente parece com isto:

rootNode
My box

O objeto rootNode é o pai e "My box" é filha do mesmo. Assim, quando a SimpleGame tenta desenhar o rootNode ela vai tentar desenhar a "My box" também. E é isto! No próximo tutorial, iremos para algo mais complexo.

Duvidas, sugestões, críticas? Comente =)

Comments (1) Trackbacks (1)
  1. Ótima iniciativa! =)


Leave a comment