【问题标题】:Sfml how to make a shape move to a certain pointSfml如何使形状移动到某个点
【发布时间】:2020-09-13 16:36:41
【问题描述】:

我在执行插值以将对象移动到屏幕中的某个点时遇到问题。

代码如下:

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]);
}

我想使用这个 interpolate 函数的主体,但我无法调用它

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

【问题讨论】:

  • 您的问题是什么?你有什么问题?代码没有做你想做的事吗?你想让它做什么?它做了什么?
  • “我遇到了麻烦” 并不是一个特别清晰简洁的问题描述。请在此处按要求发布minimal reproducible example
  • 我不小心发布了我现在更新的代码的错误部分,我如何在这个主体上使用 interpolate 函数“ sf::Vector2f Interpolate( const sf::Vector2& pointA, const sf: :Vector2& pointB, float factor ) { if( factor > 1.f ) factor = 1.f; else if( factor
  • 我们仍然不知道您为什么“无法调用它”。你得到一个编译器错误吗?请张贴minimal reproducible example 和错误信息
  • 它在 setposition 命令中给出了一个错误,说没有声明 interpolate,并且在 sf:Vector2f Interpolate 行中它说在没有参数列表的情况下无效使用模板名称 'sf::Vector2',执行我需要在我的主函数之外声明 vector2f 插值,还是应该为它创建一个类?

标签: c++ interpolation sfml


【解决方案1】:

你需要给你的形状时间移动。对于每个形状,您应该存储插值函数的三个输入。然后,每帧更新一点因子,并通过使用存储的参数调用 Interpolate 来渲染它。例如,每帧添加 1/60 将使形状在一秒钟内以 60 fps 的速度完成完整的移动。

当因子达到 1 时,像现在一样为下一个过渡选择新参数,或者等待几帧来选择下一个目标。这取决于你。

至于您的实际编译错误:sf::Vector2 是模板类型。你不能单独使用它。要么写sf::Vector2&lt;float&gt;,要么使用预定义的类型别名sf::Vector2f

【讨论】:

  • 对不起,你能不能更好地解释最后一部分,即使我写 sf::Vector2
  • 您在定义Interpolate 的文件中是否有#include &lt;Vector2.hpp&gt;?还要确保将其定义为全局函数,而不是在另一个函数内部(这是一个非标准扩展,通常只是一个语法错误。)
  • 现在说 Vector2.hpp: no such files or directory
  • @AndréSousa 它应该是 #include &lt;SFML/System/Vector2.hpp&gt; 而不是 #include &lt;Vector2.hpp&gt;
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多