为什么 sfmlEntity.setOrigin() 不起作用?

问题描述 投票:0回答:1

我用 C++ 编写了一些 SFML 代码,将精灵的原点设置为其中心(0.125f),以便我可以在其中心旋转它:

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <SFML/Audio.hpp>
#include <iostream>

using namespace sf;

void keys();
float deg = 0.0f, y = 0.0f;
int speed = 5;

int main()
{
    RenderWindow win(VideoMode({500,500}),"Bogus Run",Style::Close | Style::Titlebar);
    Font font("arial.ttf");
    Text fps(font,"0",25);
    fps.setFillColor(Color::Blue);
    win.setFramerateLimit(30);

    Texture ps("sprites/playerSprite.png");

    Sprite plr(ps);
    plr.setOrigin({0.125f,0.125f});
    plr.scale({.25f,.25f});
    std::cout << plr.getOrigin().x << std::endl << plr.getOrigin().y;

    while(win.isOpen()){
        while(std::optional ev = win.pollEvent()){
            if(ev->is<Event::Closed>()){
                win.close();
            }
        }

        //fps.setString("0");
        win.clear(Color::Cyan);
        win.draw(fps);
        keys();
        plr.move({0.0f,y});
        plr.rotate(degrees(deg));
        win.draw(plr);
        win.display();
    }

    return 0;
}

void keys(){
    if(Keyboard::isKeyPressed(Keyboard::Scancode::D)){
        deg = 1.0f;
    }
    if(Keyboard::isKeyPressed(Keyboard::Scancode::A)){
        deg = -1.0f;
    }
    if(!Keyboard::isKeyPressed(Keyboard::Scancode::A) && !Keyboard::isKeyPressed(Keyboard::Scancode::D)){
        deg = 0.0f;
    }
    if(Keyboard::isKeyPressed(Keyboard::Scancode::W)){
        y = -1.0f;
    }
    if(Keyboard::isKeyPressed(Keyboard::Scancode::S)){
        y = 1.0f;
    }
    if(!Keyboard::isKeyPressed(Keyboard::Scancode::S) && !Keyboard::isKeyPressed(Keyboard::Scancode::W)){
        y = 0.0f;
    }
    deg *= speed;
    y *= speed;
}

...但是当我运行代码时,旋转总是发生在左上角。

c++ sfml
1个回答
0
投票

它有效,我将 {0.125f,0.125f} 更改为 {512.f,512.f},它似乎有效。再次感谢您的帮助@JesperJuhl!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.