gpt4 book ai didi

c++ - 如何平滑地移动 Sprite ?

转载 作者:行者123 更新时间:2023-11-30 03:44:52 26 4
gpt4 key购买 nike

我用 C++ 和 SFML 编写了一个简单的程序。我的问题是,当我移动 Sprite 时,它非常不稳定。我的 Sprite 会移动一点,然后加速到平滑的移动,直到我按下另一个键,它会再次停止然后继续。我希望这是有道理的,但简而言之,我只是希望我的 Sprite 运动更流畅。我的代码:

#include <SFML/Graphics.hpp>
#include <math.h>
#include <iostream>

int main()
{
float x = 0;
float y = 0;
sf::Vector2f position;
sf::Vector2f velocity;
float maxspeed = 3.0f;
float accel = 1.0f;
float decel = 0.02f;
sf::RenderWindow window(sf::VideoMode(400, 400), "SFML works!");
sf::Texture tplayer;

if (!tplayer.loadFromFile("character.png"))
{
// error...
}

sf::Sprite splayer;
splayer.setTexture(tplayer);
splayer.setOrigin(sf::Vector2f(0, 0));
splayer.setTextureRect(sf::IntRect(0, 0, 16, 38));

sf::Vector2f pos = splayer.getPosition();

while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
velocity.x -= accel;
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
velocity.x += accel;
else
velocity.x *= decel;

if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
velocity.y -= accel;
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
velocity.y += accel;
else
velocity.y *= decel;

if (velocity.x < -maxspeed) velocity.x = -maxspeed;
if (velocity.x > maxspeed) velocity.x = maxspeed;
if (velocity.y < -maxspeed) velocity.y = -maxspeed;
if (velocity.y > maxspeed) velocity.y = maxspeed;

position += velocity;
splayer.setPosition(position);
}
}

window.clear();
window.draw(splayer);
window.display();
window.setFramerateLimit(60);
}

return 0;
}

最佳答案

谷歌 frame independent movement

//Before main loopp
sf::Clock clock;

// Start main loop

//Somewhere in the main loop
sf::Time deltaTime = clock.restart().asSeconds();
velocity.x *= deltaTime.asSeconds();
velocity.y *= deltaTime.asSeconds();
//move is just a setPosition but it adds given argument to actual position so it's basically splayer.setPosition(sf:Vector2f(position.x + velocity.x,position.y + velocity.y));
splayer.move(velocity);

关于c++ - 如何平滑地移动 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35191168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com