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() 方法中?因为问题很可能来自这里。
我是 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() 方法中?因为问题很可能来自这里。