java - Overlap() 函数在 LIBGDX 中不起作用

标签 java android eclipse libgdx

我正在 LIBGDX 中开发一款网球游戏,在这期间我必须检查 2 名玩家之间的碰撞。当我尝试通过重叠功能检测它与球的任何运动时,只需将它放在球员身上,它确实检测到碰撞,但是当我在球运动期间这样做时,它只检测到两者之一的碰撞播放器…… 为了您的理解,想象一个球从上到下移动,当球到达我游戏的第二个玩家时,它没有检测到任何碰撞,球从第一个玩家开始检测它的碰撞,但在到达第二个玩家时失败了。 ...为了检查碰撞,在渲染函数中我添加了一个简单的代码

if(this.getBounds().overlaps(game.white_player.getBounds()))
    {
        System.out.println("Over Lap.");

    }

我用矩形包围球和球员以检查碰撞....当我手动将球放在球员上方时,上面编写的代码检测到碰撞....但是当我让球旋转时,我的代码仅针对第一个玩家检测到它,

这是我完整的渲染函数代码..

public void render(float delta) {

    game.red_player.update_rec();
    game.white_player.update_rec();

if(Gdx.input.isTouched()) 
        {
    touchDown(Gdx.input.getX(), Gdx.input.getY(), 1,Input.Buttons.LEFT);

        }



if(up==true && down!=true && game.red_player.getBounds().overlaps(this.getBounds()))
    {

        shape_y+=1;
        going_up+=1;

        if(going_up > 720)
        {
            //going_up=200;
            //shape_y=200;
            System.out.println("yes");
            up = false;
            down = true;
        }

    }

    if(down == true)
        {
            shape_y-=1; 
            going_up-=1;
        }

    if(shape_y<200)
    {
        System.out.println("Lallaa");
        up=true;
        down=false;
        //going_up=201;
        //sshape_y=201;
    }


if(this.getBounds().overlaps(game.white_player.getBounds()) && shape_y==605)
    {
        System.out.println("Over Lap..");
        //up = true;
        //down = false; 
    }

    System.out.println(shape_x+" "+shape_y);

    game.batch.begin();
        game.background.actor.draw(game.batch);
        game.red_player.actor.draw(game.batch);
        game.white_player.actor.draw(game.batch);
    game.batch.end();

    stage.draw();

    shapes.begin(ShapeType.Filled);
    shapes.setColor(1,1,0,0);
        shapes.circle(shape_x, shape_y,shape_width, shape_height);
        shapes.end();

        shapes.begin(ShapeType.Line);
    shapes.setColor(0,0,0,0);
        shapes.circle(shape_x, shape_y,shape_width+1, shape_height);
        shapes.end();

shapes.begin(ShapeType.Line);
shapes.setColor(0,0,0,0);
shapes.rect(game.red_player.position.x,  
                game.red_player.position.y,game.red_player.width,
                game.red_player.height);

    shapes.end();

    shapes.begin(ShapeType.Line);
    shapes.setColor(0,0,0,0);
    shapes.rect(game.white_player.position.x, game.white_player.position.y,
                    game.white_player.width, game.white_player.height);
    shapes.end();

    shapes.begin(ShapeType.Line);
    shapes.setColor(0,0,0,0);
    shapes.rect(shape_x-10, shape_y-10, shape_width*2, shape_height/2);
    shapes.end();

}

忽略所有未定义的函数...

最佳答案

您可以尝试使用 ShapeRenderer 类绘制球员和球的边界。也许您忘记更新边界坐标以匹配球员或球的坐标? 如何使用 ShapeRenderer 的示例:

shapeRenderer.begin(ShapeType.Line);
shapeRenderer.setColor(Color.CYAN);
shapeRenderer.rect(player.getBounds().x, player.getBounds().y, player.getBounds().width,
    player.getBounds().getHeight());
shapeRenderer.end();

如果边界一切正常,请尝试将碰撞代码重写为更简单的代码:

if(ball.bounds.overlaps(anyPlayer.bounds)) {
    if(up) {
        up = false;
        down = true;
        System.out.println("Over Lap..");
    }
    else {
        up = true;
        down = false;
        System.out.println("Over Lap..");
    }
}

关于java - Overlap() 函数在 LIBGDX 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20229789/

相关文章:

java - akka 中每个主机的最大 Actor 数

java - Android - 使用参数从数据库中过滤数据

android - Canvas.drawBitmap() 忽略绘画的平铺模式

java - TextView if 语句不起作用

java - 如何仅在几个页面而不是整个应用程序中禁用电容器插件中的屏幕截图

java - Groovy ASTBuilder 多线程性能不佳

java - Android 中的文本字段

Eclipse - 目标运行时 Apache Tomcat v7.0 未定义

eclipse - 在Eclipse中创建Gradle项目

java - 在 Cucumber 中存储 REST API 响应的最佳方式是什么