9. Reimplementar o jogo Pong para um jogador
empregando a função keyPressed() e comparar
o uso da mesma em relação ao emprego
original da variável de sistema keyPressed.
int bastaoYD = 0;
int bolaX = 40;
int bolaY = 300;
int dX = 3;
int dY = 3;
void setup() {
size(600, 600);
}
void draw() {
background(0);
rect(570, bastaoYD, 20, 100);
ellipse(bolaX, bolaY, 20, 20);
bolaX += dX;
bolaY += dY;
if ( bastaoYD >= 500) {
bastaoYD = 500;
} else if ( bastaoYD <= 0) {
bastaoYD = 0;
}
if (bolaY <= 10 || bolaY >= 590) {
dY = -dY;
} else if (bolaX <= 10 || bolaX >= 590) {
dX = -dX;
}
if ((bolaX >= 560) && (bolaY >= bastaoYD) && (bolaY <= bastaoYD +100)) {
dX = -dX;
}
}
void keyPressed() {
if (keyCode == DOWN) {
bastaoYD += 9;
} else if (keyCode == UP) {
bastaoYD -= 9;
}
}
A função keyPressed() é ativada toda vez que uma tecla é pressionada, ela funciona com checagens dentro da função para definir comandos e para estas checagens, o Processing dispõe de variáveis reservadas para cada situação. Duas delas são a key e a keyCode, que funcionam para caracteres comuns e caracteres especiais, como as setas do teclado, respectivamente.
Quando utilizamos essa função no jogo Pong, ocorre um atraso quando o usuário busca por muitas ações ao mesmo tempo. Isso acontece porque a função é ativada fora do draw, então não acompanha sua velocidade de execução ou seu frameRate, assim, a bolinha é atualizada muito mais rápido do que o movimento do bastão pelas teclas escolhidas no teclado.
Observado isso, podemos concluir, que a função keyPressed() funciona bem para poucas ativações seguidas de teclas, mas não para um jogo que exige uma movimentação mais elaborada.
Já a variável keyPressed serve para guardar apenas um valor booleano, true ou false, sendo assim ela precisa ser usada dentro da função de loop draw e dentro de uma estrutura de checagem como o if-else. O restante funciona exatamente igual a função keyPressed(), usando as variáveis reservadas do Processing para descobrir qual tecla foi pressionada. Assim, a variável keyPressed quando colocada dentro do draw tem uma taxa de atualização mais realista em relação ao restante da aplicação, pegando mais movimentos do personagem no caso de um jogo como este.
int bastaoYD = 0;
int bolaX = 40;
int bolaY = 300;
int dX = 3;
int dY = 3;
void setup() {
size(600, 600);
}
void draw() {
background(0);
rect(570, bastaoYD, 20, 100);
ellipse(bolaX, bolaY, 20, 20);
bolaX += dX;
bolaY += dY;
if ( bastaoYD >= 500) {
bastaoYD = 500;
} else if ( bastaoYD <= 0) {
bastaoYD = 0;
}
if (bolaY <= 10 || bolaY >= 590) {
dY = -dY;
} else if (bolaX <= 10 || bolaX >= 590) {
dX = -dX;
}
if ((bolaX >= 560) && (bolaY >= bastaoYD) && (bolaY <= bastaoYD +100)) {
dX = -dX;
}
}
void keyPressed() {
if (keyCode == DOWN) {
bastaoYD += 9;
} else if (keyCode == UP) {
bastaoYD -= 9;
}
}
A função keyPressed() é ativada toda vez que uma tecla é pressionada, ela funciona com checagens dentro da função para definir comandos e para estas checagens, o Processing dispõe de variáveis reservadas para cada situação. Duas delas são a key e a keyCode, que funcionam para caracteres comuns e caracteres especiais, como as setas do teclado, respectivamente.
Quando utilizamos essa função no jogo Pong, ocorre um atraso quando o usuário busca por muitas ações ao mesmo tempo. Isso acontece porque a função é ativada fora do draw, então não acompanha sua velocidade de execução ou seu frameRate, assim, a bolinha é atualizada muito mais rápido do que o movimento do bastão pelas teclas escolhidas no teclado.
Observado isso, podemos concluir, que a função keyPressed() funciona bem para poucas ativações seguidas de teclas, mas não para um jogo que exige uma movimentação mais elaborada.
Já a variável keyPressed serve para guardar apenas um valor booleano, true ou false, sendo assim ela precisa ser usada dentro da função de loop draw e dentro de uma estrutura de checagem como o if-else. O restante funciona exatamente igual a função keyPressed(), usando as variáveis reservadas do Processing para descobrir qual tecla foi pressionada. Assim, a variável keyPressed quando colocada dentro do draw tem uma taxa de atualização mais realista em relação ao restante da aplicação, pegando mais movimentos do personagem no caso de um jogo como este.
Comentários
Postar um comentário