gpt4 book ai didi

c++ - (2.3.1) 将背景纹理的比例设置为渲染窗口大小

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

刚开始学习 SFML(所以请多多包涵)。

我制作了一个 RenderWindow 对象,并且我有一张图像我想完美地适合该窗口。

通过搜索文档,我找到了 sf::Sprite::SetScale 函数。这是正确的功能吗?但是,当 RenderWindow 对象大小以像素为单位设置时,如何将 Sprite 的比例设置为 RenderWindow 的比例?我是否必须获取 RenderWindow 的比例,然后将背景 Sprite 分配给该比例?

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

int main()
{
sf::RenderWindow window(sf::VideoMode(600, 300), "Simple Game");

sf::Texture BackgroundTexture;
sf::Sprite background;

//background.setScale(0.2, 0.2); <--- how?

if(!BackgroundTexture.loadFromFile("media/background.png"))
{
return -1;
}
else
{
background.setTexture(BackgroundTexture);
}

while(window.isOpen())
{
sf::Event event;

while(window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
window.close();
}
}
window.clear();
window.draw(background);
window.display();
}
}

最佳答案

您需要的比例因子只是窗口大小与纹理大小之间的比率。 sf::Texture 和 sf::RenderWindow 一样有一个 getSize 函数。只需获取两者的大小,计算比率并使用它来设置 Sprite 的比例,如下所示:

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

int main()
{
sf::RenderWindow window(sf::VideoMode(600, 300), "Simple Game");

sf::Texture BackgroundTexture;
sf::Sprite background;
sf::Vector2u TextureSize; //Added to store texture size.
sf::Vector2u WindowSize; //Added to store window size.

if(!BackgroundTexture.loadFromFile("background.png"))
{
return -1;
}
else
{
TextureSize = BackgroundTexture.getSize(); //Get size of texture.
WindowSize = window.getSize(); //Get size of window.

float ScaleX = (float) WindowSize.x / TextureSize.x;
float ScaleY = (float) WindowSize.y / TextureSize.y; //Calculate scale.

background.setTexture(BackgroundTexture);
background.setScale(ScaleX, ScaleY); //Set scale.
}

while(window.isOpen())
{
sf::Event event;

while(window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
window.close();
}
}
window.clear();
window.draw(background);
window.display();
}
}

关于c++ - (2.3.1) 将背景纹理的比例设置为渲染窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36448101/

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