Javascript:计时器结束时如何在画布上显示弹出框?

chhqkbe1  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(142)

我是javascript的新手,我已经被这个问题困扰了一段时间,我想显示一个弹出框,上面有一条消息“游戏结束,你没时间了”,这样玩家就知道游戏结束了。游戏很简单,当游戏开始时倒计时将开始,用户必须在时限内正确回答尽可能多的问题,对于每个正确的答案,一个红色的球将向上旅行和得分将增加。秒和运行计时器功能,是在例子中我修改了一点,但现在我迷路了,因为我真的不知道去它,我想进一步修改它,所以当计时器达到0:00一个窗口应该弹出。这里是我的完整代码到目前为止。

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style>
canvas {
    width: 100%;
    background-color: black;
} 
</style>
</head>

<h1 align="center"></h1>my jumper game </h1>
<p align="center"> </p>A Fun flappy-bird like game</p><//p>

<div>
<p>What is 10 times 4 ? <input type ="number" id="Q1"></p>
<p>What is 5 * 5 ? <input type ="number" id="Q2"></p>
<p>What is 5 * 3 ? <input type ="number" id="Q3"></p>
<button onclick="submitAnswers()">Submit</button>

</div>

<canvas id="canvas" width="900" height="400">
  Your browser does not support the HTML5 canvas tag.
  
</canvas>
<br> </br>

<body onload="startGame()">

<div>Time left = <span id="timer"></span>

<script>
let canvas = document.getElementById("canvas");
let context = canvas.getContext("2d");
let x = 450, y = 350;
let count = 0;

window.onload = function() {
  let btn = document.getElementById("submitAnswers");
  btn.onclick = jump;
};

document.getElementById('timer').innerHTML = 01 + ":" + 11;

function checkSecond(sec) {
  if (sec < 10 && sec >= 0) {sec = "0" + sec};
  if (sec < 0) {sec = "59"};
  return sec;
}

function runTimer() {
  const presentTime = document.getElementById('timer').innerHTML;
  const timeArray = presentTime.split(/[:]+/);
  let m = timeArray[0], s = checkSecond((timeArray[1] - 1));
  if ( s == 59 ){ m -= 1 }
  if ( m < 0 ) {
    return
  }
  
  document.getElementById('timer').innerHTML = m + ":" + s;
  
  
  
}
setInterval(runTimer, 1000);

function submitAnswers(){
  const answer1 = document.querySelector("#Q1").value 
  if (answer1 == 40) jump();

  const answer2 = document.querySelector("#Q2").value 
  if (answer2 == 25) jump();
}

function jump() {
    count += 1;
    //changing the y position
    y -= 6;
}

function draw() {
    //clearing the canvas
    context.clearRect(0, 0, 600, 400);
     
    //redrawing the circle   
    context.beginPath();
    context.arc(x, y, 50, 0, 2 * Math.PI);
    context.fillStyle="red";
    context.fill();

    //drawing the count value
    context.font = '25px Arial';
    context.fillStyle = 'white';
    
    context.fillText("Count: " + count, 20, 30);
    
    context.font = '25px Arial';
    context.fillStyle = 'white';
    let theTime = document.getElementById('timer').textContent;
    context.fillText("Timer: " + theTime, 200, 30);
  
    window.requestAnimationFrame(draw);
}
draw();

</script>



</body>
</html>
sczxawaw

sczxawaw1#

您需要做的是在画布本身中创建一个“弹出窗口”。
你可以创建一个白色背景的对象,然后在其中添加边框和文本。你可能还需要添加一个按钮来关闭“弹出窗口”。
使用下面文章中的资源来帮助解决这个问题,但是我确信您可以使用canvas标记中的HTML元素来帮助创建这个模态框,看起来您已经知道如何处理文本,所以这对您来说应该不难。
https://www.tutorialspoint.com/html5/html5_canvas.htm
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas
顺便说一句,画布对象就像任何其他的object一样,你可以跟踪它们。与canvas,如果你删除一个对象覆盖另一个对象,它揭示了覆盖的对象。这是光栅和矢量之间的区别,光栅将取代视觉数据/元素和矢量层的视觉信息。

t2a7ltrp

t2a7ltrp2#

如果你想让它变得非常简单,你可以使用“alert“方法,把它放在runTimer函数中:

if (m < 0) { 
  alert("You ran out of time!");
  return;
}

我不知道是否有可能添加一个自定义弹出从画布内-也许这将是一个简单的游戏有点矫枉过正?

相关问题