Foi implementada a lógica do movimento da bola. Foi um pouco difícil encontrar uma forma correta de desenvolver isso, mas isso ocorreu mais pela falta de conhecimento em desenvolver jogos que outra coisa.
O cocos2d possui um scheduler que pode ser chamado a cada frame ou por um intervalo específico. Perdi algum tempo tentando realizar isso com o CCMoveBy, mas logo percebi que teria que controlar o movimento frame a frame.
Então tentei determinar uma forma de fazer com a que a bola se movesse. Dividi a tela em quadrantes e estabeleci os modificadores que deveria aplicar aos eixos X e Y que a bola se movesse. A figura abaixo mostra como funcionam esses modificadores.
Pensando no formato landscape, quando a bola vai se mover para o quadrante 1, os valores de X e Y devem ser incrementados, logo, ambos assumem o valor inteiro 1. Caso a bola tenha que se mover parao quadrante 4, ambos devem ser decrementados, assumindo o valor -1.
Então chegamos na seguinte fórmula:
Próxima Posição da Bola no Eixo X = posiçãoAtualX + incrementoPosiçãoX * modificadorX
O mesmo se aplica ao eixo Y.
Compilei e rodei. Resultado? Desastre total
Acontece que essa variável incrementoPosiçãoX teria que ser realacionada diretamente com a quantidade de frames por segundo. O movimento da bola ficou tosco e muito lento.
Voltamos ao método update do cocos2d. Ele recebe como parâmetro uma variável do tipo ccTime, chamada delta. Esse é exatamente o tempo final menos o tempo inicial da renderização de um frame. Voltamos ao segundo grau nível médio e aplicamos a fórmula do movimento retilíneo uniforme (MRU, a velha S = So + V.t):
Espaço = Espaço Inicial + Velocidade * Tempo
No nosso jogo:
Próxima Posição da Bola no Eixo X = posiçãoAtualX + (velocidade * delta) * modificadorX
Se eu quiser um movimento mais rápido, incremento a velocidade. Simples assim. Percebi que o valor 200 era ideal para a velocidade, tanto no simulador quanto no iPad.
Abaixo, screenshots desta última sessão que durou três horas. Eu apanhei pra caramba do CCMoveBy!
Ok, então estou aqui esticando a noite e fazendo os pads funcionarem. Percebam que os fiz bem pequenos, meio que de propósito. Como não sei qual tamanho seria o adequado, fiz 32×4, que está longe do ideal, mesmo em termos de alocação de memória.
Abaixo, dois screenshots da sessão de hoje. Falta fazer a limitação para que o pad não exceda a largura do dispositivo. A velocidade do pad está na velocidade do toque, pensei em como deixar isso mais lento também.
Outro detalhe importante é que o dedo da pessoa fica bem em cima do pad. Testei isso no iPad no tamanho 320×480 e o tamanho 2X. Tô pensando em subir um pouco mais os pads, ou somente deixá-los maiores. Amanhã essa será a missão!
PS: Vou botar o fonte no GitHub também amanhã.
Update:
Repositório no GitHub: https://github.com/leonardoeloy/VolcanoPong
Já tem uma alteração também. Expandi a área do toque para um retângulo acima do pad. Uma imagem abaixo explica isso:
E agora Henrique Gogó será a meu parceiro nesta empreitada! O cara é músico, designer, desenvolvedor e ainda por cima, futuro pai. Eu que sou um Zé Ninguém estou aqui com inveja de não conseguir fazer nem 10% do que ele faz, mas feliz porquê agora vamos fazer uns projetos de verdade.
Apesar dessa ideia do Volcano Pong ser somente uma forma de aprender melhor a API do cocos2D, já estamos mirando mais na frente, para o próximo título.
Agora tenho a certeza que teremos sprites e lógicas melhores!
Então, um belo dia recebi um lixo tecnológico do meu pai, um iPhone 3GS. Já venho de uma linhagem de dois Androids, algumas aplicações para eles e só isso.
Olhei pro iPhone, o iPhone olhou pra mim e já comprei o “Learn cocos2D Game Development with iOS 5“.
Meu background em Objective-C é ZERO. Em desenvolvimento de jogos é ZERO vezes dois. O máximo que fiz foi umas brincadeiras com OpenGL na faculdade, além de uma interface de zoom contínuo para um banco de dados para J2ME (do tempo do “bumba meu boi”).
Como já tenho uma bagagem de 15 unidades temporais de programação no bolso, começando com C e passando por muitos buzzes que vieram desde 1997, não estou encontrando muitas dificuldades em utilizar o Objective-C. Claro que estou aprendendo muito. Cada linguagem nova é sempre um bom momento para quebrar paradigmas.
Eis um assunto em que sou completamente leigo. Tenho ideias de como isso funciona, mas, como disse, são só ideias. O livro do cocos2d está me ajudando em entender como concretizar essas ideias.
Não estou muito preocupado em fazer da melhor forma, só quero tentar concretizar minhas ideias usando o pouco que aprendi no livro (no momento, ainda no capítulo 5).
A única coisa que sei sobre isso é que esta é uma indústria fraca no nosso Brazil. Bem, normal, não é? Não nos preocupando com isso, vamos ao nosso primeiro título.
Pouco conhecimento + engine de jogos 2D = Pong
Essa fórmula é inevitável. Além disso, como sou um nada em design, essa ideia me pareceu ser executável de forma bem trivial, usando uns sprites do OpenGameArt. Sem mais delongas, a especificação preliminar do jogo:
Ideia: Jogo de Pong com tema de Vulcões
Inteligência Artificial: Não pensei muito sobre isso ainda. Com certeza o oponente será o computador.
Arte:
Jogabilidade:
Drafts das telas do jogo:
Carmack que me aguarde…
Tapioca é algo tão cearense quanto paçoca ou cabeça chata. Quem não teve a chance de degustar uma delícia branca dessas, banhada a leite de coco e incrustada com o mais nobre dos queijos, o coalho, sugiro o emprego de um Valium. Ou dois.
E deixo aqui minha óbvia homenagem aos chucrutes pela alegria tardia que nos ofereceram. #foobar
#trolling
Jazz deveria ser a metáfora de qualquer projeto de software.
Deve haver um claro equilíbrio entre os metais e o piano. Ditando o ritmo, o contrabaixo sustenta a opereta. Deixa uma indiscutível leveza aos agudos melosos e crescentes empreendidos pelo trompete. O piano não deixa o ritmo morrer, soa ao fundo, sempre suave, sempre ativo. Sóbrio e fiel.
Por vezes, vemos a necessidade de um sax. Rouco, arrastado, complexo, porém, indubitavelmente eficiente e firme. E a bateria, que conduz pacientemente todas as mais ousadas “fugas do tema”. Não haveria jazz sem o incerto rufar de uma caixa.
No final das contas, após a apresentação formal de cada instrumento dentro do tema proposto, finda a obra. Mas não regride, aliás, acontece o contrário: acaba com uma certa imposição, sustentando a premissa de uma execução perfeita, exata, sempre única.
Já tentaram fazer software assim?
Introdução
Kurose em Redes de Computadores e a Internet não trata do assunto, somente algo superficial sobre criptografia. Tanenbaum em Sistemas Operacionais Modernos (3a. Ed.) também só dá uma arranhada. Pra variar, nos salvamos com Stallings em Critografia e Segurança de Redes. Tanenbaum em Redes de Computadores faz sua confusão sobre o assunto, seguindo à risca aos princípios de Kerckhoffs.
Stallings é o mais detalhado, mas só divide a Criptoanálise em duas: Diferencial e Linear. Tanenbaum complementa com análise por consumo de energia elétrica e análise de sincronismo, mas em parágrafos limitados a informar sobre as ténicas.
Motivação
Criptoanálise Diferencial
Criptoanálise Linear
Tomei o cuidado de verificar as referências e ambas apontam para o mesmo artigo de Matsui. Porém, Tanenbaum referencia (Matsui, 1994), enquanto Stallings cita (Matsui, 1993). De qualquer forma, o congresso ocorreu em 93, e pelo visto, a publicação dos anais em 94.
Como isso aqui é ponto grande, resolvi dar uma olhada no artigo original. Não sei se é o sono, mas a única informação que encontrei é que para DES de 16 rodadas (padrão), o valor é de 2^47. Outros locais, tipo Wikipedia, corroboram o valor de 2^43 de Stallings. A dica? Escolha dependendo de quem pergunta, no caso de concursos, a banca.
Análise do Consumo de Energia Elétrica (somente Tanenbaum)
Análise de Sincronismo (somente Tanenbaum)
Contra-fluxo
Há umas 3 semanas fui convidado a palestrar sobre SOA. Trabalhei com “isso” de abril a dezembro do ano passado, num projeto de integração entre diversos sistemas com o Oracle EBS. Fomos o segundo projeto (de EBS) no país a utilizar tal arquitetura.
Antes disso, SOA era a tecnologia do futuro (desde 2005). Ao entrar em contato próximo com ela, o que vi me deixou muito preocupado com o que vender por aí como SOA.
A Oracle, gigante do nosso mercado, disponibiliza uma suite que possibilita o desenvolvimento de soluções usando todas as sopas de letras que você possa imaginar. O problema é nos detalhes, os produtos são bastante falhos. Fluxos gigantes derrubam servidores de aplicação, problemas de comunicação com banco de dados, fluxos assíncronos são uma dor de cabeça constante, e N outros problemas.
Resumo da ópera: o projeto ficou bastante comprometido, pois integrações foram subestimadas e a tecnologia ainda não estava madura o suficiente para embarcarmos em tal aventura, numa empresa que fatura R$ 700 milhões por ano. Mas tudo bem, foi entregue graças a madrugadas à fio!
Voltando ao primeiro parágrafo, quando fui convidado a palestrar sobre o assunto, pensei em meter o pau no que representa o SOA. Porém, pensei bem, aquilo foi a visão de um único fabricante que tive, e confesso aqui, eu não havia estudado o suficiente para compor o que considero uma arquitetura orientada a serviços hoje em dia.
Com isso em mente, compus uma palestra com o pé firme na teoria, mostrando os contra-sensos das visões teórica e prática.
Convicções
Acreditamos em diversos fatos. Se somos verdadeiros conosco, estes fatos tornam-se convicções; caso contrário, desempenhamos de forma falha a “vontade de acreditar”. Chega de não mostrarmos nossas convicções para “não ferirmos os olhos” de outras pessoas. Temos de exercê-las em plenitude, a fim de sermos verdadeiros conosco.
Não incentivo aqui a submissão dos nossos pares às nossas crenças, sim o exercício pleno daquilo que tomamos como verdade no nosso íntimo. Dispomos de máscaras diversas – do político, vaidade, orgulho -, através delas nos apresentamos ao mundo. Queime a máscara do medo da reprovação. Uma a menos e já estaremos no caminho para melhorar.