c++ - SFML如何使形状移动到特定点

标签 c++ interpolation sfml

我在实现将对象移动到屏幕上的点的插值时遇到麻烦。
这是代码:

factor += timer.getElapsedTime().asSeconds() * speed;

for(int i = 0; i < 50; i++) {
  circleObjectArray[i].setPosition(Interpolate(movePositionsX[rand() % 5], movePositionsY[rand() % 5], factor));
  window.draw(circleObjectArray[i]);
}
而且我想使用插值函数的主体,但是我无法调用它
sf::Vector2f Interpolate(const sf::Vector2& pointA, const sf::Vector2& pointB, float factor) {
  if(factor > 1.f)
    factor = 1.f;
  else if(factor < 0.f)
    factor = 0.f;
  return pointA + (pointB - pointA) * factor;
}
谢谢您的时间:D

最佳答案

您需要给形状移动的时间。对于每种形状,应存储插值函数的三个输入。然后,每帧稍微更新该因子,并通过使用存储的参数调用Interpolate进行渲染。例如,每帧加1/60可使形状以60 fps的速度在一秒钟内完成完整移动。
当因子达到1时,像现在一样为下一个过渡选择新的参数,或者等待几帧以选择下一个目标。由你决定。
至于您的实际编译错误:sf::Vector2是模板类型。您不能单独使用它。编写sf::Vector2<float>,或使用预定义的类型别名sf::Vector2f

关于c++ - SFML如何使形状移动到特定点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63873137/

相关文章:

c++ - 如何建档?

c++ - 允许赋值或存在当前函数的宏

ruby - 您可以对带有插值的字符串使用 ruby​​ 百分比表示法吗?

c++ - SFML 检测假操纵杆

声明模板类后的 C++ 链接器错误

c++ - 如何将彩色文本输出到 Linux 终端?

c++ - 二进制加法从左到右进位

python - 使用 interp1d 在数据帧中按行插值

matlab - 在面上插值分段常数的二维数据

c++ - Sprite 作为全局变量?