为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_遁去的一_1 2023-10-13 16:25:49
我目前正在尝试学习 java 的 LibGDX 游戏引擎。我使用的是平铺地图,每个平铺为 32*32 像素。我还有一个尺寸为 48*64 的角色精灵。在我的游戏中,我将一个单位定义为地图上的一个图块。由于某种原因,我的地图渲染正确,但玩家精灵渲染得异常大,而不是大约 2 平方单位的预期大小。我尝试过在线搜索类似的问题,但找不到与我的问题类似的内容。我知道这与我正在使用的缩放有关,但我不知道解决它的好方法。当然,一种方法是在使用batch.draw()函数绘制时简单地缩小玩家精灵,但我觉得这不是必要的。@Override 公共无效创建(){    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();}@Overridepublic void render () {    player1.update(); //Update player position    camera.position.set(player1.getX(), player1.getY(), 0); //Set position to players position    camera.update();}我希望精灵的大小与玩家碰撞盒(圆形)的大小大致相同,其半径为一个单位。相反,它变得非常大:https://i.gyazo.com/6d814d10cd5f9bec322b601d538cb9ee.png完整的精灵看起来像这样:https://i.gyazo.com/03178769d4a3b4beaba1612c76d37386.png提前致谢:)
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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

您已经有一个 Player 类。它应该只引用TextureRegion而不是Sprite。您可以为您的 Player 类指定大小和位置(您实际想要的大小)。


查看完整回答
反对 回复 2023-10-13
  • 1 回答
  • 0 关注
  • 56 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信