尝试使用p5.js中的collide()基于碰撞计算得分

时间:2016-05-04 17:35:44

标签: javascript game-physics p5.js

我正在尝试使用p5.play.js中的collide()方法计算我的游戏分数,这样每当apple点击hero时,分数就会增加1。除了得分,一切都很好。无论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;
}

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

2 个答案:

答案 0 :(得分:0)

注意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;
}

答案 1 :(得分:0)

所以我修好了。问题是我正在调用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();
}