![]() |
|
Este artigo, não ensina como programar para Android, para isso siga esse roadmap. O intuito desse artigo é mostrar as diferenças entre o Java2D e Android, e também mostrar um jogo como exemplo. Este artigo também mostra alguns conceitos de como programar jogos, e como fazer isso no Android e de quebra um pouquinho de matematica e fisica.
Se você já sabe como programar jogos com Java2D, mudar para o Android vai ser fácil.
O sistema de desenho do Android é parecido com o do Java SE, mas no lugar de denharmos no Graphics, desenhamos no Canvas.
As principais diferenças são:
- Canvas = Graphics
- Matrix = AffineTransform
- Bitmap e Drawable = BufferedImage
Para termos acesso a uma surface para desenho, estendemos a classe View e sobrescrevemos o método onDraw(Canvas) e desenhamos nesse parâmetro.
Assim como em Graphics, precisamos salvar o estado do nosso objeto de desenho antes de alterar suas propriedades, para isso usamos o método save() e depois da rotina de desenho usamos o método restore() para retornar o estado original no Canvas, permitindo qualquer outro método de desenho trabalhe corretamente com ele( desenhos da UI por exemplo).
Então vamos lá, crie um projeto com os seguintes parâmetros.
Target: 2.1
Application Name: JPong
Package Name: br.com.pontov
Create Activity: AndPongActivity
Min SDK Version: 7
Crie uma nova classe no pacote br.com.pontov.jpong chamada GameView que extenda android.view.View.
Precisamos sobrescrever os três construtores de View pois o Android os usa quando está inflando o Layout do XML, e um ultimo para criar Layouts programaticamente, como queremos que a classe se comporte igual não importa como esteja sendo construída então vamos chamar um método init() que faça nossa rotina de construção dentro de cada construtor, com isso nosso código ficará assim.
package br.com.pontov.jpong; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; public class GameView extends View implements Runnable { public GameView(Context context) { super(context); init(); } public GameView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public GameView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { //Metodos para inicializar os componentes da nossa tela } public void onDraw(Canvas canvas){ //Desenhar na tela } }
Os métodos de desenho do canvas fora as coordenadas do objeto que vamos desenhar também precisam de um objeto Paint que indica como o objeto deve ser pintado, e como recomendações do Android, não se deve ficar criando esses objetos dentro do método onDraw que será chamado várias vezes na nossa aplicação, então vamos criá-la no nosso método init() e guardar a referencia dela em uma variável na tela.
Crie os atributos na classe.
private Paint backgroundPaint; private Paint ballPaint;
No método init vamos criar esses objetos e no método onDraw desenhar objetos na tela.
private void init() { backgroundPaint = new Paint(); backgroundPaint.setColor(Color.BLACK); ballPaint = new Paint(); ballPaint.setColor(Color.RED); } public void onDraw(Canvas canvas){ //Guardar o estado do Canvas canvas.save(); //Pintando o fundo canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundPaint); //Pintando a bola (x, y, radius, Paint) canvas.drawCircle(80,80,10,ballPaint); //Retornando o estado do Canvas canvas.restore(); }
Agora abra o arquivo res/layout/main.xml, ele por enquanto contém o básico de uma aplicação HelloWorld. Para usar nosso componente customizado nas tags do XML só precisamos passar seu nome junto com a declaração do pacote, o XML então vai ficar assim:
Para transformar nossa atividade em FullScreen é simples, basta editar o arquivo AndroidManifest.XML e adicionar o seguinte atributo na tag activity da nossa aplicação:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Rodando nosso exemplo já temos algo como isso.
-
29/03/2011 11:11:53 | Bruno Crivelari Sanches
Comparar uma linguagem de programação com um ferramenta de autoria não tem sentido algum.
É o mesmo que comparar uma caixa de ferramentas com um robo e dizer que o robo é muito melhor. De fato, o robo faz mais coisas, mas você sempre vai estar restrito ao que o fabricante dele acha bom ou impõe a você, isso resolve o problema de boa parte das pessoas, mas existe um mundo além do unity e pessoas que não podem ficar preso as suas limitações.
Eu mesmo tenho um projeto de uma empresa que já estamos analisando a melhor estratégia, pois chegamos no limite do unity e ele simplesmente não satisfaz nossos requisitos e é provavel que troquemos por outra tecnologia, talvez ogre, que a principio não faz tudo que o Unity faz, mas assim como o Java, não nos limita.
T+
-
29/03/2011 14:55:45 |201.58.116.xxx| Júlio Brito
Que artigo legal Marcos. Esclarece muitas coisas que são úteis em diversos tipos de aplicações.
Sobre o java 2D e Unity3D lá em cima. É bom saber que ambas usam opengl e apenas tem conceitos de uso diferentes.
-
29/03/2011 16:12:18 |189.59.222.xxx| Marcos Vasconcelos - Ty!
Obrigado, essa foi minha intenção, fora explicar sobre jogos em geral mostrar como fazer isso no Android.
-
29/03/2011 16:59:08 |200.186.180.xxx| Marcos Koga - Awesome!
Cara, muito bom o seu artigo. foi bem didático(até para quem não tem muito conhecimento em GameDev) e a escolha de fazer um pong é muito boa, pois além de ver as funcionalidades triviais em um jogo, tem um pouco de matemática ;3
Veja se não tem como anexar uma parte a respeito do áudio =)
-
29/03/2011 17:51:47 |189.59.222.xxx| Marcos Vasconcelos - Ty!
Valeu. Escolhi Pong pois usa um pouco de cada area essencial para um jogo.
E é uma boa idéia sobre audio, mas isso vai ser assunto pra outro artigo.
-
29/03/2011 19:54:58 |200.206.15.xxx| Eduardo Bregaida - Muito Bom
Parabéns Marky, ficou muito bom, vou ler os tutoriais de Android que colocou no seu blog, só preciso de tempo rsss
-
29/03/2011 20:12:37 |189.59.222.xxx| Marcos Vasconcelos - Valeu!
Obrigado. Eu gastei um bom tempo escrevendo estes artigos. Espero que as pessoas também gastem para ler e aprender com eles.
-
01/04/2011 18:45:05 |189.71.224.xxx| Lucas Daltro - Muito Bom!
Pow cara,muito bom o artigo
Mas o android emulator tá travando que só aqui
-
01/04/2011 21:04:09 |200.150.190.xxx| Marcos Vasconcelos - Valeu
Valeu. E realmente, o emulador é lento. Eu normalmente apenas vejo se funciona corretamente no emulador depois testo em um device.
-
02/04/2011 02:12:05 |189.71.224.xxx| Lucas Daltro
Queria pode instalar o android no meu BlocK Berry...A cada dia que passa eu me arrependo mais de ter comprado um celular chinês
-
02/04/2011 16:16:25 |189.120.193.xxx| Marcos Vasconcelos - True
Para quem quer desenvolver mobile não compensa comprar um desses.
-
11/04/2011 16:57:47 |200.225.197.xxx| Marcelo - Dúvida
Marcos, estou com uma dúvida, no arquivo ComplexGameView.java, método init(), lá dentro tem um laço for que itera só uma vez. Qual era sua intenção nesse laço?
-
11/04/2011 19:17:41 |189.59.222.xxx| Marcos Vasconcelos
Na verdade, é que eu havia adicionado muitas bolinhas na tela para rebater todas. Mas para tirar as pics pro artigo eu só coloquei 1 para tirar uma foto com apenas uma bolinha.
-
12/09/2017 00:35:47 |177.69.134.xxx| Cristiano Marçal Toniolo - Como executar o JPong no AndroidStudio?
Boa noite Marcos,
Tudo bem? Sou novo na programação para Jogos e seu tutorial é muito interessante e esclarecedor, mas quando tentei rodar o projeto no AndroidStudio, não me dá a permissão para acessar as Virtual Devices da minha máquina. Como posso resolver isso?
Atenciosamente,
Cristiano
-
12/04/2011 12:20:37 |201.26.209.xxx| João Pagotto - Rotação de Imagens PNG
Olá parabéns pelo artigo.
Gostaria de fazer uma bussula customizada para o Android, aí vem o problema hehehe. Como fazer uma rotação de uma imagem PNG no Draw do Android ?
[']s
-
12/04/2011 13:05:51 |189.59.222.xxx| Marcos Vasconcelos
voce faz isso girando o Canvas com o método rotate(float graus)
-
23/04/2011 00:16:46 |87.216.116.xxx| Marcelo Barros - Rotação
Seu artigo esta muito bom mesmo, mts parabens.
Sera que me pode ajudar, imagina que pintamos uma roda, e giramos o dedo a volta dela, que detecte se estamos girando na direcção dos ponteiros do relogio ou ao contrario.Abraço.
-
23/04/2011 01:51:36 | Vinícius Godoy de Mendonça
Isso você resolve facilmente através da classe de vetores. Tendo dois pontos (o do início e o do fim do movimento), use o método angleSign para obter o angulo entre eles, com sinal.
O sinal indica se o sentido é horário ou anti-horário.
-
23/04/2011 02:03:23 |87.216.116.xxx| Marcelo Barros - Rotação
Não entendi muito bem, imagina que eu começo num ponto, e dou uma volta de 180 graus na direcao do relogio, e não dei uma volta 180 graus ao contrario do ponteiro do relogio.
Desculpa a ignorancia.
Cumprimentos.
-
23/04/2011 03:15:45 | Vinícius Godoy de Mendonça
Você leu chegou a ler o link sobre vetores? http://bit.ly/usovetores
-
24/04/2011 23:46:52 |87.216.116.xxx| Marcelo Barros
Deu jeito, vou usar Produtos Escalares.
Voces tem alguma comunidade, onde me possa juntar?
Abraço.
-
25/04/2011 00:57:37 | Vinícius Godoy de Mendonça
Nós somos participantes ativos do fórum programadores de jogos:
http://www.programadoresdejogos.com.br
-
24/04/2011 23:03:24 |87.216.116.xxx| Marcelo Barros - OnFling
Ando a dias com isto.
Tenho a minha classe principal "main" (Activity), criei uma class que estende de uma imageview "ImageViewI" e logo adiciona a minha classe principal (activity).
Eu quero detectar um onfling mas quando este é sobre a minha classe "ImageViewI", sera que posso nessa class implementar OnGestureListener, ou se for nesta mesma class como nao é activity nao vai fazer nada.
Posso de alguma maneira fazer isto na minha class main, para que so de bola quando o onfling é sobre a minha "ImageViewI".Desculpem ser chato.
Abraço.
-
24/04/2011 23:25:02 |87.216.116.xxx| Marcelo Barros - Resolvido
Penso que o tenho resolvido, na verdade não precisso usar um onfling.
Com isto ja me resolve, e uma boa opcão?"meucomponente".setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//meus metodos
return false
}
});
-
25/04/2011 16:49:51 |189.59.222.xxx| Marcos Vasconcelos
Assim como no Swing, voce pode implementar um Listener para cada componente, então voce pode implementar no seu ImageView e ainda ter listeners em outros lugares.
-
30/04/2011 14:25:52 |187.113.68.xxx| Junior - Não consegui
Grande Marcos, não consegui rodar este exemplo.
No console do eclipse não aparece nenhum erro, as mensagens finais são:
[2011-04-30 11:21:29 - GameView] Success!
[2011-04-30 11:21:29 - GameView] Starting activity br.com.pontov.AndPongActivity on device emulator-5554
[2011-04-30 11:21:31 - GameView] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=br.com.pontov/.AndPongActivity }E na Tela do Emulador aparece "Sorry - The Application jPong (process br.com.pontov) has stopped unexpectedly. Please try again."
Fiquei na dúvida se fiz algo correto. QUando criei o novo projeto uma nova classe chamada AndPongActivity é criada e criei uma nova chamada GameView. Percebi que AndPongActivity fica em br.com.pontov e GameView em br.com.pontov.jpong. Sera que isso ?
-
30/04/2011 16:30:01 |189.120.193.xxx| Marcos Vasconcelos
Entao, o erros do Android, são mostrados na View LogCat do Eclipse.
Para abri-lo vá em:
Window > Show View> Other... > +Android > LogCatEsse é como o Console, mas mostra as informações do que acontece no emulador.
Seu StackTrace estará lá.
Da uma olhada e poste novamente.
-
30/04/2011 17:08:18 |187.113.68.xxx| Junior - Stack Trace
Valeu pela resposta Marcos, fui na perspectiva DDMS e la encontrei o LogCat. Segue o filtro considerando somente os erros do PID de meu aplicativo:
Uncaught handler: thread main exiting due to uncaught exception
java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.pontov/br.com.pontov.AndPongActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class linearlayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2 496)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:25 12)
at android.app.ActivityThread.access$2200(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:61
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class linearlayout
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindo w.java:19
at android.app.Activity.setContentView(Activity.java:1622)
at br.com.pontov.AndPongActivity.onCreate(AndPongActivity.java:11)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2 459)
... 11 more
Caused by: java.lang.ClassNotFoundException: android.view.linearlayout in loader dalvik.system.PathClassLoader@44e8c790
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.view.LayoutInflater.createView(LayoutInflater.java:466)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:544)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(Phon eLayoutInflater.java:66)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
... 19 more
Unable to open stack trace file '/data/anr/traces.txt': Permission denied
-
30/04/2011 20:57:27 |189.120.193.xxx| Marcos Vasconcelos
Hmm...
"android.view.linearlayout"
O correto é LinearLayout (letras maiusculas)
-
11/05/2011 23:45:38 |87.216.123.xxx| Marcelo Barros - Selection
Ola,
Desculpa postar isto aqui, mas não sei como entrar em contacto com voce e a verdade é que tenho certeza que voce pode resolver isto.
Tenho uma listview e quero fazer um setSelection(pos) e que a linha que foi selecionada mude de cor, isto sem ter de recorrer necessariamente a codigo.
Visto que eu ja tenho um estilos, um bocado do que esta defenido
Quando ponho o dedo em cima da linha ela muda para a cor azul, mas quando tiro volta ao normal, não fica com a cor de seleccionado.
Mas a parte de isto eu queria com o método setSelection(pos) escolher uma linha e que ela ficasse igualmente selecccionada e mudasse de cor.Cumprimentos.
-
12/05/2011 13:39:58 |200.170.114.xxx| Marcos Vasconcelos
O melhor lugar para voce postar isso seria no forum de Android no www.guj.com.br
Mas respondendo a sua duvida, voce vai precisar guardar o indice de onde voce está selecionando e modificar o seu Adapter para retornar a linha desse indice com a cor de fundo diferente.
-
12/05/2011 14:01:33 |193.146.142.xxx| Marcelo Barros
Desculpa estar a chatear, mas "modificar o seu Adapter para retornar a linha desse indice com a cor de fundo diferente", dizes fazer via codigo, o genero de um metod que altera o background?
Nativamente e com os estilos xml nao e possivel?
-
12/05/2011 17:24:30 |200.170.114.xxx| Marcos Vasconcelos
Talvez até seja, mas eu digo programaticamente mesmo.
-
20/05/2011 17:43:07 |187.5.159.xxx| derUbar - MapView
Olà,
Vc saberia se e possivel criar um poligono delimitando uma area no mapview no emulador do android?
Eu gostaria de trabalhar com poligonos igual a funçao do google maps.
-
20/05/2011 20:48:32 |200.170.114.xxx| Marcos Vasconcelos
Eu não entendi sua pergunta.
Se o que voce quer é criar aqueles desenhos que aparecem como popup no Google Maps por poligonos, é possivel sim.
Voce tem o seu objeto Path e tem que dar um translate nele antes de desenha-lo
-
20/05/2011 20:57:18 |187.5.159.xxx| derUbar - Mapa
Eu tenho o mapa em meu emulador, no google maps existem a opçao criar mapa, nessa opçao eu posso criar linhas, poligonos, marcar locais com objetos e marcar trajetos via estradas.
Eu precisaria ter essas funçoes em meu mapa no android. Ou pelo menos a funçao de criar poligonos.
-
25/05/2011 21:42:24 |200.162.69.xxx| Java Player
Onde encontro o código da classe:
br.com.pontov.Vector2D ?
Está numa biblioteca disponível para download?
Obrigado
-
07/09/2011 01:26:38 |187.57.181.xxx| Jeferson
Ola Marky, estou tendo o mesmo problema do junior tambem.. a stack trace esta identica.. mas, mudando de linearlayout para LinearLayout. obtive o mesmo erro, a configuração do projeto, e as classes estao exatamente como voce demostrou no tutorial.. o que pode ser ?
-
07/09/2011 17:49:50 | Marcos Vasconcelos
Cara, da uma olhada melhor nos XMLs, por que a pouco tempo descobri que é o CSS do PontoV que deixa tudo minusculo.
-
11/10/2011 03:16:36 |187.106.129.xxx| Marcos Almeida - Problemas com GoogleMaps
Marcos Vasconcelos boa noite,
Estou tentando plotar um simples mapa no android, mais esta muito complicado. Não sei o que faço de errado.
Recebo a mensagem de erro abaixo:Sorry! The application HelloMap ( process org.android.maps ) has stopped unexpectedly. Please try again
View image
E esse é o erro:
ERROR/Zygote(33): setreuid() failed. errno: 2
10-11 02:54:33.144:
ERROR/Zygote(33): setreuid() failed. errno: 17
10-11 02:54:34.634:
ERROR/BatteryService(59): usbOnlinePath not found
10-11 02:54:34.634:
ERROR/BatteryService(59): batteryVoltagePath not found
10-11 02:54:34.634:
ERROR/BatteryService(59): batteryTemperaturePath not found
10-11 02:54:34.654:
ERROR/SurfaceFlinger(59): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
10-11 02:54:42.234:
ERROR/PackageManager(59): Package com.android.gesture.builder signatures do not match the previously installed version; ignoring!
10-11 02:54:43.636:
ERROR/EventHub(59): could not get driver version for /dev/input/mouse0, Not a typewriter
10-11 02:54:43.636:
ERROR/EventHub(59): could not get driver version for /dev/input/mice, Not a typewriter
10-11 02:54:43.843:
ERROR/System(59): Failure starting core service
10-11 02:54:43.843:
ERROR/System(59): java.lang.SecurityException
10-11 02:54:43.843:
ERROR/System(59): at android.os.BinderProxy.transact(Native Method)
10-11 02:54:43.843:
ERROR/System(59): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:14 6)
10-11 02:54:43.843:
ERROR/System(59): at android.os.ServiceManager.addService(ServiceManager.java:72)
10-11 02:54:43.843:
ERROR/System(59): at com.android.server.ServerThread.run(SystemServer.java:184)
10-11 02:54:45.074:
ERROR/SoundPool(59): error loading /system/media/audio/ui/Effect_Tick.ogg
10-11 02:54:45.093:
ERROR/SoundPool(59): error loading /system/media/audio/ui/KeypressStandard.ogg
10-11 02:54:45.093:
ERROR/SoundPool(59): error loading /system/media/audio/ui/KeypressSpacebar.ogg
10-11 02:54:45.104:
ERROR/SoundPool(59): error loading /system/media/audio/ui/KeypressDelete.ogg
10-11 02:54:45.104:
ERROR/SoundPool(59): error loading /system/media/audio/ui/KeypressReturn.ogg
10-11 02:54:48.543:
ERROR/ThrottleService(59): Could not open GPS configuration file /etc/gps.conf
10-11 02:54:50.474:
ERROR/logwrapper(142): executing /system/bin/tc failed: No such file or directory
10-11 02:54:50.554:
ERROR/logwrapper(143): executing /system/bin/tc failed: No such file or directory
10-11 02:54:50.723:
ERROR/logwrapper(144): executing /system/bin/tc failed: No such file or directory
10-11 02:554.493:
ERROR/HierarchicalStateMachine(59): TetherMaster - unhandledMessage: msg.what=3
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): FATAL EXCEPTION: main
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.android.maps/org.android.maps.HelloMaps}: java.lang.ClassNotFoundException: org.android.maps.HelloMaps in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.map s.jar:/data/app/org.android.maps-1.apk]
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2 585)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:26 79)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.os.Looper.loop(Looper.java:123)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invokeNative(Native Method)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at java.lang.reflect.Method.invoke(Method.java:521)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:86
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at dalvik.system.NativeStart.main(Native Method)
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): Caused by: java.lang.ClassNotFoundException: org.android.maps.HelloMaps in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.map s.jar:/data/app/org.android.maps-1.apk]
10-11 02:55:27.363:
ERROR/AndroidRuntime(300): at dalvik.system.PathClassLoader.findClass(PathClassLoader.ja...
-
11/10/2011 14:14:45 | Marcos Vasconcelos
Olá,
Primeiro, voce nao precisa de toda essa StackTrace, a parte importante é:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.android.maps/org.android.maps.HelloMaps}: java.lang.ClassNotFoundException: org.android.maps.HelloMaps in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.map s.jar:/data/app/org.android.maps-1.apk]
Voce tem certeza que essa classe existe nesse lugar? Voce declarou ela no AndroidManifest.xml?
-
29/11/2011 18:20:31 |189.81.145.xxx| Lucas - Jogo
Olá você poderia me mandar as pastas já com o jogo só pra min testar aqui.. pois esta dando muito erro quando tento criar através dos códigos q você fez...
obrigadomeu email
martins_lucas1@yahoo.com.br
-
29/11/2011 18:27:53 | Marcos Vasconcelos
Baixou do repositorio no github?
https://github.com/MarkyVasconcelos/AndroidTechsGames
-
15/12/2011 18:39:20 |187.57.65.xxx| ViniciusFreitas - Point2D
Baixei o fonte do Vector2D mais não funciona da erro dizendo que esta faltando o pacote java.awt.geom.Point2D, como resolvo isso?
-
15/12/2011 18:39:57 |187.57.65.xxx| ViniciusFreitas
Baixei o fonte do Vector2D mais da erro dizendo que falta o java.awt.geom.Point2d
-
28/01/2012 00:26:18 |201.27.166.xxx| Diogo Barbosa
Marcos, da uma força ai.
"super(new Rect())";
Essa linha referente ao construtor da classe ball está dando erro aqui...
Essa chamada a super está realmente válida?
-
28/01/2012 16:36:52 | Marcos Vasconcelos
Arrumado, isso só é valido depois que Ball extends Entity.
Obrigado por avisar.
-
16/02/2012 11:59:00 |200.192.240.xxx| Anônimo
Adorei, você pretende ensinar tudo o que der sobre fazer jogos no Android? Gostaria muito de aprender a fazer aqueles efeitos de magia.
-
16/03/2012 20:31:09 |200.18.170.xxx| sergio
Marcos gostaria de saber o que vc me indica, para uma aplicação do tipo controle de temperatura no android com animação do tipo, terei um termometro e a medida que a temperatura aumenta ele muda tb a escala nele, tipo como se o nivel de mercurio sobe ou desce. pegarei os dados dessa temperatura via web usando sockets, o que preciso mesmo é a parte da animação
Parabéns pelo artigo
-
18/03/2012 20:32:07 | Marcos Vasconcelos
Eu faria na mão mesmo (interpolar os valores através do tempo), com o termometro sendo uma View sua que tem todas as logicas de animação.
-
29/03/2012 21:30:31 |200.239.65.xxx| Anônimo - Muito BOm o Post
mas gostaria de saber se nao tem um material sobre a programação andoroid voltada a jogos
-
12/04/2012 02:25:47 |187.56.216.xxx| Fernando França - Dúvida sobre handler...
Olá primeiramente parabéns pelo artigo, pois é graças a pessoas como vc que eu venho aprendendo e muito nessa minha longa jornada android!
Com base no seu artigo eu estou desenvolvendo um marcador de tempo ultilisando o handler.
Funciona da seguinte forma: O cara escolhe a quantidade de batidas por minuto e o sistema fica marcando esse tempo com "clicks".
Está acontecendo que está havendo um atraso em milisegundos segundo meu logcat.
Como essa seria uma ferramenta de precisão, não poderia atrasar nem um mísero milisegundo...
Usar o handler é uma boa opção ou existe uma melhor para esse caso?
Obs: trava tanto no emulador quanto no celular pois acompanhei com um cronometro.
Se você puder me ajudar mais ainda eu ficarei agradecido!
vlw!!!
-
12/04/2012 11:06:29 | Marcos Vasconcelos
Fico feliz de poder ajudar na sua jornada.
Sobre sua questão, voce não tem controle de que as mensagens do handler vão ser processadas assim que enviadas, então voce não pode garantir a precisão que precisa.
No seu caso, voce deveria implementar o loop do jogo para guardar o tempo, roda-lo na main-thread e ir atualizando a tela pela diferença do tempo desde o ultimo loop, mas nessa abordagem os eventos de toque devem ser enviados para uma fila de mensagens para serem processados na fase proccessLogics(long uptime).
Acredito que o ViniGodoy seria a pessoa ideal para falar sobre essa tecnica.
-
14/04/2012 20:31:53 |187.75.67.xxx| Fernando França - Valew!
Valeu Marcos, vou estudar seguindo esse direcionamento seu. Assim que estiver pronto eu te mando o link para vc dar uma olhada!
-
17/04/2012 20:27:57 |189.15.206.xxx| Anonimo - Vcs
Valeu cara espero q post mais
comandos mas esse ai ja da pra desenvolver pelo menos um jogo que nem bounce?
-
28/07/2012 15:47:22 |189.68.48.xxx| Gabriel - Dúvidas
Olá, Marcos..parabéns pelo post, gostei muito..
estava seguindo seu tutorial e logo no começo (na primeira página) travei em uma coisa...toda vez q adiciono no arquivo XML e coloco isso
da erro e o emulador desliga a aplicação..
sabe oque pode ser??...
parece q ele nao aceita oabraços e valeu =]
-
28/07/2012 15:49:40 |189.68.48.xxx| Gabriel
acho q nao foi a linha do erro "^^
mas eh na ultima parte da primeira pagina, no arquivo XML
acho q o problema eh no br.com.pontov.gameviewmas nao sei como resolver
=[
-
29/09/2012 04:48:24 |189.35.138.xxx| Marcos Vinicius
Eu estou no 2º ano de ciência da computação e eu e meu grupo (3 karas) estamos usando muito o Java2D para programarmos uma cópia do jogo pokemon, é muito bacana kara, experiencia muito boa, principalmente pra mim que sou o mais iniciante do grupo, estou aprendendo muito e estou apaixonado pelo desenvolvimento de jogos!!! Estudando C++ aqui no site de vcs (que por sinal é ótimo)!!! Comprando livros e tal. Muito bom ter um local pra debater sobre.
-
05/11/2012 20:18:17 |189.81.172.xxx| Arthur Alves - MUito obrigado!
Esse artigo me ajudou muito, consegui recriar um "pong" m android do meu jeito e fiz várias alterações.
-
16/12/2012 17:09:57 |187.26.4.xxx| dougllas - pool piscina
ola muito bom o tutotrial saber eu gostaria de um tutotial explicando o uso de pool piscina de objetos usando a reciclagen sou iniciante
estou lendo um livro mais os esemplo esta muito complexo pelo meno para min agradeço desde ja
-
30/06/2013 19:56:04 |189.73.0.xxx| Rodrigo - Não achei o metodo plusMe ...
Não encontrei o metodo plusMe ???
-
30/06/2013 19:57:09 |189.73.0.xxx| Rodrigo - re: Não achei o metodo plusMe ...
Não encontrei o metodo plusMe ??? não está no arquvio Vector2D
-
05/10/2013 15:22:33 |177.100.4.xxx| Tyandrer - Problemas com a Vectod2D
Muito bom seu tutorial amigo...estou tentando conclui-lo, porém na classe Vector2D, ele usa uma classe "Point2D" do java.awt.geom e essa classe não consegui importar para meu projeto...Pesquisei artigos relacionados na internet e pelo que vi a Point2D não pode ser usada no android, alternativas seriam a Point ou PointF, mas elas não aceitam parâmetros "Double". Sou iniciante no assunto, desculpe se estiver falando besteira, mas não consegui resolver.
-
05/10/2013 16:40:35 |200.192.114.xxx| Vinicius Godoy
Simplesmente remova esse método se estiver no Android. Ela se aplica só ao JavaSE.
-
10/10/2013 19:23:06 |187.113.181.xxx| Tyandrer - Método faltante
Obrigado amigo...havia conseguido resolver, estou com um problema agora no método "dir.minus" do código que controla a colisão...na classe Vector2D que baixei aqui no site não tem esse método, houve outro que não tinha também, mas substitui por um que creio que faça a mesma coisa, porém o nome era diferente. Eraa esse "pos.plusMe" e usei o "pos.addMe".
-
11/10/2013 12:43:10 |189.101.67.xxx| Vinicius Godoy
Provavelmente o minusMe deve ter sido substituído por subtract me.
-
06/01/2014 21:13:49 |177.177.135.xxx| Igor Baad
Olá Amigo boa noite,
O método "plusMe" não está na classe Vector2D..
Gostaria de saber como proceder?
-
07/01/2014 10:51:58 |179.211.37.xxx| Vinícius G. de Mendonça
O método plusMe seria implementado assim:
Código:public Vector2D plusMe(Vector2D other) {
x += other.x;
y += other.y;
return this;
}O mesmo vale para qualquer método com "Me" no final, significando "em mim", ou seja, usando += ao invés de +.
-
18/03/2014 22:07:27 |201.55.229.xxx| Francisco - Classe Vector2D
Eu gostaria muito de saber como foi que você usou essa classe Vector2D no Android.
-
17/04/2014 18:19:35 |187.44.30.xxx| Paulo Márcio - ViewGroup dúvida
Olá, acompanhar o artigo me ajudou bastante a entender um pouco mais do android, mas algumas aplicações preciso fazer os desenhos e processar botões ao mesmo tempo, prequisando na web encontrei o ViewGroup, no entanto quando eu o incluo como contentView na activity ele só fica com a tela branca e nada acontece, nem mesmo os botões que adcionei nele são desenhados.
O código é igual ao que você apresentou aqui, a única diferença que ao invés de uma View eu extendi uma ViewGroup e também tem o processamento de dados que é diferente, mas na View tudo funciona como esperado, se puderem ajudar eu agradeço.
-
12/08/2014 21:19:56 |187.74.52.xxx| Anônimo
Bem fui baixar o eclipse e a jdk. E me deparei com Android Studio, e agora ...Como estou iniciando agora, não faço ideia que vantagem tenho em programar com ou outro. Bem o unico conhecimento que estou começando orintação de objetos java. Uso netbeans .
-
19/08/2014 11:39:44 |189.58.110.xxx| Luca - Duvida
Bom dia, cara quando vc cita no texto "Voltamos ao AndPongActivity" essa AndPongActivity é uma classe? se não, onde fica
-
19/08/2014 12:34:54 |189.58.110.xxx| Fernanda
Você não teria o pacote com o codigo pronto, pq aqui não esta funcionando. Obg =)
-
19/08/2014 12:35:36 |189.58.110.xxx| Fernanda
Bom dia vc não teria o pacote com os codigos, pq aqui não esta funcionado
-
28/11/2014 15:47:50 |187.74.115.xxx| Anônimo - Erro ao tentar excutar
Compila nomalmente, mas quando vai abrir no emulador dá erro. No LogCat apresenta o log abaixo:
Por favor me ajude...
---------------------------------------------------------------------- -------------------
11-28 15:44:49.132: D/AndroidRuntime(705): Shutting down VM
11-28 15:44:49.132: W/dalvikvm(705): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-28 15:44:49.142: E/AndroidRuntime(705): FATAL EXCEPTION: main
11-28 15:44:49.142: E/AndroidRuntime(705): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.pontov/br.com.pontov.AndPongActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2 663)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:26 79)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 11-28 15:44:49.142: E/AndroidRuntime(705): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.os.Looper.loop(Looper.java:123)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-28 15:44:49.142: E/AndroidRuntime(705): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 15:44:49.142: E/AndroidRuntime(705): at java.lang.reflect.Method.invoke(Method.java:521)
11-28 15:44:49.142: E/AndroidRuntime(705): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:86
11-28 15:44:49.142: E/AndroidRuntime(705): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-28 15:44:49.142: E/AndroidRuntime(705): at dalvik.system.NativeStart.main(Native Method)
11-28 15:44:49.142: E/AndroidRuntime(705): Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
11-28 15:44:49.142: E/AndroidRuntime(705): at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarAct ivityDelegate.java:110)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.ja va:99)
11-28 15:44:49.142: E/AndroidRuntime(705): at br.com.pontov.AndPongActivity.onCreate(AndPongActivity.java:12)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047)
11-28 15:44:49.142: E/AndroidRuntime(705): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2 627)
11-28 15:44:49.142: E/AndroidRuntime(705): ... 11 more
11-28 15:44:52.702: I/Process(705): Sending signal. PID: 705 SIG: 9
-
03/12/2014 20:44:33 |177.204.81.xxx| Luis - Solução
Olá!
Eu estava com o mesmo problema, resolvi com os seguintes passos:1 - Verifique se a classe AndPongActivity está estendendo ActionBarActivity ou Activity. Ela deve estender a classe Activity.
2 - No AndroidManifest remova o atributo android:theme="@style/AppTheme" da tag application se existir.Bons estudos!
-
17/12/2014 17:12:59 |150.165.29.xxx| Keyton Klaus - Ótimo tutorial
Parabéns, estou estudando para Computação Gráfico, e este artigo está me ajudando muito.
-
06/01/2015 16:17:54 |187.68.21.xxx| Silvano Malfatti
Desenvolvi uma pequena engine para Android com OpenGL ES. É muito fácil de usar e pode ajudar. Abraços
http://www.sourceforge.com/projects/andgraphics
-
06/01/2015 16:24:14 |187.68.21.xxx| Silvano Malfatti - Android OpenGL ES Engine
O código é aberto, então podem alterar à vontade.
Silvano Malfatti Escreveu:Desenvolvi uma pequena engine para Android com OpenGL ES. É muito fácil de usar e pode ajudar. Abraços
http://www.sourceforge.com/projects/andgraphics
Java 2D? Usa Unity3D que é bem melhor.