Я начинаю работать с DirectX и пытаюсь сделать 2 анимированных спрайта одновременно. Я превращаю спрайт-листы в текстуры, а затем устанавливаю для них frameCount, используя его соотношение сторон в качестве ориентира
D3D11_TEXTURE2D_DESC desc;
texture2D->GetDesc(&desc);
m_width = desc.Width;
m_height = desc.Height;
Это 2 спрайт-листа, как вы можете видеть, один из них имеет 4 кадра и соотношение сторон 4: 1, тогда как другой имеет 3 и соответствующее соотношение сторон
Теперь кажется, что когда я назначаю текстуру своему классу спрайта, мой менеджер назначает правильную текстуру (или ID3D11ShaderResourceView
), но он дает значения размера от другого, что приводит к тому, что они анимируются неправильно (первый анимируется за 4 шага, а второй — за три).
Этот код получает текстуру
Texture* ResourceManager::GetTextureByName(char* textureName)
{
for(int i = 0; i < (int)m_textures.size(); ++i)
{
ResourceTexture* resourceTexture = m_textures[i];
string resourceTextureName = resourceTexture->GetName();
//Bit that matters
if(!strcmp(textureName, resourceTextureName.c_str()))
{
return resourceTexture->GetTexture();
}
}
return NULL;
}
Является texture2D->GetDesc
не работает, как я собираюсь? Любые направления приветствуются!
Редактировать:
Вот как я настраивал текстуры (прямо перед тем, как получить их ширину и высоту)
//Just modifying the texture name to the right format
wstring tempName(fileName);
m_name = string(tempName.begin(), tempName.end());
//Modifying texture name (From original loaded textures names)
int pos = m_name.find_last_of("/");
if(pos >= 0)
{
m_name = m_name.substr(pos + 1, m_name.length());
}
m_name = m_name.substr(0, m_name.find_last_of("."));
//load the texture
result = CreateWICTextureFromFile(device, fileName, NULL, &m_texture, NULL);
Задача ещё не решена.
Других решений пока нет …