c++ - 按下 2 个箭头键时实现对角线移动(使用 SFML)

标签 c++ sfml

我认为没有必要进行任何代码演示,因为它不像 C++ 那样使用 SFML。问题是,我如何让我在屏幕上闪烁的东西实现流畅的移动?例如,我将一个正方形 blit 到屏幕,并将其位置变量设为我之前定义的整数,以便我可以使用箭头键移动它。当我按下将值添加到变量的键时,如果我只使用一个键,它工作正常,但在按下两个键时,它只会添加到第二次按下的值。我将如何使其沿对角线移动?

最佳答案

公认的答案不是很好。

最好分别存储 x 和 y 移动,检查所有已按下的键,然后分配实际移动。

x = 0.0;
y = 0.0;
speed = 1.0;

if (key.up())
{
  y -= speed;
}

if (key.down())
{
  y+= speed;
}

if (key.left())
{
  x -= speed;
}

if (key.right())
{
  x+= speed;
}

Move(x, y);

这应该让你开始。

当你深入研究它时,你会注意到这段代码有一点怪癖——如果你沿对角线移动,你会发现你移动得太快了,有点作弊!这是因为添加了两个单位的速度,而不仅仅是一个。您可能认为解决方案是将每个值减半,但这样您就会太迟钝了。当您沿对角线移动时,您需要考虑三角形和毕达哥拉斯定理 - 您需要通过将两个方向除以根 2 来进行补偿。

关于c++ - 按下 2 个箭头键时实现对角线移动(使用 SFML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421508/

相关文章:

c++ - 如何格式化我的函数以调用模板类?

c++ - 如何生成 24 个字符的 UUID?

c# - 颠覆以更新文本文件中的版本

c++ - 我无法获得正确分离和比较数组数据的代码

C++ 实现状态

c++ - 在 XCode 中构建时出现 FreeType 错误

c++ - 让我的敌人朝我的玩家 C++ 移动

c++ - 调用 Clock::getElapsedTime() 时 SFML 2.0 崩溃

c++ - Fstream 的 tellg/seekg 返回值高于预期

c++ - SFML Audio getSample使用sf::Music实时