xranzei 1
xranzei
Bvural41 1
Bvural41
D 1
delimuratt
ShadowFon 1
ShadowFon
shrpnl 1
shrpnl
DEVLOPER 1
DEVLOPER
Manwe Work 1
Manwe Work
Agora Metin2 1
Agora Metin2
Karan2offical 1
Karan2offical
mavzermete 1
mavzermete
M 1
m2referencee
Fethi Polat 1
Fethi Polat
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

hasanmacit™

emekli mareşal
TC Kimlik Numarası Doğrulanmış Üye
TM Üye
Katılım
14 Eki 2021
Konular
279
Mesajlar
1,455
Çözüm
12
Online süresi
4mo 28d
Reaksiyon Skoru
1,509
Altın Konu
5
TM Yaşı
4 Yıl 8 Ay 6 Gün
Başarım Puanı
227
MmoLira
3,445
DevLira
30
Ticaret - 0%
0   0   0

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();
    }
Paylaşım için teşekkürler.
 

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

Geri
Üst