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.
O que você já fez?
(Feliz páscoa também!)
Ta fazendo isso usando Swing?
[quote=marcelo_uerj@hotmail.com]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.[/quote]
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
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.
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.
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.
No próprio site dele tem exemplos feito em java sim…
E muito legais, com código para baixar e tudo…
Basta procurar lá!
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.
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 =)
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.
Procura lá no pontov… os programadores de lá em cada sessão deles tem muitos exemplos
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.
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.
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.
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.
Entendi. Mas como posso chamar essa instrução fora do
public void paintComponent(Graphics g) {
?
[quote=marcelo_uerj@hotmail.com]Entendi. Mas como posso chamar essa instrução fora do
public void paintComponent(Graphics g) {
?[/quote]
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!
[code]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 já carregada
ball.draw(g2d);
g2d.dispose();
}
}[/code]
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.
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.