【发布时间】:2014-04-08 20:11:27
【问题描述】:
当我使用这个循环时,代码不能正常工作:
for(int i = 0; i < INTRO_LOGO_COUNT; i++)
{
char path_buffer[32]; // 32 = logo_xxx.png
sprintf(path_buffer, "data/texture/intro/logo_%d.png", i);
std::cout << path_buffer;
m_vecTextures.push_back(sf::Texture());
m_vecTextures.back().loadFromFile(path_buffer);
m_vecSprites.push_back(sf::Sprite());
m_vecSprites.back().setTexture(m_vecTextures[i]);
// Center
m_vecSprites.back().setPosition(
SCREEN_WIDTH / 2 - m_vecSprites.back().getLocalBounds().width / 2,
SCREEN_HEIGHT / 2 - m_vecSprites.back().getLocalBounds().height / 2);
m_vecSprites.back().setColor(sf::Color(255, 255, 255, 0)); // Opacity : 100%
}
纹理混合在一起,只有第二个纹理可以正常工作。 (INTRO_LOGO_COUNT 定义为 2) 并且第一个纹理具有有效的大小,但来自第二个纹理的图像。 第二个纹理具有有效的大小和图像。 但是经过 1 次更改(分成 2 个循环):
for( int i = 0; i < INTRO_LOGO_COUNT; i++ )
{
char path_buffer[32]; // 32 = logo_xxx.png
sprintf(path_buffer, "data/texture/intro/logo_%d.png", i);
std::cout << path_buffer;
m_vecTextures.push_back(sf::Texture());
m_vecTextures.back().loadFromFile(path_buffer);
}
for( int i = 0; i < INTRO_LOGO_COUNT; i++ )
{
m_vecSprites.push_back(sf::Sprite());
m_vecSprites.back().setTexture(m_vecTextures[i]);
// Center
m_vecSprites.back().setPosition(
SCREEN_WIDTH / 2 - m_vecSprites.back().getLocalBounds().width / 2,
SCREEN_HEIGHT / 2 - m_vecSprites.back().getLocalBounds().height / 2);
m_vecSprites.back().setColor(sf::Color(255, 255, 255, 0)); // Opacity : 100%
}
一切正常。 问题出在哪里?我尝试了不同的方法,但总是相同的效果。 谢谢!
【问题讨论】:
-
函数“setTexture”的声明是什么?
-
@DieterLücking 缓冲区有足够的空间,纹理由 SFML 加载。
-
@Matt setTexture 获取纹理指针,它来自 SFML API,在这里定义 github.com/LaurentGomila/SFML/blob/master/src/SFML/Graphics/…
-
用户然后请相应地标记您的问题,以便人们了解您正在使用哪些库...其次请澄清您的意思是纹理混合,只有第二个纹理正常工作。不清楚你的问题是什么