我使用SFML在C++中編寫一個小程序,執行自己並使Sprites,Textures,Texts和stuff變得更加舒適。C++ SFML sprite錯誤的大小
問題是,當我點擊1個文本(訂單),它會彈出新窗口,其中有4條線:
訂購剩餘的XPS
排序按當前XPS
訂單由目前的排名
返回
我的問題是,雖然通過目前的XPS訂單顯示所有的精靈一般,因爲它應該排序Remainin g Xps和當前秩序排列顯示大小錯誤的圖標。
(我注意到,名單的Total Level
圖標,第一個圖標總是錯的大小)
的圖像:
http://i60.tinypic.com/2n84wmc.png
列表進行排序以正確的圖像
http://i58.tinypic.com/2agsp5f.png
如您所見,第一個圖標和旁邊的圖標大小錯誤。
該列表本身排序正確。
的代碼是非常糟糕的,但這裏有操縱精靈和/或紋理部分:
功能縮放:
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);
}
代碼呈現的窗口(即沒有做任何事情的所有代碼與精靈和紋理是中省略,apprart加載,加載但紋理是正確的)
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
甚至更怪異)
謝謝您的幫助
我試了兩次,結果相同 – Creris