【问题标题】:libGDX-scaling by PPM for box2d, stops tiled map from rendering通过 PPM 对 box2d 进行 libGDX 缩放,停止渲染平铺地图
【发布时间】:2020-08-28 21:40:02
【问题描述】:

我正在制作一个带有已实现的平铺地图的游戏,并且我已将所有静态物体添加到我的 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 方法的帮助将不胜感激。

我现在的目标是让我的对象在地图中移动,同时如果它试图穿过它们,它会与墙壁发生碰撞。

【问题讨论】:

    标签: java android libgdx rendering box2d


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      点击hereYoutube教程。

      点击hereGitHub 代码。

      希望对你有帮助。

      干杯!!

      【讨论】:

      • 谢谢!就像我在下面回答的那样,结果我在缩放地图时使用的是双精度而不是浮点数。
      猜你喜欢
      • 2016-01-24
      • 2020-08-24
      • 2014-10-23
      • 2016-06-04
      • 2016-07-08
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      相关资源
      最近更新 更多