【问题标题】:SFML player movement help in c++c++ 中的 SFML 播放器移动帮助
【发布时间】:2020-09-25 16:57:45
【问题描述】:

我对 sfml 完全陌生,所以我一直在关注 youtube 上的教程。我完全按照那个人的做法做了,但我的动作仍然有问题。

基本上发生的情况是,如果我按下一个移动键,玩家(它只是一个矩形)会移动一点,当我松开键时,玩家会回到它的官方位置。为什么又回到了它的官方立场。即使我再按一次键,它也只会移动一次。

这是我的代码:

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

using namespace std;
int main()
{

sf::RenderWindow window(sf::VideoMode(512, 512), "SFML Tutorial", sf::Style::Close | sf::Style::Titlebar| sf::Style::Resize);

//Game Loop

 while(window.isOpen())
    {

        //create an event
        sf::Event evnt;
       //create a rectangle shape called player
        sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f));
        player.setFillColor(sf::Color::Red);
        while(window.pollEvent(evnt))
            {
                switch(evnt.type)
                {
                case sf::Event::Closed:
                    window.close();
                    break;
                case sf::Event::Resized:
                    cout<<"New window width: "<<evnt.size.width<<" New window height: "<<evnt.size.height<<endl;
                    break;
                case sf::Event::TextEntered:
                    if(evnt.text.unicode < 128){
                    printf("%c", evnt.text.unicode);
                    }
                }

            } //window event

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left))
                {
                   player.move(-5.0f, 0.0f);
                }
            else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right))
                {
                    player.move(5.0f, 0.0f);
                }
            else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up))
                {
                    player.move(0.0f, -5.0f);
                }
            else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down))
                {
                    player.move(0.0f, 5.0f);
                }


            //display player

            window.clear();
            window.draw(player);
            window.display();
    }
    return 0;

}

【问题讨论】:

  • 你也可以给我们演示一下移动功能吗?我想你自己编码的
  • 这就是这家伙在教程中所做的。这是与运动代码相关的所有内容
  • 我从一开始就遵循他的教程,这是他教程的第 5 部分。链接在这里:youtube.com/…
  • 你能给我完整的代码吗?我明白了
  • 这是完整的代码

标签: c++ sfml


【解决方案1】:

问题是您在 while 循环中的 100.0f 100.0f 中的每一帧都创建一个字符。因此,您需要将创建字符的代码移出 while 循环。

int main()
{
    sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f)); 
    player.setFillColor(sf::Color::Red);
    while(window.isOpen())
        {

             //create an event
             sf::Event evnt;
             //create a rectangle shape called player

             while(window.pollEvent(evnt))
             ...
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多