A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Dom Jun 20, 2021 10:18 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 2 mensagens ] 
Autor Mensagem
 Título: Ola galera
MensagemEnviado: Qui Mar 08, 2012 10:49 pm 
Offline
Membro novo

Registrado em: Qui Mar 08, 2012 10:37 pm
Mensagens: 3
Sou novo no fórum, acabei de sair do forno e gostaria de fazer uma pergunta, eu conseguiria em java criar uma rendernização ativa e passiva de imagens num único programa, rendernização passiva utiliza a sobrescrição do método paint() ou paintComponent() e a ativa utiliza somente getGraphics() para passar o contexto gráfico sem utilizar esses métodos?!


Voltar ao topo
 Perfil  
 
 Título: Re: Ola galera
MensagemEnviado: Qui Fev 26, 2015 10:23 pm 
Offline
Membro novo

Registrado em: Qui Fev 26, 2015 9:59 pm
Mensagens: 6
A sua duvida é como fazer um gameLoop para desenhar no graphics sem usar o paintComponent? Para isso, o que eu geralmente faço, é criar primeiro uma BufferedImage que será meu canvas, e desenhar todo o meu jogo em cima dela, depois eu pego essa imagem e desenho no graphics do componente usando a função getGraphics() e numa thread criada, fazer o while do gameLoop pra desenhar o canvas no meu componente. Aqui tem um codigo simples de um JPanel pra vc ver como funciona

Código:

public class Painel extends JPanel implements Runnable{

//crio o meu canvas, o grafico do canvas e a thread
BufferedImage img;
Graphics2D g;
Thread thread;

public Painel(){
//inicializo o canvas e crio o graphics com base no meu canvas
img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_ARGB);
g = (Graphics2D) img.createGraphics();
}

//essa parte é a que ativa a thread quando o painel for ativado
public void addNotify(){
super.addNotify();
if(thread == null){
thread = new Thread(this);
thread.start();
}
}
//esse é o codigo que vai rodar na thread
public void run(){
while(true){
draw();
//aqui também vai o meu método update, que nao vem o caso nesse exemplo
try{
//isso faz com o gameLoop funcione mais direitinho
Thread.sleep(1);
}
catch(Exception e){
e.printStackTrace();
}
}
}

public void draw(){
//aqui voce desenh o que quiser no canvas
g.setColor(Color.red);
g.fillOval(100, 100, 10, 10);

//aqui eu desenho o meu canvas na tela do componente
Graphics2D g2 = (Graphics2D) getGraphics();
g2.drawImage(img, 0, 0, null);
}

}


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 2 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB