我正在学习C++,我想我应该使用SFML图形库为原始的小行星游戏涂上一层新的油漆。然而,对于我的玩家精灵,虽然原点在屏幕的左上角,但它的右边是负x轴,向下是负y轴(与两种情况下的预期相反)。此外,无论是什么对象或旋转,调用setRotation
函数总是围绕屏幕左上角旋转任何对象,即使对于该对象,我已将原点设置为对象的中心。
#include<SFML\Graphics.hpp>
using namespace sf;
const int W{ 1200 }, H{ 800 };
const float degToRad = 0.017453f;
int main() {
float x{ -600 }, y{ -400 };
float dx{}, dy{}, angle{};
bool thrust;
RenderWindow app(VideoMode(W, H), "Asteroids!");
app.setFramerateLimit(60);
Texture t1, t2;
t1.loadFromFile("images/spaceship.png");
t2.loadFromFile("images/background.jpg");
Sprite sPlayer(t1), sBackground(t2);
sPlayer.setTextureRect(IntRect(40, 0, 40, 40));
sPlayer.setOrigin(-600, -400);
while (app.isOpen())
{
app.clear();
app.draw(sPlayer);
app.display();
}
return 0;
}
上面的代码绘制玩家(spaceship.png)添加到渲染窗口的中心(app)但是请注意我是如何输入负坐标的。另外,如果我进一步输入接受键盘输入的代码并调用setRotation
函数,而不是绕其中心旋转sPlayer
sprite(即(-600,-400)),它会使sprite围绕屏幕左上角旋转,即(0,0)。我在SFML在线文档中找不到任何解释。我该怎么办?
正如我提到的,我已经尝试阅读文档。我看了在线教程,但没有用。
1条答案
按热度按时间0sgqnhkj1#
原点是sprite上你“持有”sprite的点。位置是屏幕上你放置sprite的原点的点。简而言之,你通过原点获得sprite并放置它,这样原点就在位置上。
默认情况下,原点和位置都是(0,0),所以你的sprite的左上角被放在屏幕的左上角。你所做的是说“把这个点放在sprite上,这是sprite的实际可见部分的左上角的方式,并把它放在屏幕的左上角”。这有一个移动你的sprite到右下角的效果。
您可能需要这样的内容: