我用 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;
}
...但是当我运行代码时,旋转总是发生在左上角。
它有效,我将 {0.125f,0.125f} 更改为 {512.f,512.f},它似乎有效。再次感谢您的帮助@JesperJuhl!