我想我有一个普遍的问题.
我目前正在学习C和SDL 2.0. SDL提供了一个函数,该函数返回指向包含所有键状态的const uint *的指针.
这些是我想要使用的变量:
const Uint8* oldKeyState; const Uint8* currentKeyState;
在我的input.cpp的构造中:
currentKeyState = SDL_GetKeyboardState(&this->length); oldKeyState = currentKeyState;
在Update()方法中我使用:
oldKeyState = currentKeyState; currentKeyState = SDL_GetKeyboardState(NULL);
但是,我不是复制最后的值,而是给出一个指向oldKeyState的指针,而oldKeyState又指向当前的keystates.
那么如何将变量指针中的实际值复制到当前和旧的keystate呢?我不希望指针在我的旧密钥状态中,因为我无法检查先前的状态是否为UP且新状态是否为DOWN.
解决方法
你在这里遇到的问题是你试图将指针复制到一个永远不会改变的const数组.因此,您将看到两个指针都转到相同的内存地址,并且您永远不会有两个输入状态副本,它允许您检查按下的键.
相反,您应该使用memcpy将一个数组复制到另一个数组.但是为了做到这一点,你应该将oldKeyState的类型改为Uint8 *,否则你会因为复制到const数组而出错.
所以,代码应该像这样结束:
const Uint8 * currentKeyState; Uint8 * oldKeyState; ... //Constructor currentKeyState = SDL_GetKeyboardState(&this->length); oldKeyState = new Uint8[this->length]; ... //Input update memcpy(oldKeyState,currentKeyState,this->length); SDL_PumpEvents(); //copy the array before calling PumpEvents()! currentKeyState = SDL_GetKeyboardState(NULL);
原文地址:https://www.jb51.cc/windows/612864.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。