PPM对box2d进行libGDX缩放,停止渲染平铺地图

时间:2020-05-12 21:13:28

标签: java android libgdx rendering box2d

我正在用平铺的地图制作游戏,已经实现了,并且将所有静态物体添加到了Box2d世界中。但是,当我添加动态身体时,无论速度多么高,它都太慢了。经过研究后,我发现需要使用每米像素(PPM)缩放地图。但是,当我尝试通过在正交地图渲染器中传递单位比例来缩放地图时,将地图的边沿如下所示:

        mapLoader = new TmxMapLoader();
        map = mapLoader.load("game_map1.tmx");
        mapRenderer = new OrthogonalTiledMapRenderer(map, 1/PPM);

除非PPM 1,否则我会得到黑屏而不是地图。我也在缩放视口,但这似乎不是问题。因为当我尝试仅做视口时,渲染的地图和图形更大。

我还尝试通过setTransform()方法移动,如下所示:

    private void handleInput(float delta) {
        if(Gdx.input.isTouched()){
                float diff_x = Gdx.input.getX() - (gameport.getScreenWidth()/2);
                float diff_y = Gdx.input.getY() - (gameport.getScreenHeight()/2);

                if(diff_x != 0) {
                    float new_x = player.body.getPosition().x + diff_x / Math.abs(diff_x);
                    float new_y = player.body.getPosition().y - diff_y / Math.abs(diff_x);
                    player.body.setTransform(new_x, new_y, 1);
                }

但是这种碰撞并不是完美的,动态物体有时会穿过墙壁(静态物体)或卡在其中。对于缩放或修复set-transform方法的任何帮助将不胜感激。

我现在的目标是使我的物体在试图穿过墙壁时与墙壁发生碰撞的同时在地图中移动。

2 个答案:

答案 0 :(得分:1)

问题似乎是,在maprenderer的构造函数中,“ Unitscale”参数必须为浮点数,而不是双精度数,因此您必须将PPM定义为浮点数,或在要传入的变量旁边放置一个f。 / p>

答案 1 :(得分:1)

我相信您做对了。与B2Box世界相比,您的地图比例有所不同,您始终需要调整位置和大小。

要了解更多信息,并且不要忘记有关map / viewerport / b2bodies的任何详细信息,请按照我用作B2Box(Youtube / Github)指南的本教程进行操作,它非常快速,容易,您将我喜欢使用B2Box进行所有操作(-),并且继续进行LibGdx Framework开发。

点击here YouTube教程。

点击here GitHub代码。

希望对您有帮助。

干杯!