Amigos, aqui é o perguntador mor do fórum!
É o seguinte, eu estou fazendo uma microengine pros meus jogos usando Java. Graças a ajuda de vocês até agora está dando tudo certo. Porém eu estou tentando uma flexibildiade que não estou conseguindo. Eu gostaria que a minha classe fosse capaz de receber como parametro do seu construtor ou de um de seus construtores uma referencia a um JFrame ou JApplet, sendo assim a engine seria capaz de “renderizar” o buffer neste container. Eu ja consegui fazer isso perfeitamente com JFrame porem com JApplet não esta dando certo da um pau em runtime. Alguem tem uma solução para isso? Veja um pedaço do código:
private void init(int w, int h)
{
this.w = w;
this.h = h;
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
buffer = image.createGraphics();
rooms = new ArrayList<Room>();
thJogo = null;
}
public Game(Container root, int w, int h)
{
init(w, h);
target = root;
}
Veja que o construtor da classe recebe um Container (root) porque ? Porque a classe Container foi a unica que achei comum as duas classes JFrame e JApplet. Veja mais códigos:
public void execute()
{
JFrame jf;
target.setSize(w, h);
if (target instanceof JFrame)
{
jf = (JFrame) target;
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
target.setVisible(true);
thJogo = new Thread(this);
thJogo.start();
}
Esse méto prepara para a execucão que ocorre no método run() executado pela Thread.
Classe que testa tudo:
public class TestaInstance extends JApplet
{
Game game;
Room room;
final int W = 640;
final int H = 480;
JFrame f;
public TestaInstance(String title)
{
//Cria uma nova instancia do jogo
game = new Game(this, W, H);
//Adiciona uma room ao jogo
room = new Room(game);
//Adiciona instancias na room
Instance in;
in = new Instance(150, 150, 0, 0, 0);
in.setShape(new Line2D.Float(0, 0, 10, 10));
room.addInstance(in);
in = new Instance(10, 50, 0, 0, 0);
in.setShape(new Rectangle2D.Float(0,0, 10, 10));
room.addInstance(in);
//Adiciona a room no jogo
game.addRoom(room);
game.execute();
}
public static void main(String args[])
{
TestaInstance ti = new TestaInstance("Instance Test");
}
}
Alguem poderia me dar uma luz?
Obrigado!