C++SFML精灵大小错误
C++ SFML sprite wrong size
我使用SFML在C++中编写了一个小程序,我自己也在执行,对Sprites、Textures、Texts等越来越熟悉。
问题是,当我点击1个文本(订单)时,它会弹出一个新窗口,其中有4行:
按剩余Xps 排序
按当前Xps 排序
按当前等级排序
返回
我的问题是,虽然按当前Xps排序会正常显示所有精灵,但按剩余Xps排序和按当前等级排序会显示大小错误的图标。
(我注意到Total Level
图标和列表的第一个图标总是大小错误)
图像:
http://i60.tinypic.com/2n84wmc.png
用正确的图像排序的列表
http://i58.tinypic.com/2agsp5f.png
如您所见,第一个图标和Total Level
旁边的图标大小错误。
列表本身已正确排序。
代码相当糟糕,但以下是操纵精灵和/或纹理的部分:
缩放功能:
void scaleSprite(int pixelsX, int pixelsY, sf::Sprite& sprite)
{
auto tex = sprite.getTexture();
if (!tex) return;
auto texSize = tex->getSize();
auto newTexSize = sf::Vector2u(pixelsX, pixelsY);
auto scaleX = newTexSize.x*1.00f/texSize.x;
auto scaleY = newTexSize.y*1.00f/texSize.y;
sprite.scale(scaleX, scaleY);
}
渲染窗口的代码(所有对精灵和纹理没有任何作用的代码都被提交,从加载开始,但加载的纹理都是正确的)
void showWindowOrdered(std::vector<SkillData>& vec, showOption option, sf::RenderWindow& parent, sf::VideoMode vMode,
const std::string& name, sf::Uint8 mode)
{
sf::Font font;
font.loadFromFile("fonts/runescape_chat_font.ttf");
std::vector<sf::Texture> texVec;
for(int i = 0; i < 27; ++i)
{
//load the textures
}
enFile.close();
std::vector<sf::Sprite> sprVec;
std::vector<sf::Text> textVec;
for(int i = 0; i < texVec.size(); ++i)
{
sf::Sprite spr;
spr.setTexture(texVec[i]);
scaleSprite(28, 28, spr);
spr.setPosition(1, i*28 + 1);
sprVec.push_back(spr);
sf::Text text;
text.setFont(font);
text.setColor(sf::Color::Yellow);
text.setPosition(35, (i)*(28) + 1);
text.setCharacterSize(25);
textVec.push_back(text);
}
std::vector<sf::Text> textValVec;
for(int i = 0; i < textVec.size(); ++i)
{
//...
}
//...
if (option == showOption::sortXps)
{
//sort for showOption::sortXps
}
else if (option == showOption::sortRank)
{
//sort for showOption::sortRank
}
else
{
//sort for showOption::sortXpsRemaining
}
for(int i = 0; i < sorted.size(); ++i)
{
auto texIndex = findIndexNames(sorted[i].name);
sprVec[i].setTexture(texVec[texIndex]);
sprVec[i].setPosition(1, (i)*28 + 1);
}
//...
sf::RenderWindow window(sf::VideoMode(offset+5, 800), "Sorted by" + s, sf::Style::Close | sf::Style::Titlebar);
while(window.isOpen())
{
auto pos = sf::Mouse::getPosition(window);
sf::Event e;
while(window.pollEvent(e))
{
//...
}
auto bgColor = sf::Color(4, 18, 27);
window.clear(bgColor);
for(auto&& a : textVec)
window.draw(a);
for(auto&& a : textValVec)
{
window.draw(a);
}
for(auto&& a : sprVec)
window.draw(a);
window.draw(goBack);
window.display();
}
}
问题可能出在?
for(int i = 0; i < sorted.size(); ++i)
{
auto texIndex = findIndexNames(sorted[i].name);
sprVec[i].setTexture(texVec[texIndex]);
sprVec[i].setPosition(1, (i)*28 + 1);
}
但如果没有这一点,我实际上无法对精灵的位置进行排序,除非手动移动所有精灵,但列表不是确定的
此外,我在此之前重新加载纹理,重新缩放精灵,它会创建相同的东西,甚至更糟(Total Level
旁边的第一个精灵和精灵更奇怪)
感谢您的帮助
阅读scale()
的文档,它说"这个函数乘以对象的当前比例,而setScale
会覆盖它。"可能你想要后者。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 绘制精灵会导致分割错误
- C++SFML精灵大小错误
- C 精灵未显示 - 也没有错误
- 尝试绘制精灵地图时出现 SFML 错误
- C++SFML精灵没有绘制,但是没有出现错误
- cocos2dx精灵设置位置错误
- 在cocos2dx v3.6中绘制精灵错误
- 如何使用精灵解析器获得错误位置