我的意思是,这件事让我觉得自己像个天真的程序员:')
我会解释一下。
对于我的按钮控制器输入,我使用两个数组,一个用于按下当前按钮,另一个用于按下最后一个按钮。我所做的是,对于每一帧,复制"当前"的内容。阵列到"之前"然后使用glfw将按钮状态转换为" current"阵列。
这是我正在谈论的代码:
for(int j=0; j<Input::joyButtonsCount[i]; j++)
Input::joyPrevButtons[i][j] = Input::joyCurrButtons[i][j];
Input::joyCurrButtons[i] = (char*)glfwGetJoystickButtons(i, &Input::joyButtonsCount[i]);
现在,在Windows下所有工作正常,但在Linux中它并没有。
它导致prev和curr数组相同。
有人能解释我为什么会这样吗?
如果你需要这些信息,我在Linux下使用g ++,在Windows下使用MinGW。
答案 0 :(得分:0)
从我看到glfwGetJoystickButtons
返回指向某个内部数组的指针。您将其分配给Input::joyCurrButtons[i]
,并在下一次迭代中假设它将具有先前的值。这可能不是真的(可能是其实现已定义),因为系统可能已在内部使用新值更新此数组。这样,您的第一个循环将复制到joyPrevButtons
个新值而不是之前的值。
glfwGetJoystickButtons
返回一个const指针,以确保API用户不会尝试修改其值。所以你不应该把它强制转换为非const。此外,它通常表示您不应该保留此指针,而是仅使用它来复制值。
我建议您不要将glfwGetJoystickButtons
中的指针存储在Input::joyCurrButtons[i]
中,而是将值从glfwGetJoystickButtons
复制到Input::joyCurrButtons[i]
数组。
答案 1 :(得分:0)
考虑到您提供的代码段,没有理由为什么阵列副本在Linux中的执行方式与在Windows中的执行方式不同。你的问题可能在其他地方。
我建议您检查以下几点:
Input::joyButtonsCount[i]
?答案 2 :(得分:0)
对于我所处的其他人(例如像我这样的新手:P),我会发布问题。
似乎我必须将指针复制到数组而不是获取指针并将其用作我的输入数据
以下是此代码的使用方法:
Input::joyPrevButtons[i] = (char*)memcpy(Input::joyPrevButtons[i], Input::joyCurrButtons[i], Input::joyButtonsCount[i]);
Input::joyCurrButtons[i] = (char*)memcpy(Input::joyCurrButtons[i], glfwGetJoystickButtons(i, &Input::joyButtonsCount[i]), Input::joyButtonsCount[i]);
显然我必须包含字符串标题
#include <string.h>
但我仍然不知道为什么它不适用于Linux,因为它适用于Windows。