Deletar Imagem  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Primeiramente, Olá à todos.

Estou com uma duvida relacionada com o paintComponent. Estou fazendo um simples jogo em que o personagem (uma imagem) se move usando as setas. Mas porém, quando ele se move ele deixa um rastro de sua imagem. Só que não posso simplesmente pintar o fundo, pois o fundo é uma imagem também. Minha dúvida é o seguinte:

Existe algum métodos removeImage(Image i)?
Se não existe algo parecido, como fazer?


Atenciosamente, Gustavo.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Pinte o fundo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Este é o problema, o fundo é uma imagem. Eu crio a imagem denovo?
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Qual é o problema do fundo ser uma imagem?
Guarde-a numa variável e simplesmente pinte-a novamente.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Não irá tornar o jogo mais lento?
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Um pouco sim, mas ainda será fácil manter uma taxa de FPS aceitável.
Na verdade, é a forma normal de se fazer.

O que você não deve fazer é carregar a imagem dentro do paintComponent, carregue-a só uma vez, na construção do seu jogo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline

Godoy, como carrego o plano de fundo sem ser no paintComponent? Poderia me dar um exemplo?
E se o plano de fundo só for colocado uma vez, irá o ocorrer o erro do post inicial, irá criar várias imagens do boneco andando (usando paintComponent).
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Posta teu código aí.

Só estou falando que a carga da imagem em si não pode ser no paintComponent. Faça no construtor da sua classe. A pintura, lógico, fica no paintComponent.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline



Atenciosamente, Gustavo.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

Faça assim:




@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
augustogava
What is classpath?

Membro desde: 16/03/2010 08:31:46
Mensagens: 7
Offline

Olá galera,

desculpa invadir o post, mas vi que foi algo igualsinho comigo rss,

Vi o site do Godoy de jogos e comecei a criar um joguinho de nave seguindo o exemplo seu.... e quando coloquei a imagem de fundo, ferro rss fica o rastro da Nave em cima da Imagem de fundo.

E já tentei colocar a img de fundo pra ser carregada igual vc disse abaixo, mas ai os fps do jogo fica muitoooooooooo lento. A imagem de fundo que estou usando é grande 800x1600, acho que solução vai ser substituir essa imagem mesmo, e criar o fundo de outra maneira.... ou tem alguma saida com a imagem grande?
GustavoBorba
JavaChild

Membro desde: 23/11/2009 19:23:23
Mensagens: 110
Offline



Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:5
at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
at java.awt.image.Raster.createWritableRaster(Raster.java:93
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1056)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:925)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:897)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1374)
at prj.<init>(prj.java:15)
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
at prj.initComponents(prj.java:25)
at prj.<init>(prj.java:1
at drawPanel.<init>(prj.java:40)
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

augustogava wrote:Olá galera,

desculpa invadir o post, mas vi que foi algo igualsinho comigo rss,

Vi o site do Godoy de jogos e comecei a criar um joguinho de nave seguindo o exemplo seu.... e quando coloquei a imagem de fundo, ferro rss fica o rastro da Nave em cima da Imagem de fundo.

E já tentei colocar a img de fundo pra ser carregada igual vc disse abaixo, mas ai os fps do jogo fica muitoooooooooo lento. A imagem de fundo que estou usando é grande 800x1600, acho que solução vai ser substituir essa imagem mesmo, e criar o fundo de outra maneira.... ou tem alguma saida com a imagem grande?


1. O seu jogo roda nessa resolução toda?
2. O que você está chamando de FPS muito lento?

É uma péssima prática usar o paintComponent. O ideal, no caso de jogos, é mesmo usar a técnica de escrita direta, que está descrita no meu portal:
Desenho direto - Active Rendering

Jamais carregue imagens ou qualquer outro tipo de recurso no paint, é um suicídio.

This message was edited 1 time. Last update was at 16/03/2010 14:18:29


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline

GustavoBorba wrote:java.lang.OutOfMemoryError: Java heap space


Esse erro já diz tudo. Faltou memória para carregar a imagem. De que tamanho as imagens são?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

Só complementando: não é correto chamar o repaint() quando uma tecla é pressionada. É mais correto criar uma Thread que chama repaint() periodicamente. E é mais correto ainda fazer um active rendering.

Sugiro que veja os artigos no site do ViniGodoy (veja a assinatura dele) para entender a melhor forma de criar jogos.

E, fora da questão, por convenção as classes, interfaces e enums em Java seguem o padrão upper camel case.

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team