首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使鼠标敏感度与帧速率一起工作

如何使鼠标敏感度与帧速率一起工作
EN

Stack Overflow用户
提问于 2020-07-10 15:48:17
回答 1查看 21关注 0票数 0

因此,我在一个类似于wolfenstein 3D的fps上工作,并且我有一点被鼠标的敏感度卡住了,只有在帧频大约为60的时候才能正常工作。

对如何修复它有什么想法吗?

这是我的代码。

射线索引90和91用于左右扫射。是的,我现在意识到我可以使用索引90,然后减去它,得到正确的结果。

我知道这个问题是因为随着帧率的降低(或ellapsedTime的增加),resetMousePos函数会返回一个更高的数字,反之亦然,但我不知道如何解决这个问题

代码语言:javascript
运行
复制
public static void controls()
{
    angle += resetMousePos() * Engine.ellapsedTime() * turningSpeed;
    System.out.println(resetMousePos() * Engine.ellapsedTime() * turningSpeed);

    if (Window.W())
    {
        pos[0] += (rays.get(45).getDir()[0] * speed) * Engine.ellapsedTime();
        pos[1] += (rays.get(45).getDir()[1] * speed) * Engine.ellapsedTime();
    }

    if (Window.S())
    {
        pos[0] -= (rays.get(45).getDir()[0] * speed) * Engine.ellapsedTime();
        pos[1] -= (rays.get(45).getDir()[1] * speed) * Engine.ellapsedTime();
    }

    if (Window.A())
    {
        pos[0] += (rays.get(90).getDir()[0] * speed) * Engine.ellapsedTime();
        pos[1] += (rays.get(90).getDir()[1] * speed) * Engine.ellapsedTime();
    }

    if (Window.D())
    {
        pos[0] += (rays.get(91).getDir()[0] * speed) * Engine.ellapsedTime();
        pos[1] += (rays.get(91).getDir()[1] * speed) * Engine.ellapsedTime();
    }

    for (int i = 0; i < rays.size(); i++)
    {
        rays.get(i).setPos(pos);

        if (i < 90)
        {
            rays.get(i).setAngle(Math.toRadians(i + angle));
        }
        if (i == 90)
        {
            rays.get(i).setAngle(Math.toRadians(i + angle + 45));
        }
        if (i == 91)
        {
            rays.get(i).setAngle(Math.toRadians(i + angle + 225));
        }
    }

    if (Window.Space())
    {
        System.exit(0);
    }

}

public static int resetMousePos()
{
    int d = 0;

    Point p = Window.getWindow().getLocation();

    Robot r = null;
    try
    {
        r = new Robot();
    } catch (AWTException e)
    {
        e.printStackTrace();
    }

    if (Window.mouseX() != Window.width() / 2)
    {
        d = (Window.width() / 2) - Window.mouseX();
        r.mouseMove(p.x + 8 + Window.width() / 2, p.y + Window.height() / 2);
    }

    return d;
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-10 16:44:28

我找到了一个解决方案。在具有休闲线的线上:

angle += resetMousePos() * Engine.ellapsedTime() * turningSpeed;

我只是简单地将Engine.ellapsedTime()替换为一个双精度数字0.001,它在任何帧速率下都能正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62829564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档