-TuRKuaZ- 1
-TuRKuaZ-
farkmt2official 1
farkmt2official
Sevdamsın 1
Sevdamsın
mavzermete 1
mavzermete
xranzei 1
xranzei
Best Studio 1
Best Studio
Bvural41 1
Bvural41
Hikaye Ekle

CAniImageBox Yüklemesini Optimize Etmek

  • Konuyu başlatan Konuyu başlatan hasanmacit™
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 9
  • Görüntüleme Görüntüleme 2K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

picture.gif


Selam beyler,

Bildiğimiz gibi, bir ani-image içinde çok fazla resim varsa, yüklenmesi gerçekten yavaş olabilir ve oyunun bir an için donmasına neden olabilir. Bu bizi gerçekten sınırlıyor çünkü kullanıcı deneyimi üzerinde kötü bir etkisi olacağından daha uzun bir görüntü dizisi kullanamıyoruz.

Bazı öğreticilerimizi birleştirerek 126 görüntüden oluşan bir dizi oluşturdum, işte eski (sol) ve yeni (sağ) sürümü gösteren bir karşılaştırma GIF'i.
[CODE title="EterPythonLib/PythonWindow.h"]arat

std::vector<CGraphicExpandedImageInstance*> m_ImageVector;

altına ekle

std::queue<std::string> m_ImageFileNames;
std::function<void(CGraphicExpandedImageInstance*)> m_SetRenderingRect, m_SetRenderingMode, m_SetDiffuseColor;[/CODE]

[CODE title="EterPythonLib/PythonWindow.cpp"]arat ve bu kod ile değiştir

void CAniImageBox::AppendImage(const char * c_szFileName)
{
m_ImageFileNames.push(c_szFileName);
}

tekrar arat

CAniImageBox::OnUpdate

kodun içine ekle

if (!m_ImageFileNames.empty())
{
const std::string& stFileName = m_ImageFileNames.front();

CResource* pResource = CResourceManager::Instance().GetResourcePointer(stFileName.c_str());
if (pResource->IsType(CGraphicImage::Type()))
{
CGraphicExpandedImageInstance* pImageInstance = CGraphicExpandedImageInstance::New();
pImageInstance->SetImagePointer(static_cast<CGraphicImage*>(pResource));

if (pImageInstance->IsEmpty())
{
CGraphicExpandedImageInstance::Delete(pImageInstance);
}
else
{
pImageInstance->SetPosition(m_rect.left, m_rect.top);

if (m_SetRenderingRect)
m_SetRenderingRect(pImageInstance);

if (m_SetRenderingMode)
m_SetRenderingMode(pImageInstance);

if (m_SetDiffuseColor)
m_SetDiffuseColor(pImageInstance);

m_ImageVector.push_back(pImageInstance);
}
}

m_ImageFileNames.pop();
}

arat ve değiştir

void CAniImageBox::SetRenderingRect(float fLeft, float fTop, float fRight, float fBottom)
{
m_SetRenderingRect = std::bind(&CGraphicExpandedImageInstance::SetRenderingRect, std::placeholders::_1, fLeft, fTop, fRight, fBottom);
std::for_each(m_ImageVector.begin(), m_ImageVector.end(), m_SetRenderingRect);
}

arat ve değiştir

void CAniImageBox::SetRenderingMode(int iMode)
{
m_SetRenderingMode = std::bind(&CGraphicExpandedImageInstance::SetRenderingMode, std::placeholders::_1, iMode);
std::for_each(m_ImageVector.begin(), m_ImageVector.end(), m_SetRenderingMode);
}

arat ve değiştir

void CAniImageBox::SetDiffuseColor(float fR, float fG, float fB, float fA)
{
m_SetDiffuseColor = std::bind(&CGraphicExpandedImageInstance::SetDiffuseColor, std::placeholders::_1, fR, fG, fB, fA);
std::for_each(m_ImageVector.begin(), m_ImageVector.end(), m_SetDiffuseColor);
}

arat ve değiştir

void CAniImageBox::OnChangePosition()
{
std::for_each(m_ImageVector.begin(), m_ImageVector.end(),
std::bind(&CGraphicExpandedImageInstance::SetPosition, std::placeholders::_1, m_rect.left, m_rect.top));
}[/CODE]

ve bu kadar. İyi forumlar.

Distraught'a Teşekkürler.
 

En Çok Reaksiyon Alan Mesajlar

Bu hali eksik, kullananlar sorun yaşar. ClearImages fonksiyonu da düzenlenmeli.

C++:
    void CAniImageBox::ClearImages()
    {
        while (!m_ImageFileNames.empty())
            m_ImageFileNames.pop();

        for_each(m_ImageVector.begin(), m_ImageVector.end(), CGraphicExpandedImageInstance::DeleteExpandedImageInstance);
        m_ImageVector.clear();
    }

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst