尝试在 p5.js 中使用 collide() 根据碰撞计算分数

Trying to calculate score on the basis of collision using collide() in p5.js

我正在尝试使用 p5.play.js 中的 collide() 方法计算我的游戏分数,这样每当 apple 击中 hero 时,分数就会增加一。除了分数,一切都很好。无论 apple 是否与 hero 发生碰撞,我的分数都会不断更新。

这是我的 draw() 函数

function draw() {

    background(backdrop);
    drawSprite(hero);

    for(i=0; i<apples.length; i++)
    {
        apples[i].spr.collide(hero, scoreUpdate);

        if(cell[i] == 1 && previousGen[i] == 0)
        {
            apples[i].fall();
        }
        else if(cell[i] == 0 && previousGen[i] == 1 )
        {
            obstacles[i].fall();
        }
    }

    text("score: " + score, width-100, 20);
    for(i=0; i<apples.length; i++)
    {
        if(apples[i].spr.position.y > height)
        {
            generationEnd = true;
            apples[i].spr.position.y=100;
            obstacles[i].b.position.y=100;
        }
        else
        {
            generationEnd=false;
            break; 
        }
    }


    if(generationEnd==true)
        newGeneration();
}

这里是 scoreUpdate() 函数

function scoreUpdate(apple, hero)
{
    score++;
    apple.position.y = height+10;
}

有人可以帮我解决这个问题吗?谢谢。

注意 Javascript 分号注入。始终在 if/for/for...in/while/etc 所在的同一行开始一个代码块。语句,否则将在该行的末尾插入分号,结束 if 语句并使其仅执行“;”如果陈述是真的。因此,您的其他代码实际上不在 if 语句中。你的循环也是如此。

固定 JS:

function draw() {

    background(backdrop);
    drawSprite(hero);

    for(i=0; i<apples.length; i++){
        apples[i].spr.collide(hero, scoreUpdate);

        if(cell[i] == 1 && previousGen[i] == 0){
            apples[i].fall();
        }
        else if(cell[i] == 0 && previousGen[i] == 1 ){
            obstacles[i].fall();
        }
    }

    text("score: " + score, width-100, 20);
    for(i=0; i<apples.length; i++){
        if(apples[i].spr.position.y > height){
            generationEnd = true;
            apples[i].spr.position.y=100;
            obstacles[i].b.position.y=100;
        }
        else{
            generationEnd=false;
            break; 
        }
    }


    if(generationEnd==true){
        newGeneration();
    }
}

为了安全起见:

function scoreUpdate(apple, hero){
    score++;
    apple.position.y = height+10;
}

所以我修复了它。问题是无论苹果是否掉落,我都在调用 collide() 函数。我在苹果掉落后立即调用了碰撞函数,因此出于某种原因它起作用了,如果苹果掉落了,检查碰撞甚至听起来合乎逻辑。这是更新后的 draw() 函数

function draw() {

    background(backdrop);
    drawSprite(hero);

    for(i=0; i<apples.length; i++){

        if(cell[i] == 1 && previousGen[i] == 0){
            apples[i].fall();
            apples[i].spr.collide(hero, scoreUpdate);
        }
        else if(cell[i] == 0 && previousGen[i] == 1 ){
            obstacles[i].fall();
        }

    }
    text("score: " + score, width-100, 20);
    for(i=0; i<apples.length; i++){
        if(apples[i].spr.position.y > height){
            generationEnd = true;
            apples[i].spr.position.y=100;
            obstacles[i].b.position.y=100;
        }
        else{
            generationEnd=false;
            break; 
        }
    }


    if(generationEnd==true)
        newGeneration();
}