Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SFML-精灵未正确居中_C++_Sprite_Sfml - Fatal编程技术网

C++ SFML-精灵未正确居中

C++ SFML-精灵未正确居中,c++,sprite,sfml,C++,Sprite,Sfml,我有一张256×256的图像,我想居中,但由于一些奇怪的原因,它不起作用 正如你所看到的,它没有居中。代码如下: int main() { int w = 720; int h = 360; 其他一些代码: sf::RenderWindow window(sf::VideoMode(w, h), "RPG Game", sf::Style::Default); sf::Texture texture; texture.loadFromFile("WalkCycle.png")

我有一张256×256的图像,我想居中,但由于一些奇怪的原因,它不起作用

正如你所看到的,它没有居中。代码如下:

int main()
{
    int w = 720;
    int h = 360;
其他一些代码:

sf::RenderWindow window(sf::VideoMode(w, h), "RPG Game", sf::Style::Default);
sf::Texture texture;
texture.loadFromFile("WalkCycle.png");
sf::Texture inventory;
inventory.loadFromFile("Inventory.png");
sf::Sprite player(texture);
sf::Sprite inventorySprite(inventory);

sf::Vector2u textureSize = texture.getSize();
textureSize.x /= 9;
textureSize.y /= 4;

player.setTextureRect(sf::IntRect(0, 0, textureSize.x, textureSize.y));
player.setOrigin(textureSize.x/2, textureSize.y/2);
player.setPosition(w/2, h/2);
inventorySprite.setTextureRect(sf::IntRect(0, 0, 256, 256));
inventorySprite.setOrigin(256/2, 256/2);
inventorySprite.setPosition(w/2, h/2);

//Game loop

if(sf::Keyboard::isKeyPressed(sf::Keyboard::E))
        inventoryOpen = true;

if(inventoryOpen)
        window.draw(inventorySprite);
忽略玩家精灵。我对“InventorySpirite”有问题


这是我第一次发帖,所以如果我忘了包括一些内容,请原谅。

您需要做的就是设置与窗口宽度和高度相关的纹理位置。下面是伪代码:

texturePosition.X = (windowWidth - textureWidth) / 2;
texturePosition.Y = (windowHeight - textureHeight) / 2;

但它现在把它放在左上角。。。inventorySprite.setPosition((w-inventory.getSize().x)/2,(h-inventory.getSize().y)/2);这意味着它会将其放置在0,0位置。您需要调试此特定行,以了解它返回0的原因。我发现了问题。显然,纹理周围有一些空白,这导致计算错误。谢谢你的帮助