Estoy tratando de hacer un juego de JavaScript en el laboratorio de juegos https://code.org para aumentar el tiempo de reacción y la precisión, y no puedo encontrar la manera de detectar un clic en el fondo para disminuir las vidas. Aquí está el código que tengo hasta ahora:
1 var score = 0; 2 var lives = 3; 3 var target1 = createSprite(randomNumber(50, 350), randomNumber(50, 350)); 4 target1.setAnimation("Target1"); 5 target1.scale = 0.5; 6 target1.setCollider("circle"); 8 var target2 = createSprite(randomNumber(50, 350), randomNumber(50, 350)); 9 target2.setAnimation("Target2"); 10 target2.scale = 0.5; 11 target2.setCollider("circle"); 12 13 function draw() { 14 scoreboard(); 15 targetClick(); 16 life(); 17 drawSprites(); 18 } 19 20 function scoreboard() { 21 background("black"); 22 textSize(20); 23 text("Lives: " + lives, 10, 375, 100, 100); 24 text("Score: " + score, 10, 10, 100, 100); 25 } 26 function targetClick() { 27 if (mousePressedOver(target1)) { 28 target1.x = randomNumber(50, 350); 29 target1.y = randomNumber(50, 350); 30 score = score + 1; 31 } 32 if (mousePressedOver(target2)) { 33 target2.x = randomNumber(50, 350); 34 target2.y = randomNumber(50, 350); 35 score = score + 1; 36 } 37 } 38 function life() { 39 if (mousePressedOver(mousePressedOver(background)) { 40 lives = lives - 1; 41 } 42 if (lives <= 0) { 43 target1.destroy(); 44 target2.destroy(); 45 textSize(50); 46 text("Game Over!", 10, 150); 47 } 48 }La línea 39 es donde la necesito.
¿Alguien puede ayudar?
Editar: después de algunas pruebas, me di cuenta de que podía detectar un clic, en general, como mousePressed() , también podía usar mouseX y mouseY para ver si estaba en el área de uno de los objetivos y si no era así, yo podría quitar una vida.
MousePressedOver funciona si se presiona el mouse sobre el elemento. De modo que los usuarios pueden mantener presionado el botón derecho y simplemente moverse por el lienzo para obtener puntos. Para evitar eso y resolver el problema de la disminución de vidas, puede usar la combinación que usamos a menudo para los eventos de clic en Game Lab. mouseWentDown() && mouseIsOver(target1) (&& significa "y"). Esto se activa cuando se hace clic con el mouse y está sobre el objetivo. Para disminuir las vidas, simplemente puede agregar ! antes del mouseover() ya que es el operador not de JavaScript. Básicamente significa "disparar cuando se hace clic con el mouse y cuando no está sobre el objetivo". Aquí está el código completo;
var score = 0; var lives = 3; var target1 = createSprite(randomNumber(50, 350), randomNumber(50, 350)); target1.setAnimation("Target1"); target1.scale = 0.5; target1.setCollider("circle"); var target2 = createSprite(randomNumber(50, 350), randomNumber(50, 350)); target2.setAnimation("Target2"); target2.scale = 0.5; target2.setCollider("circle"); function draw() { scoreboard(); targetClick(); life(); drawSprites(); } function scoreboard() { background("black"); textSize(20); text("Lives: " + lives, 10, 375, 100, 100); text("Score: " + score, 10, 10, 100, 100); } function targetClick() { if (mouseWentDown() && mouseIsOver(target1)) { target1.x = randomNumber(50, 350); target1.y = randomNumber(50, 350); score = score + 1; } if (mouseWentDown() && mouseIsOver(target2)) { target2.x = randomNumber(50, 350); target2.y = randomNumber(50, 350); score = score + 1; } } function life() { if (mouseWentDown()&& !mouseIsOver(target1)&& !mouseIsOver(target2)) { lives = lives - 1; } if (lives <= 0) { target1.destroy(); target2.destroy(); textSize(50); text("Game Over!", 10, 150); } }