按下按键或移动鼠标时,游戏速度会减慢
Game slows down while pressing a key or moving mouse
最近我一直在尝试使用SDL编写我自己的游戏(太空入侵者的克隆),但我遇到了事件问题。。。我有两个事件,一个是由我的计时器发射的,我用它来绘制移动的敌舰。第二个事件是我的键盘事件,我用它来移动我的船。当我开始游戏时,敌人的飞船开始按照我的预期移动,但若我按下键或移动鼠标,它们的移动速度会变慢。我在移动我的飞船时也遇到了同样的问题,若我尝试移动鼠标,帧速率会降低很多。我的事件循环:
while(!exit)
{
while(SDL_PollEvent(&event));
{
if(event.type == SDL_QUIT) exit=true;
if(event.type == SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case SDLK_LEFT:
pship.move(pship.getPosition().x - 1, pship.getPosition().y);
break;
case SDLK_RIGHT:
pship.move(pship.getPosition().x + 1, pship.getPosition().y);
break;
}
}
if(event.type == SDL_USEREVENT)
{
switch(event.user.code)
{
case 1:
static int xOffset, yOffset;
xOffset++;
yOffset++;
drawEnemyShips(eship,xOffset,yOffset);
break;
}
}
}
}
我使用Visual c++2010 express和SDL 1.2.15
while(SDL_PollEvent(&event));
你绝对不希望;
出现在那里!按照你的方式,你在吃活动。如果您得到一个事件,SDL_PollEvent
返回一个,所以您再次调用SDL_PollEvent
。如果没有事件,你会跳出while
循环并处理它。但如果有第二个事件,你永远不会处理第一个。
但无论如何,一个旋转的民意调查循环被打破了。这就像一个孩子每分钟都在问"我们到了吗",却不让父母开车。使用SDL_WaitEvent
等待事件,而不是旋转CPU轮询等待事件。
一个简单的方法是改变:
while(SDL_PollEvent(&event));
到此:
while (SDL_WaitEvent(&event) != 0)
这将使您的代码有点笨拙(while
循环仍然是不必要的,当您中断它时,您只需重新输入它),但至少它不会中断。
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- 在C++游戏中与库存系统作斗争
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 换位表导致测试失败(但在游戏中运行良好)
- Craps游戏问题,忽略if语句
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 我应该在简单的策略游戏中为各个派系使用类吗 - C++
- 游戏体验和升级
- 我的代码运行良好,但在游戏循环中中断
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- C++:游戏和网络的速度
- 按下按键或移动鼠标时,游戏速度会减慢
- SDL背景闪电战减慢了游戏速度
- 在FPS游戏中使用鼠标输入时,移动速度出乎意料地加快