Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (libgdx)为什么我的精灵被渲染得这么大?_Java_Libgdx_Scale_Tiled - Fatal编程技术网

Java (libgdx)为什么我的精灵被渲染得这么大?

Java (libgdx)为什么我的精灵被渲染得这么大?,java,libgdx,scale,tiled,Java,Libgdx,Scale,Tiled,我目前正在尝试学习用于java的LibGDX游戏引擎。我使用的是平铺贴图,每个平铺为32*32像素。我还有一个大小为48*64的角色精灵。在我的游戏中,我将一个单位定义为地图上的一个瓷砖。由于某些原因,我的贴图被正确渲染,但是玩家精灵被渲染的异常大,而不是预期的大约2平方单位的大小 我曾尝试在网上搜索类似的问题,但找不到任何与我的问题类似的东西。我知道这与我正在使用的缩放有关,但我不知道有什么好方法来解决它 当然,一种方法是在使用batch.draw()函数绘制播放器精灵时,简单地缩小它的比例,

我目前正在尝试学习用于java的LibGDX游戏引擎。我使用的是平铺贴图,每个平铺为32*32像素。我还有一个大小为48*64的角色精灵。在我的游戏中,我将一个单位定义为地图上的一个瓷砖。由于某些原因,我的贴图被正确渲染,但是玩家精灵被渲染的异常大,而不是预期的大约2平方单位的大小

我曾尝试在网上搜索类似的问题,但找不到任何与我的问题类似的东西。我知道这与我正在使用的缩放有关,但我不知道有什么好方法来解决它

当然,一种方法是在使用batch.draw()函数绘制播放器精灵时,简单地缩小它的比例,但我觉得这不必要

@凌驾 公共void创建(){

我希望精灵的大小与半径为一个单位的玩家击盒(圆形)大致相同。相反,它变得非常大:

而完整的精灵如下所示:


提前感谢:)

我不会完全使用Sprite类。在LibGDX中,它是作为高度优化的对象创建的,但它将资产(TextureRegion)与游戏模型对象(位置和大小等)合并在一起,并违反了“组合优先于继承”的原则。这也在StackOverflow上引发了许多问题,因为人们没有意识到它继承自TextureRegion,但并不意味着通过将其传递给SpriteBatch来绘制(它不意味着被视为TextureRegion)。要正确绘制,应该调用
sprite.draw(batch)
,而不是
batch.draw(sprite…)

你已经有了一个玩家类。它应该只引用一个纹理区域而不是精灵。你可以给你的玩家类一个大小和位置(你实际想要的大小)

    world = new World(new Vector2(0, -20), true); //Create Box2d world
    debugRenderer = new Box2DDebugRenderer();

    player1 = new Player();

    camera = new OrthographicCamera(WORLD_WIDTH, WORLD_HEIGHT); //Create the camera I'm using, with width = height = 20

    map = new TmxMapLoader().load("maps/Maptest.tmx"); //Load a map created in Tiled
    this.mapObjects = map.getLayers().get(0).getObjects();
    ObjectMapper.createShapes(this.mapObjects, this.world); //Load shapes from map for collision management
    ObjectMapper.setSpawn(player1, mapObjects, world); //Set spawnpoint from object in the Tiled map

    batch = new SpriteBatch();
    renderer = new OrthogonalTiledMapRenderer(map, 1/PPT); //Create a tiled map renderer with unit scale 1/32


    camera.update();
}



@Override
public void render () {
    player1.update(); //Update player position

    camera.position.set(player1.getX(), player1.getY(), 0); //Set position to players position
    camera.update();



    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    renderer.setView(camera); //Set renderer's view to camera view
    renderer.render();
    camera.update();
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(player1.getSprite(), player1.getX()-player1.getSprite().getWidth()/2, player1.getY()-player1.getSprite().getHeight()/2); //Draw player sprite
    batch.end();
    System.out.println(player1.getX() + " " + player1.getY());
    world.step(1/60f, 6, 2); //Iterate one step with Box2d world
    debugRenderer.render(world, camera.combined); //Draw shapes

    long javaHeap = Gdx.app.getJavaHeap();
    long nativeHeap = Gdx.app.getNativeHeap();
}


@Override
public void resize (int width, int height) { 

    camera.viewportWidth = WORLD_WIDTH;                 // 20 units
    camera.viewportHeight = (float)WORLD_HEIGHT*height/width;
    camera.update();

}