Controle direcional

Estou tentando criar um WUMPUS, mas não faço a minima ideia de como vou fazer o personagem se movimentar na JFrame
capturar as teclas eu ja sei… o problema mesmo é criar quadros para que ele possa se movimentar…
Ele so pode se mover para cima, baixo, esquerda e direita.

Pensei em fazer um tabuleiro com JPaneis, mas não consigo fazer interagir com as teclas…
Comecei com uma coisa bem simples, para tentar dar ideia de movimento… No caso, era mudando a cor de fundo dos JPaneis…
Mas o maximo que fiz foi um movimento…

Eu recomendo que você leia todos os meus artigos de Java 2D:
Escolhendo onde desenhar
Conhecendo o JFrame
Uma visão rápida sobre o Java 2D
Pintando no java 2D
O fantasma do Pacman (aqui tem um exemplo funcional)
Trabalhando com imagens

E como vai precisar fazer algo animado, veja também:
O loop de animação
A primeira animação
Desenho direto - Active Rendering

Outra boa fonte é o livro Killer Game Programming in Java, disponível online em:
http://fivedots.coe.psu.ac.th/~ad/jg/

E esse tutorial aqui sobre como fazer o Space Invaders:
http://www.cokeandcode.com/spaceinvaderstutorial

E use Java 2D diretamente.

[quote=ViniGodoy]Eu recomendo que você leia todos os meus artigos de Java 2D:
Escolhendo onde desenhar
Conhecendo o JFrame
Uma visão rápida sobre o Java 2D
Pintando no java 2D
O fantasma do Pacman (aqui tem um exemplo funcional)
Trabalhando com imagens

E como vai precisar fazer algo animado, veja também:
O loop de animação
A primeira animação
Desenho direto - Active Rendering

Outra boa fonte é o livro Killer Game Programming in Java, disponível online em:
http://fivedots.coe.psu.ac.th/~ad/jg/

E esse tutorial aqui sobre como fazer o Space Invaders:
http://www.cokeandcode.com/spaceinvaderstutorial

E use Java 2D diretamente.[/quote]

Muito obrigada. =)
era so de orientação que eu precisava! XD

Tranquilo.

Primeiro você aprende a desenhar certinho usando Java 2D. É a maneira mais interessante de se fazer jogos. Esqueça componentes do Swing como JPanels, JLabels, etc. Eles são lentos para os padrões exigidos por jogos e você tem pouco controle sobre o ciclo de pintura, o que pode gerar um jogo com flickering ou pequenos travamentos.

Depois falamos sobre a detecção do teclado e mouse.

Peguei a ideia do Space Invaders e configurei pra movimentar para cima e baixo o meu “hunter” está funcionando bem.
Agora estou tentando fazer ele se movimentar apenas a cada 100px de altura e 100px de largura… ta dando um trabalhozinho…
o meu JPanel eh de 400x400 quero que de a ideia de uma matriz 4x4, ja que a imagem eh de 100x100…
fazendo isso eu vou tentar de alguma forma fazer uma rotina para que a tela consiga verificar na minha matriz de dados, onde estão o Ouro, Monstro, Poço, Fedor e Brisa…

vai ser um pouco complicado pra mim… mas esse final de semana tem que render pra algo hahaha

Não sei se vc sabe o esquema do jogo, mas tive que fazer uma matriz para jogar esses componentes aleatoriamente…
ao jogar o monstro eu tenho que por ao seu redor (up, down, left e right) o componente Fedor, e o mesmo com o Poço (So que com a brisa ao redor)

quando o Hunter se movimenta de quadrado a quadrado ele vai visualizando o que se encontra nos proximos quadrados proximos a ele.

ou seja, no momento que o Hunter anda, deve aparecer imagens de Fedor, Brisa ou nada…

Nunca joguei esse jogo específico, mas parece ser bem simples, a gente chama jogos assim de Tile Based. Você vai encontrar material procurando por esse termo.

Me diz uma coisa, esse jogo você está fazendo para alguma matéria? E pra que curso?

Inteligencia Artificial, Ciencia da Computação D:
Vou pesquisar sobre isso =)

Legal. Eu dou aula dessa matéria na pós-graduação de jogos de computadores, aqui na PUC/PR.

Nossa! XD muito legal!
Encontrei um outr tutorial nesse mesmo local onde tem o Space Invaders, o tuto é o Tile Map… Esse se encaixa bem mais no que eu quero. Porem o jogador pode ainda assim mover para qualquer direção… -.-…

///////////////////////

Nossa, agora fez todo sentido do mundo… estava olhando o seu site e encontrei a mesma formula de movimentação que se usa no Space… existe alguma maneira de mover sem ser pelo tempo? e sim pelos pixeis?.. dar um passo de 100px por exemplo.

Se o jogador pode mover-se em QUALQUER direção, sobre qualquer ângulo, então ele terá um movimento vetorial. Nesse caso, é bom aprender um pouco sobre vetores:
Ponto V! - O uso de vetores nos jogos

É possível fazer movimentação vetorial e ainda calcular onde o personagem está dentro de um ou mais tiles.

Toda velocidade é dada em função de um tempo. Você não fala “meu carro anda a 100km”. Você fala “meu carro anda a 100km por hora”. Quando você diz que quer que seu personagem mova “100 pixels” seria 100 pixels “por segundo”, ou mesmo “por décimo de segundo”.

É para isso que o tempo é usado. Se quiser entender melhor o conceito, leia: Ponto V! - Animação baseada em tempo.

Tenho um artigo que explica, em Java, como fazer um algoritmo de loop de animação bastante constante. Você até poderia desprezar o tempo nas fórmulas se utilizá-lo pois, efetivamente, você teria uma taxa fixa de quadros por segundo e, portanto, um tempo fixo (em 60FPS seria de 1/60 segundos, ou 16ms). Assim, toda velocidade que você colocar será pela unidade de 1/60 segundos.

O artigo já está linkado ali em cima, é o “O loop de animação”.

O game loop e o controle de tempo são uma das partes mais importantes de um jogo. É ele que vai fazer o jogo rodar de maneira fluída, ou não. E é ele que garantirá que o jogo roda de maneira homogênea em todas as máquinas. Sem o controle por tempo, você pode ter o jogo bem regulado na sua máquina, mas totalmente desregulado na do seu professor. Uma situação que com certeza você não irá querer passar.

Ufa, depois de muita teima e quatro longos dias. Eu consegui fazer o que foi pedido.
So não ficou o melhor grafico do mundo, mas está fazendo o q eu queria.

Fiz andar direitinho quadrado por quadrado.

No final criei 3 classes

uma que tinha a rotina do jogo
outra que montava a interface e outra que montava uma matriz de orientaçao, tipo… uma matriz com numeros sorteados.

=) foi um trabalho mto interessante de fazer. deu muito trabalho mesmo. e consegui graças as boas dicas que tive aqui XD

thanks! x)

Legal. :slight_smile: