Alguem sabe como criar uma função que condicione a movimentação do ator ao termino de um countdown que apareca na tela? Se sim, compartilha ai por favor!
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Alguem sabe como criar uma função que condicione a movimentação do ator ao termino de um countdown que apareca na tela? Se sim, compartilha ai por favor!
Oi, Túlio
Crie uma variável para definir o tempo
// ator.js
let tempoJogo = 20; // defina do tempo em segundos
Crie a função countdown
// ator.js
function countdown(){
let frames = getFrameRate(); // o padrao é 60 frames por segundo
tempoJogo -= 1/frames;
if ( tempoJogo <= 0 ) {
colidiu();
tempoJogo = 20; // retorna ao valor definido
}
}
Insira o texto na tela
// ator.js
function pontucacao(){
// ...
fill(color(0,0,0));
text( parseInt(tempoJogo), width/4 * 2, 25);
}
Insira a função countdown em "draw()"
// sketch.js
function draw() {
// ...
countdown();
}
Olá, Luis. Desculpa a minha burrice, mas não consegui aplicar o código que você mandou. Tentei adaptar ao que eu tinha e surgiu um erro na linha correspondente ao colidiu(); que no meu projeto esta como: colisao();
function pontucacao(){
fill(color(0,0,0));
text( parseInt(tempoJogo), width/4 * 2, 25);
}
function countdown() {
let frames = getFrameRate(); // o padrao é 60 frames por segundo
tempoJogo -= 1/frames;
if ( tempoJogo <= 0 ) {
colisao();
tempoJogo = 5; // retorna ao valor definido
}
}
var tempoJogo = 5; // defina do tempo em segundos
Oi,
Seguindo os nomes usados que foram usados na transcrição da aula - Perdendo pontos
Troque colisao() para voltaAtorParaPosicaoInicial()
Coloque o texto do Tempo na function incluiPontos()
// verifique se o draw() chama esta função
function incluiPontos() {
// não apague o conteúdo
// apenas insira estas 2 linhas
fill(color(0,0,0)); //cor do texto
text( parseInt(tempoJogo), width/4 * 2, 25); // texto e posição na tela
}
Se não funcionar, coloque o seu código sketch.js e ator.js aqui
Salve, Luis. Desculpe a demora a responder. Depois das alterações o countdown está funcionando o problema é que ele não para de contar, entende? Eu queria que ele funcionando só uma vez ao abrir o jogo. Segue o meu código abaixo!
function movimentaAtor() {
if (keyIsDown(UP_ARROW)) {
yAtor -= 3;
}
if (keyIsDown(DOWN_ARROW)) {
yAtor += 3;
}
// if (keyIsDown()) {
// xAtor -= 3;
// }
// if (keyIsDown()) {
// xAtor += 3;
// }
}
function mostraAtor() {
image(imagemAtor, xAtor, yAtor, 23, 23);
}
function verificaColisao() {
for (let i = 0; i < 3; i++){
colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
if (colisao){
reiniciar();
somColisao.play();
if (pontosPositivos()){
pontos -= 1;
}
}
}
for (let v = 3; v < 6; v++){
colisao = collideRectCircle(xCarros[v], yCarros[v], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
if (colisao){
reiniciar();
somColisao.play();
if (pontosPositivos()){
pontos -= 1;
}
}
}
}
function reiniciar() {
yAtor = 370;
}
function mostrarPontos() {
textAlign(CENTER);
textSize(25);
fill(color(255, 0, 255));
text(pontos, width / 5, 27);
textSize(85);
fill(color(0,0,0));
text( parseInt(tempoJogo), width/4 * 2, height/4 * 2 + 25);
}
function pontosPositivos() {
return pontos > 0
}
function addPontos() {
if (yAtor < 15){
pontos += 1;
somPonto.play();
reiniciar();
}
}
function restringirMoviment() {
return yAtor < 370;
}
function pontosPositivos() {
return pontos > 0
}
function countdown() {
var frames = getFrameRate(); // o padrao é 60 frames por segundo
tempoJogo -= 1/frames;
if ( tempoJogo <= 0 ) {
reiniciar();
iniciar = true;
tempoJogo = 5;
}
}
var xAtor = 250;
var yAtor = 370;
var colisao = false;
var pontos = 0;
var tempoJogo = 5;
Sketch.js:
function setup() {
createCanvas(500, 400);
somTrilha.loop(0,1,0.2);
}
function draw() {
background(imagemEstrada);
mostraAtor();
mostraCarros();
movimentaCarros();
movimentaAtor();
loopPosicao();
verificaColisao();
mostrarPontos();
addPontos();
countdown();
}
Oi, Túlio
Eu entendi errado
Eu pensei que você queria um tempo limite para atravessar a rua
Se o tempo acabar, volta para o início
Veja agora se te atende
let xAtor = 250;
let yAtor = 370;
let colisao = false;
let pontos = 0;
let tempoJogo = 5; // tempo em segundos
let textoInicio;
let ficarParado = true
function movimentaAtor() {
if ( ficarParado ) return;
if (keyIsDown(UP_ARROW)) yAtor -= 3;
if (keyIsDown(DOWN_ARROW)) yAtor += 3;
if (keyIsDown(LEFT_ARROW)) xAtor -= 3;
if (keyIsDown(RIGHT_ARROW)) xAtor += 3;
}
function mostraAtor() {
image(imagemAtor, xAtor, yAtor, 23, 23);
}
function verificaColisao() {
for (let i = 0; i < 3; i++){
colisao = collideRectCircle(xCarros[i], yCarros[i], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
if (colisao){
reiniciar();
somColisao.play();
if (pontosPositivos()){
pontos -= 1;
}
}
}
for (let v = 3; v < 6; v++){
colisao = collideRectCircle(xCarros[v], yCarros[v], comprimentoCarro, alturaCarro, xAtor, yAtor, 11)
if (colisao){
reiniciar();
somColisao.play();
if (pontosPositivos()){
pontos -= 1;
}
}
}
}
function reiniciar() {
yAtor = 370;
xAtor = 250;
// opcional colocar o tempo aqui
ficarParado = true
tempoJogo = 5
}
function mostrarPontos() {
textAlign(CENTER);
textSize(25);
fill(color(255, 0, 255));
text(pontos, width / 5, 27);
textSize(85);
fill(color(0,0,0));
text( textoInicio, width/4 * 1, height/4 * 2 + 25);
}
function pontosPositivos() {
return pontos > 0
}
function addPontos() {
if (yAtor < 15){
pontos += 1;
somPonto.play();
reiniciar();
}
}
function restringirMoviment() {
return yAtor < 370;
}
function pontosPositivos() {
return pontos > 0
}
function countdown() {
tempoJogo -= 1/60;
if ( tempoJogo > 0 )
textoInicio = parseInt(tempoJogo) + " segundos para iniciar"
else {
ficarParado = false;
textoInicio = ''
}
}
Show irmão. Ficou perfeito. Muito obrigado mesmo!