OYUN GÜNDEMİ

Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

Metin2 client’ında tüm arayüzler (UI) belirli katmanlar (layer) üzerinde çalışır. Bu katmanlar hem çizim sırasını hem de tıklama önceliğini belirler.

picture Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

Temel layer yapısı:

  • GAME: Oyun dünyası etkileşimi (harita tıklamaları vb.)
  • UI_BOTTOM: Alt seviye UI elementleri (shop başlıkları gibi)
  • UI: Ana UI katmanı (inventory, karakter, messenger, pencereler)
  • TOP_MOST: Her zaman en üstte kalan UI (taskbar, sabit pencereler)
  • CURTAIN: Geçiş ekranları (login–character select arası gibi)

Render işlemi aşağıdan yukarı doğru ilerler. Input (mouse tıklama) işlemi ise yukarıdan aşağıya çalışır. Yani üst katmanlar önce kontrol edilir.

UI Window Yapısı

Bir UI window iki parçadan oluşur:

  • Python tarafı (ui.py)
  • C++ tarafı (wndMgr)

Window oluşturulduğunda önce Python objesi oluşturulur, ardından C++ tarafında karşılığı register edilir.

Bu iki yapı birbirine handle sistemi ile bağlanır:

  • Python tarafı → C++ window handle tutar
  • C++ tarafı → Python callback referansı tutar

Bu yapı sayesinde input ve render olayları iki tarafta senkron çalışır.

Parent – Child Sistemi

UI elementleri birbirine parent-child ilişkisi ile bağlanır.

image-297 Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

SetParent() kullanıldığında:

  • Window mevcut parent’ından çıkarılır
  • Yeni parent’ın child listesine eklenir

Bu işlemin önemli sonucu şudur:

Child list sırası = Z-order (çizim önceliği)

Yani son eklenen child her zaman üstte render edilir.

Bu yüzden UI sıralama problemleri genellikle yanlış parent kullanımından kaynaklanır.

Window Picking (Tıklama Sistemi)

Mouse hareketi sırasında sistem hangi window’un seçileceğini belirler.

image-296 Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

Bir window’un pick edilebilmesi için:

  • Mouse pozisyonu window içinde olmalı
  • Window visible olmalı
  • not_pick flag kapalı olmalı
  • Parent sınırları içinde bulunmalı

Önemli nokta:

Tüm UI elementleri mantıksal olarak dikdörtgen (square) kabul edilir. Görsel olarak yuvarlak olsa bile hitbox kare şeklindedir.

Bu nedenle UI tıklama hatalarının büyük kısmı hitbox ve parent sınırlarından kaynaklanır.

Memory Management ve Reference Count

Python tarafında tüm objeler reference count sistemi ile yönetilir.

image-295 Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

Temel mantık:

  • Obje oluşturulur → ref count = 1
  • Başka bir değişkene atanır → ref count artar
  • Referanslar silinirse → ref count azalır
  • Ref count = 0 → garbage collector objeyi siler

UI tarafındaki kritik problem

UI sistemlerinde en sık görülen sorun reference cycle (döngüsel referans) oluşmasıdır.

Örnek senaryo:

  • Window bir button oluşturur
  • Button parent’a referans tutar
  • Parent da button’a referans tutar
  • Event sistemi self referansı ekler

Bu durumda:

Obje referans sayısı asla 0 olmaz → memory leak oluşur

Sonuç:

  • Silinmeyen window’lar
  • Warp sonrası biriken UI instance’ları
  • RAM artışı
  • Çift UI oluşumları (inventory, messenger vb.)

Weak Reference (Proxy Kullanımı)

Bu problemi çözmek için weak reference kullanılır.

image-294 Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

Weak reference:

  • Reference count artırmaz
  • Döngüsel referansları kırar
  • Objenin garbage collector tarafından silinmesine izin verir

Bu sistem özellikle event bağlamalarında kritik öneme sahiptir.

Metin2 client yapısında bu mantık __mem_func__ sistemi ile uygulanır.

OnUpdate ve OnRender Kullanımı

UI fonksiyonları iki ana döngüde çalışır:

OnUpdate

  • Logic işlemleri
  • Hesaplamalar
  • Pozisyon güncellemeleri
  • Veri senkronizasyonu

OnRender

  • Ekrana çizim işlemleri
  • DirectX render çağrıları

Kritik kural:

  • Render işlemleri OnUpdate içine yazılmamalıdır
  • Ağır hesaplamalar OnRender içinde yapılmamalıdır

Yanlış kullanım:

  • FPS drop
  • UI lag
  • Client freeze

Event Callback Return Mantığı

Bazı event fonksiyonları return değeri bekler.

image-293-1024x571 Metin2 UI Geliştirmede Kritik Noktalar ve Deneyim Notları

Örnek:

  • ESC tuşu ile window kapatma

Eğer doğru return verilmezse:

  • Event zinciri bozulur
  • Alt layer’lara yanlış event geçebilir
  • Beklenmeyen crash durumları oluşabilir

Bu nedenle event handler fonksiyonlarında return değerleri dikkatli yönetilmelidir.

UI sistemi Metin2 client yapısında en hassas alanlardan biridir.

En sık görülen problemler:

  • Yanlış layer kullanımı
  • Parent-child hataları
  • Memory leak (reference cycle)
  • Yanlış event binding
  • Update/Render karışıklığı

Bu yapı doğru kurulduğunda client çok daha stabil ve performanslı çalışır.

Paylaş :

Bu Kategoriden

Metin2 Gelişmiş Chat Bot Sistemi: Sunucunuzun Sohbetini Canlandırın 31.05.2026 Metin2 Cinsiyet Değiştirme Quest Sistemi: Sorunsuz Çalışan Güncel Kod 09.05.2026 Metin2 sistem ekleme aracı ile source dosyalarına otomatik kod uygulama ve patch sürecini gösteren arayüz görseli. Metin2 Sistem Ekleme Aracı: Kodları Otomatik Uygulayan Yardımcı Program 09.05.2026 Metin2 ruh taşı scripti ile Grand Master beceri geliştirme sistemini anlatan Seungryong Vadisi görseli. Metin2 Ruh Taşı Scripti: Tek Seferde Çoklu Grand Master Eğitimi 06.05.2026
Okuma Önerisi

Benzer rehberlere ve güncel oyun içeriklerine göz atabilirsin.

Okumaya Devam Et

5 Haziran 2026 Metin2 PVP sunucuları 5 Haziran 2026 Metin2 PVP Sunucuları | İnziva2, Hilal2, ZeroMT2, Valerya2, Arvis2 01.06.2026 Pokemon Go Haziran 2026 etkinlikleri: Frigibax Community Day duyuru görseli Pokemon Go Haziran 2026 Etkinlikleri: Frigibax Community Day, Raid Boss’lar ve Daha Fazlası 01.06.2026 Forza Horizon 6 en iyi arabalar rehberi: McLaren P1 ıslak yolda hızla ilerliyor Forza Horizon 6 En İyi Arabalar: Her Yarış Tipine Göre Öneriler 01.06.2026 Forza Horizon 6 Tokyo Tower konumu: Beyaz bir araç Tokyo Tower’ın dibinde park halinde Forza Horizon 6 Tokyo Tower Nerede? Fotoğraf Görevi Konumu 01.06.2026

Hızlı Geçiş

Rehber Haber Önizleme Mobil Oyun