我正在用平铺的地图制作游戏,已经实现了,并且将所有静态物体添加到了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方法的任何帮助将不胜感激。
我现在的目标是使我的物体在试图穿过墙壁时与墙壁发生碰撞的同时在地图中移动。
答案 0 :(得分:1)
问题似乎是,在maprenderer的构造函数中,“ Unitscale”参数必须为浮点数,而不是双精度数,因此您必须将PPM定义为浮点数,或在要传入的变量旁边放置一个f。 / p>
答案 1 :(得分:1)