Além disso encontrei um material muito bom mesmo a respeito de desenvolvimento de jogos em Java: Killer Game Programming.
Segue em anexo um .jar auto-executável com o jogo que estou fazendo. Ainda está em desenvolvimento (por exemplo: ainda não tem game over nem pontuação), mas já está funcional. Quando o jogo estiver pronto eu estou pensando em desenvolver um tutorial a respeito de programação de jogos em Java com o código-fonte do jogo.
Alguém por aqui já desenvolveu algum jogo comercial, ou produto final com uma qualidade boa?
<space> fazer com que a peça faça o caminho instantaneamente
o fundo ficou bonito, mas depois de 2 minutos começou a doer do lado da cabeça hehe
adotar nomenclatura em inglês para evitar coisas como PecasManager, mas isso é bem pessoal [/quote]
- Gostei da idéia do espaço… vou pensar nisso!
- No fundo eu quis viajar um pouco, pretendo manter o movimento, mas provavelmente até o fim do projeto vou bolar alguma imagem mais interessante para o fundo, quem sabe mudar a imagem a cada nível de jogo.
- Hehehe… PecasManager ficou bem miscelânico, né? Com certeza adotar linguagem única (de preferência uma linguagem universal na qual estão definidas as regras de nomenclatura do Java e JavaBeans) fica melhor…
Mas esse projeto ainda tem uma quilometragem pra rodar!
Valeu por fazer upload de outra versão, mas deu exceção:
java.lang.UnsupportedOperationException: Cannot change display mode
at java.awt.GraphicsDevice.setDisplayMode(GraphicsDevice.java:250)
at sun.awt.Win32GraphicsDevice.setDisplayMode(Win32GraphicsDevice.java:2
97)
at view.FullScreenWindow.disposeFullScreenWindow(FullScreenWindow.java:9
2)
at view.FullScreenWindow$1.run(FullScreenWindow.java:56)
[quote=Roger75]Valeu por fazer upload de outra versão, mas deu exceção:
java.lang.UnsupportedOperationException: Cannot change display mode
at java.awt.GraphicsDevice.setDisplayMode(GraphicsDevice.java:250)
at sun.awt.Win32GraphicsDevice.setDisplayMode(Win32GraphicsDevice.java:2
97)
at view.FullScreenWindow.disposeFullScreenWindow(FullScreenWindow.java:9
2)
at view.FullScreenWindow$1.run(FullScreenWindow.java:56)
Pelo jeito devo usar jdk 1.5 mesmo[/quote]
bom, esses métodos estão no java 1.4, então esse você vai precisar…
Isso não faz muito sentido… o que vc quis dizer, que estava devagar com as imagens? Se for, provavelmente você estava fazendo algo errado, hehehe…
Flw e boa sorte! Quem sabe você não me inspira pra eu fazer o meu Tetris hehehe
C:\Documents and Settings\dbalarini\Desktop\Arquivos>java -jar "Final Tetris 2006(2).jar"
Exception in thread "Thread-2" java.lang.IllegalArgumentException: Invalid display mode
at sun.awt.Win32GraphicsDevice.setDisplayMode(Win32GraphicsDevice.java:391)
at view.FullScreenWindow.setFullScreenWindow(Unknown Source)
at view.FullScreenWindow$1.run(Unknown Source)
[quote]Exception in thread “main” java.lang.UnsupportedClassVersionError: Main (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)[/quote]
[quote]Exception in thread “main” java.lang.UnsupportedClassVersionError: Main (Unsupported major.minor version 49.0)
Source)[/quote][/quote]
Para todo mundo que pegar esse erro: você tem de rodar esse programa usando Java 5.0 ou posterior. Simplesmente clicar duas vezes no Jar pode acabar invocando um Java 1.4 ou anterior na sua máquina.
Desculpem a demora pra responder, estou sem internet em casa.
Então, como eu estou usando a Fullscreen Exclusive Mode API, pesquisei o assunto. Quando são utilizadas imagens com canal alpha de transparência, a API não suporta a aceleração gráfica, apenas quando a transparência é total (como em um gif), então eu removi as imagens que utilizavam canal alpha (no caso as imagens png)…
Entretanto, a aceleração de imagens com canal alpha está prevista em próximas versões do Java, não sei se já na versão 6.
Espero que você fique inspirado! Quando começamos a mexer com alguma coisa pode ser difícil, mas vencida a dificuldade inicial, fica cada vez mais fácil, até que se torna natural!
:lol:
Ahuahuahua… sabe, o Picasso, antes de inventar o cubismo, teve que aprender as técnicas clássicas de pintura, que foram usadas por Leonardo da Vinci, por exemplo, para pintar a Mona Lisa. Somente depois de aprimorar a técnica ele criou coisas diferentes. Então, pra poder fazer um “Porno Tetris”, ou um “Conkers Bad Fur Day”, e ficar legal, eu creio que seja um pré-requisito já ter feito pelo menos um joguinho tradicional a fim de dominar bem a técnica!
É isso aí. Além do mais, eu usei algumas coisas específicas do Java 5, como o for avançado.
for(Object obj : lista){...}
E tem também o fato de que nos testes que eu fiz aqui usando Java 1.4, o aplicativo não conseguiu mudar a resolução do monitor, o que gerou erros como “Cannot change display mode” e “Invalid Display Mode”.
Bom, esse erro do Invalid Display Mode, talvez seja porque você estava tentando mudar para uma resolução não suportada. Por exemplo, existem placas que suportam 800x600x32, mas não 800x600x24.
Tem um método em alguma dessas classes GraphicAlgumaCoisa que retorna a lista de modos válidos, não sei como vc faz, mas seria interessante olhar ela antes de mudar.
Mas…
Aí você me pegou. Se antes dava erro e trocando de Java não ocorre o erro, aí não sei o que poderia ser hehehe
flw e continue o bom trabalho… aliás, eu cheguei a executar, mas não joguei porque to no trampo sabe como é… só vi que o fundo é animado e tem a pecinha caindo
Opa, enquanto nosso amigo não volta nisso eu posso dar uma ajuda.
Para fazer uma animação, a coisa é bem simples, você precisa de uma lista que irá guardar as imagens, o tempo entre cada uma delas e o tempo que o quadro atual está sendo mostrado.
Eu tenho aqui uma classe, que copiei de um livro on-line, infelizmente não tenho o link pro livro aqui, mas ela é excelente. Vou passar aqui ela e o modo de usar:
@return Returns the currentFrameIndex.
*/
public int getCurrentFrameIndex() {
return this.currentFrameIndex;
}
public int getTotalFrames() {
return frames.size();
}
private class AnimFrame {
Image image;
long endTime;
public AnimFrame(Image image, long endTime) {
this.image = image;
this.endTime = endTime;
}
}
}[/code]
Para usar a classe, você cria uma animação nova com o construtor público e vai adicionando as imagens e o tempo de duração dela. Aí, durante o seu programa, você precisa chamar o update() passando o tempo que passou desde a última chamada ao método update(), e na hora de desenhar, dar o getImage() que ele te retorna a imagem que deve ser desenhada naquela hora…
Aliás, vou até mandar o que tenho aqui pra vcs verem, quem sabe ajuda em alguma coisa né… isso era pra monografia da minha pós que nunca saiu hehehe.
Com fontes, e a classe de animação fica em com.lighthawkwings.graphics
flw povo
[edit]precisa do java 1.4 pra rodar… se bem que compilei aqui onde uso 1.5, então se der aquele erro de versão da classe não suportada, precisam recompilar com o 1.4…
[edit2]me enganei, compilei com o 1.4 mesmo. o eclipse só ta configurado com ele.