Vetor

24 respostas
M

Olá pessoal!

Estou com um problema dificil de resolver:

Preciso criar umas bolinhas que variem a posição com o tempo, atraves da velocidade ajustada. O problema é que cada bolinha pode assumir uma velocidade e posição diferente.

Minha ideia era criar uma classe (vetor) que pinte uma bolinha, e chamar ela em uma outra classe que possua as variaveis de tempo e velocidade. Ao ajusta-las, variava sua posição. Essas bolinhas seriam criadas em uma taxa de tempo, que deve ser ajustada.

Já quebrei a cabeça pra fazer isso e não consegui! Alguem tem alguma ideia?

Abraço e Feliz Páscoa para todos!

Marcelo.

24 Respostas

pedroroxd

O que você já fez?
(Feliz páscoa também!)

hodrigohamalho

Ta fazendo isso usando Swing?

pvrsouza

[email removido:
]Olá pessoal!

Estou com um problema dificil de resolver:

Preciso criar umas bolinhas que variem a posição com o tempo, atraves da velocidade ajustada. O problema é que cada bolinha pode assumir uma velocidade e posição diferente.

Minha ideia era criar uma classe (vetor) que pinte uma bolinha, e chamar ela em uma outra classe que possua as variaveis de tempo e velocidade. Ao ajusta-las, variava sua posição. Essas bolinhas seriam criadas em uma taxa de tempo, que deve ser ajustada.

Já quebrei a cabeça pra fazer isso e não consegui! Alguem tem alguma ideia?

Abraço e Feliz Páscoa para todos!

Marcelo.

Cara não tenho ideia de como fazer isso, mas acho interessante que dê uma lida em Física para Games, pois lá vc pode achar material para implementar essa coisa de velocidade e tempo.

Abraços

malucocelo

Use threads, cada bola um thread, use arrays, random e timeInMillis para fazer a temporização, trate as colisões para uma bola não sobrepor a outra.
São só idéias.

ViniGodoy

Dê uma lida em:
Ponto V! - Animação baseada em tempo
Ponto V! - Java 2D

Não é um programa simples. E não vai usar múltiplas threads.

M

Olá!

Vini, dei uma olhada em seus tutoriais. Sobre animação baseada em tempo, teria algum feito em JAVA?

O exemplo ball que fez é perfeito. Estou qurendo algo parecido, só mais complicado. Minha dúvida maior é como criar diversas bolinhas.

Por enquanto só tenho feito a classe que faz os calculos físicos, dentre eles a velocidade. Numa outra gero o ambiente, com controladores das bolinhas. Agora para criar as bolinhas é que estou enrolado.

O efeito gerado pela bolinha nesta classe ball é perfeito. Dá realmente a ideia de um movimento suave aos nossos olhos. É mais ou menos por aí que preciso; sendo uma criação de bolinhas em uma taxa de tempo. Como fazer esta criação?

Agradeço (desesperado! RS!) a ajuda de todos.

Marcelo.

pedroroxd

No próprio site dele tem exemplos feito em java sim…
E muito legais, com código para baixar e tudo…

Basta procurar lá!

ViniGodoy

Tem sim, eu passei o link do Java 2D. Lá tem um artigo sobre como fazer um game loop e controla-lo. Você pode unir o conhecimento dos dois para fazer seu próprio exemplo em java. Fazer a bolinha é o mais fácil.

Se você quer simular física de maneira um pouco mais avançada, dê uma olhada no artigo “O uso de vetores nos jogos”, ali no site também.

pedroroxd

E depois se tiver dúvidas, tire com seu professor de física! huAhuUAHhua
zuera…
Mas por isso que a maioria dos programadores bons de jogos fizeram engenharia… tem muita base de física e matemática, que ajuda bastante =)

M

RS! Pois é! Na verdade sou um futuro físico, e este trabalho é uma simulação de um fenômeno físico que estou me dedicando a fazer para facilitar o aprendizado da matéria, em aulas de Física. Estou um pouco desesperado pois meu tempo está bem curto! Meu maior problema mesmo é com a programação. Será que alguem teria algum exemplo de algo do tipo?

Abraço,

Marcelo.

pedroroxd

Procura lá no pontov… os programadores de lá em cada sessão deles tem muitos exemplos

M

Boa noite!!

Consegui criar um efeito do tipo que preciso em minha aplicação, unindo o raciocínio do programa ball. Agora alguns probleminhas ocorrem:

Tenho uma imagem de fundo, que define meu cenário e ao criar a bolinha, ela funciona bem, porem, a imagem apresenta algumas falhas repentinas (imagem desfocando e quadros quebrando). O que pode ser isso?

Criando essa bolinha e agora, ajustando sua velocidade atraves de dispositivos que controlam os fenomenos físicos, tudo está resolvido. Mas agora como posso criar outras bolinhas, que apareçam numa taxa escolhida?

Reparei que o sistema fica um pouco lento e a bolinha nem sempre faz um movimento suave; isto pode ser ocasionado pelo repaint(), que sempre pinta toda a tela (inclusive a imagem de fundo). É possível usar o repaint() apenas na bolinha?

Abraço,

Marcelo.

ViniGodoy

Você já está usando a escrita direta? Acontece que o Swing pode ignorar alguns repaints, quando vê que eles são dados numa taxa rápida demais.

Quanto ao fundo, você está repintando ele? Você pode postar o código todo aqui, ou um .jar para vermos o que está acontecendo? Geralmente não é problema pintar um fundo a cada quadro.

Ah, e certifique-se também que você não está carregando a imagem do fundo a cada repaint.

M

Olá Vini!

Acho que está repintando sempre o fundo. Veja meu paint:

public void paintComponent(Graphics g) { //Aqui começa nossa função paint, para pintar a tela      
           	     super.paintComponent(g); //Chamamos a função paint
           	  
           	     Graphics2D g2d = (Graphics2D) g; //Chama a classe 2D 
           	  
         
			
			
           	            	       
              try { //Cria um evento no sistema  
         		           		    
           		  InputStream imgStream = getClass().getResourceAsStream("Imagens/layout.jpg"); //Chama nossa imagem layout     
                  BufferedImage image = ImageIO.read(imgStream);       //Armazena a imagem na memória
                  g2d.drawImage(image, 0,0,800,600, this); //Pinta nossa imagem na tema com a configuração escolhida
              
       			  }
         			catch(Exception e) {
         			         	         				
         			System.exit(0); }   //Encerra o programa se a imagem não for encontrada*/
         	    	ball.draw((Graphics2D) g); //Desenhamos a bola	                                  
         		}

Como pintar somente a bola?

Abraço,

Marcelo.

ViniGodoy

Essa operação carrega a imagem do disco:

InputStream imgStream = getClass().getResourceAsStream("Imagens/layout.jpg"); //Chama nossa imagem layout BufferedImage image = ImageIO.read(imgStream); //Armazena a imagem na memória

Carregar a imagem é uma operação extremamente lenta, e não pode estar no seu ciclo de pintura. Transforme image num atributo e mova esse código para o seu construtor.

Você deve continuar repintando o fundo, como você está fazendo.

M

Entendi. Mas como posso chamar essa instrução fora do

public void paintComponent(Graphics g) {

?

pedroroxd

[email removido:
]Entendi. Mas como posso chamar essa instrução fora do

public void paintComponent(Graphics g) {

?


Tipo… o que vc ta fazendo, é criando 1 objeto e instanciando ele em todo ciclo de pintura…
Coloca ela no constructor… se vc for utilizar a mesma imagem, não é necessario fazer o que está fazendo, é um “pleonasmo de objetos”…
Pq carregar a imagem é lento!

ViniGodoy
public class SuaClasse {
    //Crie um atributo para a imagem
    private BufferedImage fundo = null;

    public SuaClasse() {
        //Carregue a imagem uma única vez, no construtor.
        try {
            fundo = ImageIO.read(getClass().getResourceAsStream("/images/fundo.jpg"));
        } (catch IOException e) {}
    }

    public void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g.create();
        g2d.drawImage(fundo, 0,0, 800, 600, null); //Pinte a imagem  carregada
        ball.draw(g2d);
        g2d.dispose();
    }
}

E, já respondendo a sua pergunta. Para criar várias bolas, basta criar um ArrayList de balls. E chamar o update e paint em todas as bolas do arrayList.

M

Perfeito. Vou reescrever a classe com essas instruções.

Sobre a criação de várias bolinhas, nunca criei um ArrayList. Vou pesquisar tambem, mas será que teria algum exemplo ou tutorial disto?

Muito obrigado pela ajuda!

Marcelo.

ViniGodoy

Tá na mão:
http://www.guj.com.br/posts/list/74068.java#389435

M

Boa tarde!

Vini,

carreguei a imagem no construtor mas o problema continua. Acho que o problema é mesmo no repaint(), pois a cada ciclo ele pinta novamente a imagem de fundo, dando essa falha na imagem.

Como posso resolver isso?

Abraço!

M

BOA TARDE PESSOAL!

Sobre o post que criei agora, Vini, por favor desconsidere! O problema está no meu compilador java! Este erro passou a aparecer em todos os programas java. Vou tentar descobrir o que está havendo.

Abraço,

Marcelo.

M

Bom dia!

Resolvi o problema aqui e agora está tudo em ordem!

Ainda estou com problemas na criação de várias bolinhas. Dei uma olhada no seu exemplo (muito bom por sinal) mas não entendi como usar no caso da bolinha, onde temos uma variavel gráfica ao invés de palavras. Como fazer neste caso?

Abraço,

Marcelo.

M

Olá! Bom dia a todos!

Consegui criar uma lista de bolinhas da seguinte forma:

for (int i = 0; i < x; i++) {    
  	  
  	    list.add(new Ball (10,10));
 } 

//Depois no paint, faço o seguinte:

	for (int i = 0; i < x; i++) {    
  	  
  
    				(list.get(i)).draw(g2d);    
     
 } 
       
       
         		}

Com isso consegui pintar a quantidade de bolinhas de acordo com o limite de x no for. Agora tenho os seguintes problemas:

Todas as bolinhas saem ao mesmo tempo. Como fazer para controlar o tempo de emissão, ou seja, fazer com que as bolinhas apareçam numa cadencia definida?

Como alterar o valor de x dentro do programa, para ir alterando a quantidade de bolinhas que vão saindo? Tentei fazer um dispositivo para aumentar ou diminuir x, mas o for não aceita e ao fazer isto dá erro.

Criado 4 de abril de 2010
Ultima resposta 18 de abr. de 2010
Respostas 24
Participantes 6