欢迎访问宙启技术站
智能推送

Html5游戏开发之乒乓Ping Pong游戏示例(三)

发布时间:2023-05-15 08:00:04

在上一篇博客中,我们已经完成了乒乓球游戏中球的运动和碰撞检测。现在,我们需要添加两个乒乓板并实现发球和碰撞检测的功能。

添加乒乓板

首先,在HTML文件中添加两个乒乓板的div,并在CSS样式中设置它们的位置和样式:

<div id="paddle1"></div>

<div id="paddle2"></div>

#paddle1, #paddle2 {

  position: absolute;

  width: 20px;

  height: 100px;

  background-color: #FFF;

}

#paddle1 {

  left: 0;

  top: 200px;

}

#paddle2 {

  right: 0;

  top: 200px;

}

接着,在JavaScript文件中添加如下代码,创建两个乒乓板的对象:

var paddle1 = {

  x: 0,

  y: 200,

  width: 20,

  height: 100,

  speed: 5

};

var paddle2 = {

  x: canvas.width - 20,

  y: 200,

  width: 20,

  height: 100,

  speed: 5

};

然后,在游戏循环中,我们需要实现键盘控制乒乓板移动的功能。我们可以使用addEventListener()方法监听键盘事件,如下所示:

document.addEventListener("keydown", function(event) {

  if(event.keyCode == 87) { //按下W键

    paddle1.y -= paddle1.speed;

  }

  else if(event.keyCode == 83) { //按下S键

    paddle1.y += paddle1.speed;

  }

  else if(event.keyCode == 38) { //按下上箭头键

    paddle2.y -= paddle2.speed;

  }

  else if(event.keyCode == 40) { //按下下箭头键

    paddle2.y += paddle2.speed;

  }

});

注意,这里只处理了移动的逻辑,还需要处理边界检测,确保乒乓板不会超出游戏画面边界。在游戏循环中,我们可以添加如下代码:

//限制乒乓板移动范围

if(paddle1.y < 0) {

  paddle1.y = 0;

}

else if(paddle1.y + paddle1.height > canvas.height) {

  paddle1.y = canvas.height - paddle1.height;

}

if(paddle2.y < 0) {

  paddle2.y = 0;

}

else if(paddle2.y + paddle2.height > canvas.height) {

  paddle2.y = canvas.height - paddle2.height;

}

完成上述代码之后,我们就可以通过W和S键控制左边的乒乓板移动,通过上箭头和下箭头键控制右边的乒乓板移动了。

发球和碰撞检测

接下来,我们需要实现发球和碰撞检测的功能。

在游戏开始时,在init()函数中添加如下代码,初始化球的位置和速度:

//初始化球的位置和速度

ball.x = canvas.width / 2;

ball.y = canvas.height / 2;

ball.speedX = 5 * (Math.random() > 0.5 ? 1 : -1);

ball.speedY = 5 * (Math.random() * 2 - 1);

然后,在游戏循环中,我们需要检测球的位置是否超出乒乓板的范围,如果是,则反弹球,并调整球的速度和方向。如果球在乒乓板上,则改变球的运动方向。代码如下:

//碰撞检测

if(ball.y + ball.radius >= canvas.height || ball.y - ball.radius <= 0) {

  ball.speedY = -ball.speedY;

}

if(ball.x + ball.radius >= canvas.width) { //球碰到右边边界

  //右边玩家得分

  score2++;

  //初始化球的位置和速度

  ball.x = canvas.width / 2;

  ball.y = canvas.height / 2;

  ball.speedX = -ball.speedX;

  ball.speedY = 5 * (Math.random() * 2 - 1);

}

else if(ball.x - ball.radius <= 0) { //球碰到左边边界

  //左边玩家得分

  score1++;

  //初始化球的位置和速度

  ball.x = canvas.width / 2;

  ball.y = canvas.height / 2;

  ball.speedX = 5 * (Math.random() > 0.5 ? 1 : -1);

  ball.speedY = 5 * (Math.random() * 2 - 1);

}

//球和乒乓板碰撞检测

if(ball.x + ball.radius >= paddle2.x && ball.y >= paddle2.y && ball.y <= paddle2.y + paddle2.height) {

  ball.speedX = -ball.speedX;

}

if(ball.x - ball.radius <= paddle1.x + paddle1.width && ball.y >= paddle1.y && ball.y <= paddle1.y + paddle1.height) {

  ball.speedX = -ball.speedX;

}

至此,我们已经完成了乒乓球游戏的开发。完整的代码如下: