Escolar Documentos
Profissional Documentos
Cultura Documentos
Inventor
por Sajal Dutta
Hoje vamos fazer um jogo do zero inspirado nos jogos de spike recentemente
populares . Vamos chamá-lo de Oh My Spikes . Antes de começarmos, você pode querer
ver como ficará o jogo final. Isso o ajudará a seguir o tutorial facilmente.
1. Você controla um pássaro tocando em qualquer lugar da tela. Quando você toca, o
pássaro sobe; se não o fizer, o pássaro começa a descer / cair.
5. Spike1, Spike2, Spike3 e Spike4 são sprites de imagem que serão colocados em
locais aleatórios durante o jogo.
8. Nós temos uma TinyDB componente chamado ScoreDB para armazenar a melhor
pontuação.
1. Queremos que nossa etiqueta de pontuação fique visível. Portanto, definimos sua
visibilidade como verdadeira (true) . Você também pode fazer isso no modo de
exibição de design.
3. Não queremos que nossos relógios façam nada ainda, então os desativamos, o
que você também pode fazer na visualização de design.
4. Queremos que a altura da tela seja igual à altura do dispositivo menos a altura do
rótulo da pontuação, que é 30. Mostramos a melhor pontuação na tela do menu ou
como jogar, se o jogador ainda não tiver jogado.
Como SPIKES_Y_POS é uma lista de listas, o valor da lista também é uma lista. Agora, se
quisermos a lista que contém [-100, 140, 210, 365] que está no índice 1 da lista pai,
devemos dar GetListItem 1 como o parentIndex e, em seguida, se quisermos obter o
número 210, que está em índice 3 da lista de filhos, devemos
fornecer 3 como childIndex . Em seguida, verificamos se devemos colocar os obstáculos
à esquerda usando o valor da variável isOnLeft que determinamos
no procedimento SetupGame.
Agora você deve estar se perguntando por que estamos alterando o valor de isOnLeft
novamente para oposto. É porque SetupGame é chamado apenas uma vez quando o
usuário inicia um jogo, mas este SetupPlacements será usado cada vez que o jogador
saltar de uma borda. Se o jogador rebater na borda esquerda, precisamos colocar os
obstáculos à direita e vice-versa. Depois disso, também alteramos o rumo ao oposto da
direção atual do pássaro no eixo x. O rumo definido como 0 faz com que o pássaro se
mova para a direita. Também definimos a imagem que corresponde à direção do
pássaro. Uma vez que definimos isOnLeft como falso, o que significa que o pássaro deve
se mover para a direita, definimos seu X para a borda direita (largura da tela) menos sua
largura. Colocamos um pixel extra (+1) porque acho a aparência melhor assim. Você não
precisa adicionar esse 1.
O nome da imagem “SpikeLeft.png” pode confundir você, mas pequenos picos nessa
imagem estão apontando para a esquerda, portanto, deve ser usada quando os obstáculos
são colocados no lado direito. Na outra parte, fazemos exatamente o oposto.
A direção 180 faz com que o pássaro se mova para a esquerda. Definimos os obstáculos
' X como -1, mas você pode defini-lo como 0. Fica a seu critério. Exatamente o mesmo
motivo pelo qual foi adicionado 1 ao colocá-los à direita.
Depois de chamar SetupPlacements, chamamos SetUpBirdPosition no procedimento
SetupGame. Em SetupBirdPosition, dependendo da direção que definimos
em SetupPlacements, mudamos onde o pássaro deve ser inicialmente colocado quando
o jogo está no estado pronto, que na verdade é o lado oposto de onde colocamos os
pontos de obstáculo. Você pode usar o título de propriedade da ave se preferir em vez de
usar outra variável (headingLeft) como eu fiz. Mas você tem que fazer uma comparação e
ver se é 0 (direita) ou 180 (esquerda).
O valor de Y não depende do título. Só precisamos ter certeza de não colocá-lo muito para
cima ou muito abaixo, onde ele toca a ponta inferior e morre imediatamente. No final
de SetupGame, chamamos SetupGameVisibility e passamos true como um argumento,
o oposto do que fizemos quando chamamos este procedimento de Screen1.Initialize. É
porque desta vez queremos que as entidades / componentes do jogo fiquem visíveis e o
botão de jogo invisível.
Estamos prontos. O pássaro deve bater continuamente, mas o que exatamente o faz
bater? Se você se lembra, no evento PlaySprite.Touched, habilitamos o
ContinuousFlapClock. No modo de exibição de design, definimos o intervalo do
temporizador deste relógio para 300 milissegundos. Assim, uma vez habilitado, a cada 300
milissegundos, o App Inventor invocará o evento Timer deste relógio automaticamente. E
isso é o que fazemos quando é acionado
Nós apenas nos importamos com o toque do usuário quando nosso jogo está pronto
(ready) ou no estado de jogo (game). Quando no estado pronto e o usuário toca pela
primeira vez, mudamos o estado para o estado de jogo. Paramos de bater continuamente
no pássaro desativando o relógio. Habilitamos yClock . Veremos em breve o que ele
faz. Também habilitamos o pássaro para que ele agora possa se mover em uma direção
dependendo de sua direção atual. Sempre que há um toque, fazemos o pássaro pular, o
que significa que alteramos seu valor Y. Para mover ao longo do eixo x, definimos a
direção do pássaro; e na visualização de design, também definimos a velocidade
como 5. No procedimento JumpBird, reproduzimos o som do flap. Definimos isFalling
como falso já que estamos pulando, não caindo. Mudamos a imagem como explicamos
para o movimento contínuo. Habilitamos MoveClock e FlapClock.
Se você se lembra do que mencionei sobre os relógios que temos no início deste tutorial,
você sabe que o MoveClock controla por quanto tempo o pássaro pode voar quando o
jogador toca na tela. Quando o MoveClock é disparado, paramos de voar e definimos
isFalling como true para que o pássaro desça. No evento Timer do FlapClock, mudamos
a imagem do pássaro atual e desabilitamos o cronômetro, pois não queremos que ele
balance continuamente. O que faz o pássaro realmente se mover para cima ou para
baixo? A resposta é yClock . Novamente, yClock deve controlar a localização do pássaro
no eixo y, que tem um intervalo definido como 0 . Então, quando está habilitado, ele
dispara continuamente e faz isso
Se nosso pássaro cair, aumentamos seu valor de Y, uma vez que a posição de Canvas '(0,
0) está no canto superior esquerdo. Se o Y for igual à altura da tela, o pássaro estará na
parte inferior. Fazemos o oposto se estamos subindo. Você pode estar se perguntando por
que não habilitamos / desabilitamos yClock no procedimento JumpBird. É porque quando
estamos no estado de jogo, não temos a intenção de desativar o yClock. O pássaro está
constantemente se movendo para cima ou para baixo. Além disso, o procedimento
JumpBird, como o próprio nome indica, não deve fazer o pássaro cair também. Estamos
perto. O pássaro pula quando o jogador toca e cai se o jogador não tocar. Agora
precisamos lidar com o que acontece quando nosso pássaro atinge a borda esquerda ou
direita.
Sempre que o pássaro atinge a borda esquerda ou direita, o jogador faz uma pontuação.
Então, tocamos o som da partitura. Chamamos SetupPlacements para colocar 4
obstáculos de espinhos no outro lado. Explicamos o que esse procedimento faz há um
tempo. Adicionamos 1 à pontuação e atualizamos o rótulo da pontuação para exibir a nova
pontuação. Infelizmente temos que fazer sua fofura morrer se bater em qualquer um dos 6
pontos (topo, fundo e 4 pontos de obstáculos). Para fazer isso, precisamos verificar se ele
está colidindo com algum deles
Veremos o procedimento EndGameState em breve. Por enquanto, pense, é o fim do
jogo. Se o pássaro colidir com a ponta superior ou inferior, fazemos o pássaro morrer
imediatamente. Para os picos de obstáculo, damos uma pequena vantagem. Chamamos
o procedimento isDead. Se o pássaro colidir com qualquer um dos quatro obstáculos,
verificamos primeiro se ele está se movendo para a esquerda e não muito longe (menos
do meio da tela), e então vemos se ele cruzou o obstáculo no meio, se cruzou, deixamos
ele ao vivo. Depois que ele estiver no meio e colidir com qualquer outro acima ou abaixo,
também não o matamos. Aumentamos sua velocidade para atingir a borda mais rápido
para que não continue colidindo. É por isso que tivemos que redefinir a velocidade
para 5 no procedimento SetupPlacements. Fazemos a mesma coisa para a borda
direita. IsDead retorna true se precisarmos terminar o jogo, caso contrário, retorna false.
Infelizmente, o pássaro morreu. Deixe o mundo saber. Toque o som da morte. Precisamos
mostrar a tela do menu. Desta vez, vamos mudar a imagem do PlaySprite para repetir a
imagem (RetryButton.png). Se a pontuação atual for maior do (heigher) que a melhor
pontuação, se houver, definimos bestScore como pontuação (current score) atual . Em
seguida, salvamos (save) no banco de dados. Escondemos todos os componentes do
jogo. Desativamos o que não é visível. Mudamos o estado. Se não jogamos antes ou
não marcamos nem 1, não temos a melhor pontuação. Nesse caso, apenas mostramos a
pontuação atual. Caso contrário, mostramos ambos, lado a lado.
Se você ainda está a trabalhar e não pulou nenhuma parte deste tutorial, aposto que
realmente vai fazer algo incrível algum dia. Você percebeu que acabamos de fazer um
jogo? Seja parabenizado por seus esforços para chegar até aqui. Lembre-se de que este é
um tutorial para você começar. Ninguém pode impedi-lo de aprimorar o jogo ou começar
algo completamente novo.
Fonte:
http://imagnity.com/android/oh-my-spikes-create-a-game-from-scratch-using-app-inventor/