C++ sfml 2.0中经过的速度和时间
所以我已经找了好几个小时了,我似乎找不到任何东西来帮助我,所以我会先说我是新的,就像非常新的一样,但我明白为了在不同的帧率下保持恒定的移动速度,我需要结合速度,并确定自循环最后一次迭代以来经过的时间 这就是我目前所知道的C++ sfml 2.0中经过的速度和时间,c++,character,velocity,sfml,C++,Character,Velocity,Sfml,所以我已经找了好几个小时了,我似乎找不到任何东西来帮助我,所以我会先说我是新的,就像非常新的一样,但我明白为了在不同的帧率下保持恒定的移动速度,我需要结合速度,并确定自循环最后一次迭代以来经过的时间 这就是我目前所知道的 #include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Oliver Rules!"); float speed = 20.f
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Oliver Rules!");
float speed = 20.f;
float locX = 0.f;
float locY = 0.f;
sf::CircleShape circleOne(50);
circleOne.setFillColor(sf::Color(200, 40, 200));
sf::Clock clock;
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
sf::Time elapsed1 = clock.restart();
if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
locX -= speed * elapsed1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
locX += 0.1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
locY -= 0.1;
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
locY += 0.1;
}
circleOne.setPosition(locX, locY);
circleOne.move(locX, locY);
window.clear();
window.draw(circleOne);
window.display();
}
return 0;
}
#包括
int main()
{
sf::RenderWindow窗口(sf::VideoMode(80060032),“奥利弗规则!”;
浮动速度=20.f;
浮动locX=0.f;
浮动locY=0.f;
sf::圆环形圆环(50);
setFillColor(sf::Color(200,40,200));
sf:时钟;
while(window.isOpen())
{
sf::事件;
while(window.pollEvent(事件))
{
如果(event.type==sf::event::Closed)
window.close();
}
sf::Time elapsed1=clock.restart();
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
locX-=速度*elapsed1;
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
locX+=0.1;
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
locY-=0.1;
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
locY+=0.1;
}
设置位置(locX,locY);
circleOne.移动(locX,locY);
window.clear();
窗口绘制(圆圈);
window.display();
}
返回0;
}
我的问题是,我无法添加或减去我启动的变量,以作为我的电路的位置。由于elapsed1是一个浮点数,我无法编辑。因此,我的问题是,如何使其工作?您的问题是
速度
和elapsed1
不是同一类型。一个是float
,另一个是sf::Time
。如果希望locX-=speed*elapsed1
工作,则必须将elapsed1
转换为float
为此,您可以使用方法elapsed1.asSeconds
、elapsed1.asmillseconds
和elapsed1.asMicroseconds
,具体取决于所需的单位类型
如果你想了解更多,你应该看看。啊,亲爱的,我想我必须转换过去的时间,但我不知道如何转换,非常感谢:)显然我还不能提高投票率:(但是我不能让它工作这是我投入的,我不认为我在写它,我以前读过文档,我知道我需要做什么,但不知道如何做。虽然我会解决这部分问题:)谢谢堆的帮助。@user2342575好的,那没问题。希望你对SFML 2.0有兴趣:)哈哈,谢谢堆,为了完成它,我得到了它,我没有意识到你必须像这样键入代码:float-appeased=clock.restart().asSeconds();我是这样写的,float-appeased=asSeconds(clock.restart());