当前位置: 首页 > 知识库问答 >
问题:

LibGDX批处理。draw()旋转和atan2()角度兼容性?

满耀
2023-03-14

使用数学时,似乎存在某种计算故障。atan2()计算角度,然后使用批处理在纹理旋转中使用该角度。draw()。系统。已使用out,并且已确认数学。atan2给出了错误的角度。

代码

public void mouseAngle(int x, int y) {
    mouseAngle = (int) Math.toDegrees(Math.atan2(frame.getRegionHeight() / 2 - y, frame.getRegionWidth() / 2 - x));

    System.out.println(mouseAngle);
}

传入的两个变量,int xint y是鼠标的xy坐标,由Gdx.input.getX()Gdx.input.getY()

纹理,Assets.stand的绘制方式如下:

batch.draw(Assets.stand, bounds.x, bounds.y, frame.getRegionWidth() / 2, frame.getRegionHeight() / 2, frame.getRegionWidth(), frame.getRegionHeight(), 1, 1, mouseAngle, true);

其中frame.get区域宽度()是纹理的宽度,frame.get区域高度()是纹理高度。

可以观察到,当鼠标直接在玩家上方时,角度计算为-148。当鼠标围绕玩家旋转时,所有角度的角度都是错误的。

问题是:我用来寻找角度的方法有缺陷吗?如果是这样,我可以使用Java中的其他哪些函数/方法来查找角度?如果不是,问题是由于我绘制纹理的方式造成的吗?

共有2个答案

彭展
2023-03-14

这不起作用的原因是你如何得到鼠标的y坐标。不幸的是,您必须计算鼠标的y坐标和屏幕高度的差值,因为鼠标的y坐标在y向上,这会使坐标翻转。

空英达
2023-03-14

看看您的第一个输入:

frame.getRegionHeight() / 2 - y

frame.get区域高度()/2会让你在屏幕上(水平)到达一行中的一个点。现在,如果你减去一个大于这个值的Y值,你将得到一个负数。在这种情况下,你显示鼠标点低于中点,因此第一个输入是负值。同样的情况可以应用于x的第二个输入。

您需要解决获得负距离的问题。

 类似资料:
  • 我正在使用平铺地图编辑器创建一个简单的平铺地图。在我的地图中,我有几个矩形,如果我创建一个宽度为50,高度为10的矩形,并将其旋转正好90°,保存地图并将其加载到我的LibGDX项目中,形状会正确呈现——但是如果我使用随机角度,例如26°,然后我再次渲染地图,我没有得到所需的结果,事实上我得到了完全相反的所需角度。 我使用以下方法直接从地图读取平铺地图浮动: 数学。degRad将直接从地图属性读取

  • 这是它的要点,你可以看到旋转角度从0-236然后跳119-0,很奇怪。 我想得到一个模型相对于其y轴的角度,单位为度(0-360)。然而,到目前为止,使用libgdx,我无法使用以下方法获得预期结果: 假设我只围绕y轴旋转,这是从libgdx中的变换矩阵中获取旋转角度的正确方法吗? 我已经包含了一个完整的示例类来证明我从以这种方式获得旋转中获得的角度不是预期的,而不是0-360的完整旋转,我得到类

  • 处理 css 兼容性需要使用到 postcss-loader 和postcss-preset-env两个插件 一、css 兼容性处理核心配置 1.1、修改webpack.config.js 配置文件 // webpack.config.js webpack的配置文件 // 路径: ./webpack.config.js ………… // 设置 nodejs 环境变量 process.

  • 然而,当用户拍摄照片时,图像的方向是不一样的。我的问题是:如何考虑用户和设备的方向,使输出图像与预览图像一样旋转?

  • 我试图旋转纹理时,我画他们。我认为这样做比在Paint.NET中旋转图像90度并将它们保存在不同的文件中更有意义。我查看了api文档中spritebatch绘图参数,但我就是不明白。有一堆参数,比如srcX、srcY、originX等等。我也想知道如何做同样的纹理区域。以下是api文档页面的链接:http://libgdx.badlogicgames.com/nightlies/docs/api/

  • 当我旋转图像(图像类)时,我需要帮助解决一个小问题。 这个想法是旋转一个球形图像,移动是通过手指的触摸和拖动,它可能是顺时针的,也可能不是顺时针的,到目前为止,这是正确的。 我希望当球体的角度是90的倍数时会发生一些事情,问题是当我用手指旋转球体时,有时它太快了,以至于球体的角度不总是通过90的倍数,例如,如果它在87,当我移动手指时,它会在不接触90的情况下移动到94。 这是我的拖动旋转代码 我