SFML 方块的偏移集

SFML square's off set

我是 sfml/c++ 的新手。我试图在棋盘上的第一个和最后一个位置显示一个黄色方块。我成功了,但我的正方形并没有完全重叠在棋盘的正方形上。它看起来有点不自然。这是我的纹理 class 和主要功能(带照片)。

主要功能:

#include <SFML/Graphics.hpp>
#include <SFML/Graphics/RectangleShape.hpp>
#include "TEXTURE.h"
#include "SOUND.h"


using namespace sf;


int main()
{
    TEXTURE tex;
    SOUND sou;

    RenderWindow Window(VideoMode(850,850),"JIMMY CHESS",Style::Titlebar|Style::Close);

    Window.setVerticalSyncEnabled(true);
    Window.setFramerateLimit(60);


        tex.setimages();
        tex.setpieces();

        while(Window.isOpen())
        {
            Event e;

            Vector2i POS = Mouse::getPosition(Window);

            while(Window.pollEvent(e))
            {

                if(e.type==Event::Closed)
                {
                    Window.close();
                }

                tex.liftpiece(e,POS);

            }

            tex.droppiece(POS);

            Window.clear();

            Window.draw(tex.s1);

            Window.draw(tex.yellown);
            Window.draw(tex.yellowo);

            for(int i=0; i<32; i++)
            {
                Window.draw(tex.s2[i]);
            }
            //layer 1 : chess board
            Window.display();

        }

    return 0;
}

texture.h :(未满texture.h)

Texture board,piece,yellow1,yellow2;
Sprite s1;
Sprite s2[32];
Sprite yellown,yellowo;

纹理的功能:

void TEXTURE::setimages()
{
    board.loadFromFile("C:\Users\JIMMY RATHWA\OneDrive\Desktop\DAIICT\CODE BLOCKS PROJECT\CHESS\images\chessboard.png");
    piece.loadFromFile("C:\Users\JIMMY RATHWA\OneDrive\Desktop\DAIICT\CODE BLOCKS PROJECT\CHESS\images\chesspiece.png");
    yellow1.loadFromFile("C:\Users\JIMMY RATHWA\OneDrive\Desktop\DAIICT\CODE BLOCKS PROJECT\CHESS\images\OLDsquare.png");
    yellow2.loadFromFile("C:\Users\JIMMY RATHWA\OneDrive\Desktop\DAIICT\CODE BLOCKS PROJECT\CHESS\images\OLDsquare.png");

    s1.setTexture(board);

    s1.setOrigin(425,425);
    s1.setPosition(425,425);

    yellown.setTexture(yellow1);
    yellowo.setTexture(yellow2);

    yellown.setTextureRect(IntRect(10,10,106,106));
    yellowo.setTextureRect(IntRect(10,10,106,106));

    piece.setSmooth(true);

    for(int i=0; i<32; i++)
    {
        s2[i].setTexture(piece);
    }
}

这是正方形的样子:

this yellow square isn't fitting into the chess board's square

所以请就此提出建议!感谢您的帮助,抱歉英语不好 ;)

首先,您不需要加载 4 个纹理文件,因为您正在加载同一个文件的两次 (OLDsquare.png)。对于黄色和黄色这两个 Sprites,您可以只使用具有相同 sf::Texture 的 setTexture()。(您甚至可以通过将所有纹理放在一个文件中并告诉 Sprites 从何处获取它们,使其只加载一个文件文件中的纹理 sprite.setTextureRect(),你已经为黄色和黄色精灵做了)

其次,我建议你不要使用sf::Sprite,而是使用sf::RectangleShape,因为除了RectangleShape更轻巧和更易于使用(尤其是在设置尺寸时)外,基本上没有区别).

第三,我觉得你的代码组织有点奇怪。你可能应该有一个棋盘 class 和一个棋子 class,它们有自己的方法,而不是有一个包含所有内容的“TEXTURE”class。

最后,我好像没看到你在哪里设置棋子的位置和黄色,也许是在 setPieces() 方法中?因为问题很可能来自这里。