Java
210 pág.

Java


DisciplinaProgramação Orientada A Objetos3.999 materiais58.125 seguidores
Pré-visualização43 páginas
flushGraphics();
 }
 }
 }
}
Criamos a variável minhaCamera, mas nenhuma câmera foi colocada lá, agora vamos fazer isso através do nosso
objeto do tipo World, utilizando o método getActiveCamera().
import javax.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import javax.microedition.game.*;
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 while(gameOver == false){
J2ME 107
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
Agora com a câmera armazanada vamos movimenta-la, para isso só precisamos pegar emprestado da classe World o
método setTranslation() que irá receber 3 variáveis float, que serão respectivamente o eixo x, y e z.
import javax.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import javax.microedition.game.*;
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Excepetion minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 while(gameOver == false){
 try {
J2ME 108
 meuGrafico3D.bindTarget(meuGrafico);
 minhaCamera.setTranslation(1.0f, 3.0f, 2.0f);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
Pegando a translação de um objeto
Vamos ver agora como pegar a translação (posição dentro do mundo) de um objeto, vamos usar o mesmo exemplo
anterior.
import javax.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.m3g.*;
import javax.microedition.game.*;
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 while(gameOver == false){
J2ME 109
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 minhaCamera.setTranslation(1.0f, 3.0f, 2.0f);
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
Vamos pegar a posição X, Y e Z da câmera, para isso vamos inicialmente criar um array float de 3 posições chamado
posicaoCamera[], e inicia-lo com 0.
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 float[] posicaoCamera = {0.0, 0.0, 0.0};
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 minhaCamera.setTranslation(1.0f, 3.0f, 2.0f);
J2ME 110
 meuGrafico3D.render(meuMundo);
 meuThread.sleep(50);
 } catch (Exception minhaExcecao) {
 minhaExcecao.printStackTrace();
 } finally {
 meuGrafico3D.releaseTarget();
 flushGraphics();
 }
 }
 }
}
Agora dentro do loop principal vamos usar o método getTranslation() e entrar como parâmetro a variável float que
criamos que vai pegar os 3 atributos X, Y e Z nessa ordem, como saída vamos dar um System.out.println() para
exibir cada posição.
public class ClasseMeuGameCanvas extends GameCanvas implements Runnable
 {
 Thread meuThread;
 Graphics meuGrafico = this.getGraphics();
 Graphics3D meuGrafico3D = Graphics3D.getInstance();
 Object3D[] meuObjeto3D;
 World meuMundo;
 Camera minhaCamera = new Camera();
 public ClasseMeuGameCanvas(){
 super(false);
 meuThread = new Thread(this);
 meuThread.start();
 }
 public void run(){
 try{
 meuObjeto3D = Loader.load("/Meu Objeto 3D.m3g");
 meuMundo = (World) meuObjeto3D[0];
 minhaCamera = meuMundo.getActiveCamera();
 } catch (Exception minhaExcessao) {
 minhaExcessao.printStackTrace();
 }
 boolean gameOver = false;
 float[] posicaoCamera = {0.0, 0.0, 0.0};
 while(gameOver == false){
 try {
 meuGrafico3D.bindTarget(meuGrafico);
 minhaCamera.setTranslation(1.0f, 3.0f, 2.0f);
 minhaCamera.getTranslation(posicaoCamera);
 System.out.println(posicaoCamera[0]);
J2ME 111
 System.out.println(posicaoCamera[1]);