移动JoyStick精确像素

时间:2018-12-13 22:10:00

标签: python mouse virtual pixel joystick

我正在一个项目中,我想移动一个虚拟操纵杆(vJoy)x像素数。但是,我找不到将像素转换为操纵杆轴(轴为-32768到32767)的方法。一个例子可能更有助于解释:

让我说我想在给定的100毫秒时间内在x轴上移动50个像素,因此我必须找到-32768到32767之间的确切轴力,这将在给定时间内将对象移动50个像素。

由于我需要非常精确的机芯,因此我迷上了可以完成这项任务的方法。感谢您的帮助

谢谢

1 个答案:

答案 0 :(得分:0)

  1. 计算出物理操纵杆轴可以移动的总范围。您指定的最小值和最大值为-32768到32767,总范围为65535。
  2. 找出希望虚拟操纵杆(vJoy)能够移动的像素的总范围。假设它从像素位置0开始,其最小和最大允许值为-100和100。这使我们的总范围为200。
  3. 现在,计算出物理操纵杆每虚拟操纵杆运动应移动多少个单位。通过除以65535/200(物理操纵杆范围/虚拟操纵杆范围),可以得出327.675。假设该数字表示“对于每个像素,虚拟操纵杆传播,物理操纵杆传播327.675”。让我们将此值分配给变量“ axis_per_pixel”。
    1. 最后,如果我们知道值轴值已更改了量“ a”(根据您的示例50),则可以通过乘以:a * axis_per_pixel来确定物理操纵杆值需要更改多少。在我们的示例中,这将是50 * 327.675,即16383.75。因此,当虚拟操纵杆位置增加50时,物理操纵杆位置应增加16383.75才能匹配。

我将给出一个代码示例。您将其标记为Python,但是我要用JavaScript回答,因为我的Python仍然有点粗糙。希望它已经足够清楚了。

function getPositionIncrease(
  minPixelValue, // lowest allowed pixel position, ie -100
  maxPixelValue, // highest allowed pixel position, ie 100
  minAxisValue, // lowest allowed axis value, ie -32768
  maxAxisValue, // highest allowed axis value, ie 32767,
  pixelDelta, // what amount the pixel position has changed by
) {
  const distPixel = maxPixelValue - minPixelValue;
  const distAxis = maxAxisValue - minAxisValue;
  const axisPerPixel = distAxis / distPixel;
  const axisDelta = pixelDelta * axisPerPixel; // how much the physical axis needs to change to match
  return axisDelta;
}