我在实现将对象移动到屏幕上的点的插值时遇到麻烦。
这是代码:
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/