javascript - Javascript 碰撞检测生成的分数超过了应有的分数
问题描述
我正在创建一个简单的 javascript 游戏,其中桨需要捕捉下雨的积木。当发生碰撞时,分数应该增加 1,但在我的情况下,分数会增加 12。
我很确定有碰撞检测,因为当它碰到桨时,块会消失,我有一个 console.log 来告诉我有碰撞。
我的碰撞检测代码
var spawnRate = 1500;
var spawnRateOfDescent = 2;
var lastSpawn = -10;
var objects = [];
var startTime = Date.now();
var score =0;
function spawnRandomObject() {
var t;
if (Math.random() < 0.50)
{
t = "red";
}
else
{
t = "blue";
}
var object = {
type: t,
x: Math.random() * (canvas.width - 30) + 15,
y: 100,
r: 8,
status: 1
}
objects.push(object);
}
function animate()
{
var time = Date.now();
if (time > (lastSpawn + spawnRate)) {
lastSpawn = time;
spawnRandomObject();
}
var paddleLeft=paddleX;
var paddleRight=paddleX+paddleWidth;
var paddleTop=paddleY;
var paddleBottom=paddleY+paddleHeight;
for (var i = 0; i < objects.length; i++)
{
var object = objects[i];
object.y += spawnRateOfDescent;
if (object.status == 1){ //only draw the ball if the status is 1
ctx.beginPath();
ctx.arc(object.x, object.y, object.r, 0, Math.PI * 2);
ctx.closePath();
ctx.fillStyle = object.type;
ctx.fill();
}
var objectTop=object.y-object.r;
var objectBottom=object.y+object.r;
var objectLeft=object.x-object.r;
var objectRight=object.x+object.r;
if (objectRight>paddleX && objectLeft<paddleX+paddleWidth && objectBottom>paddleY && objectTop<paddleY+paddleHeight)
{
object.status = 0;
console.log("collision");
score = score +1;
}
}
}
解决方案
在以下代码中,您将添加分数:
if (objectRight>paddleX && objectLeft<paddleX+paddleWidth && objectBottom>paddleY && objectTop<paddleY+paddleHeight)
{
object.status = 0;
console.log("collision");
score = score +1;
}
我看到您将status
对象的 设置为 0。您可以在以下情况下使用它:
if (objectRight>paddleX && objectLeft<paddleX+paddleWidth && objectBottom>paddleY && objectTop<paddleY+paddleHeight && object.status === 1)
{
object.status = 0;
console.log("collision");
score++;
}
请记住,您不会从数组中删除对象。
推荐阅读
- java - Android - 在没有应用程序上下文的情况下获取用户 GPS 位置
- react-native - NSMutableArray 类型的 JSON 值 '(1,"0.2")' 无法转换为 ABI36_0_YGValue
- angular - 必须在 before 函数或 spec angular 中创建间谍
- javascript - 从谷歌日历 API 获取公共假期到 json
- javascript - Material-UI 样式:将功能组件转换为类组件
- java - 使用java的嵌套数组的$elemMatch过滤器
- python - 您将如何在 CSV 字典中搜索单个列,然后访问同一行中的另一列?
- laravel - WSS 使用 Apache PHP 和 Laravel 在 Elastic Beanstalk 上保护 Websocket
- firebase - 类型错误:null 不是对象
- ruby-on-rails - LoadError:无法加载这样的文件——faker