模拟跳跃与keyDown过剩c++不是100%
Simulating a Jump with keyDown Glut C++ not 100%
我正在使用glutkeyboardfunc
和keyDown
控制屏幕上的精灵。
。当我执行以下代码时,精灵成功跳跃:
if(keyDown[119]){//w key = up
sprite_y +=40.0f;
spriteT=spriteJ;
}
当精灵在空中时,使用以下代码返回:
if(sprite_y>0){ gravity-=10*delta; sprite_y+=gravity; }
else{ gravity=0; }
我遇到的问题是,如果你把手指放在w
键上,精灵会永远跳下去,并一直向上。
我理解这是因为我使用keyDown
方法,所以我尝试了这个:
if(keyDown[119]){//w key = up
sprite_y +=40.0f;
spriteT=spriteJ;
keyDown[119]=0;//reset keyDown to keyUp
}
但我没有运气……
是否有一种方法可以将keyDown
限制在一定的时间段内,或者只按一次?谢谢。
编辑我不太明白为什么这个问题值得投票否决。你读过吗?
您可以使用一个变量来表示键的先前状态,然后查看它是否发生了变化。
例如://Initialise a bool called keyWasDown to false
if (keyDown[119]){
if (!keyWasDown){
//Do jumping code
keyWasDown = true;
}
else {
keyWasDown = false;
}
相关文章:
- 检查输入是否不是整数或数字
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么使用SFINAE而不是函数重载
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 为什么std::valarray不是算术的
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- MSVC是否支持C++11样式的属性而不是__declspec
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 为什么make_tie不是一件事
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 为什么std::isnan 不是 constexpr?
- GlobalAlloc而不是其他分配方法
- 当比特(而不是字节)的顺序至关重要时的持久性
- 为什么复制而不是移动数据元素?
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和