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!
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!