Hey Guys我是游戏开发的初学者,使用C ++和Sfml我编写了这个代码来使紫色物体移动,但问题是它不能顺利移动,它就像文字输入,如何解决?
这是我的代码:
#include <SFML/Graphics.hpp>
int main()
{
sf::ContextSettings settings;
settings.antialiasingLevel = 12;
sf::RenderWindow window(sf::VideoMode(640, 480), "Ala Eddine", sf::Style::Default, settings);
sf::CircleShape player(20, 5);
player.setFillColor(sf::Color(150, 70, 250));
player.setOutlineThickness(4);
player.setOutlineColor(sf::Color(100, 50, 250));
player.setPosition(200, 200);
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{
window.close();
}
//MOOVING PLAYER////////////////////////////////////////
// moving our player to the right //
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D)){ //
//
//
player.move(3, 0);
}
// moving our player to the left
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Q)){
player.move(-3, 0);
}
// moving our player to the UP
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Z)){
player.move(0, -3);
}
// moving our player to DOWN
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S)){
player.move(0, 3);
}
}
window.clear();
window.draw(player);
window.display();
}
return 0;
}
答案 0 :(得分:0)
我假设您的player.move()
方法只是将偏移量添加到玩家位置。这意味着您的对象将始终以相同的恒定速度移动(假设帧速率恒定)。你想要的是有一个加速度来更新每一帧的速度。
这里是基本思路(对于一个方向; y方向将相应地工作,尽管使用向量会更好):
timestep * acceleration
添加到速度。timestep * velocity
添加到对象位置。0.99
。假设您有一个固定的时间步长(例如,60 fps的1/60秒)。时间步长略高一些,我会将您推荐给this article on the topic。