[C++] Pencere Sürükleme Sınırı

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 35

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba, bu küçük düzenleme oyun içindeki bütün pencerelerin (envanter,pazar ekranı,arkadaş listesi vs.) sadece client boyutu içerisinde sürüklenmesini sağlar.
Kısacası taşma durumunu ortadan kaldırır. Avantaj sağladığı gibi dezavantajları da olabilir. Yine de kullanmak isteyenler olabilir.


Görseller:

Before
sBEs6fy.gif



After
hDYGjLa.gif







Client Src/EterPythonLib/PythonWindowManager.cpp açın ve aratın:

Kod:
pWin->SetPosition(x, y);                 pWin->OnMoveWindow(x, y);

Üstüne ekleyin:

Kod:
if (x + pWin->GetWidth() > UI::CWindowManager::Instance().GetScreenWidth())                 {                     x = UI::CWindowManager::Instance().GetScreenWidth() - pWin->GetWidth();                 }                 else if (x < 0)                 {                     x = 0;                 }                            if (y + pWin->GetHeight() > UI::CWindowManager::Instance().GetScreenHeight())                 {                     y = UI::CWindowManager::Instance().GetScreenHeight() - pWin->GetHeight();                 }                 else if (y < 0)                 {                     y = 0;                 }

C++ ile Metin2 Pencere Sürükleme Sınırı Uygulaması
Metin2 özel sunucularında kullanıcı arayüzü geliştirme sürecinde, pencere kontrolü ve kullanıcı deneyimi çok önemlidir. Özellikle oyun içi pencerelerin sürüklenebilir olması, oyuncu memnuniyetini artırır. Ancak bazen bu pencerelerin belirli sınırlar dışına taşmaması gerekir. Bu yazıda, C++ dilini kullanarak bir pencerenin belirli bir alana kadar sürüklenebilmesini nasıl sağlayacağımızı detaylı olarak ele alacağız.

Pencere Sürükleme Mekanizması Nedir?
Oyun geliştirme süreçlerinde, kullanıcıların bazı pencereleri (örneğin envanter, beceri paneli, mini harita gibi) sürükleyerek konum değiştirmesi sağlanır. Bu, kullanıcı dostu bir arayüz sağlar. Ancak bu pencerelerin ekran dışına taşmaması veya belirli alanlarla sınırlı kalması da önemlidir. Aksi takdirde kullanıcı deneyimi olumsuz etkilenebilir.

Sınırlandırma Neden Gerekli?
Metin2 özel sunucularında geliştirilen GUI (Graphical User Interface) sistemlerinde, pencere konumları genellikle ekran koordinatlarına göre belirlenir. Eğer bir pencere sınırsız şekilde sürüklenebilirse, kullanıcı tarafından ekran dışına taşınamaz hale getirilebilir. Bu durumda pencereyi tekrar erişilebilir yapmak zorlaşabilir. Bu nedenle, pencere konumu belirli sınırlar içinde kalmalıdır.

C++ ile Pencere Sınırı Uygulaması
C++ tabanlı Metin2 istemci geliştirme süreçlerinde, pencere sürükleme işlemi genellikle 'mouse move' olayları ile yönetilir. Pencere sürükleme sırasında, mevcut koordinatlara göre yeni konum hesaplanır. Bu yeni konumun belirli bir sınıra göre kontrol edilmesi gerekir. Örneğin:

Sınır Tanımı: Pencerenin sol üst köşesinin x, y koordinatları belirli değerlerin altında veya üstünde olmamalıdır. Aynı zamanda sağ alt köşesi de ekran sınırlarını aşmamalıdır.

Kod Yapısı Örneği:
Aşağıda basit bir örnek verilmiştir. Bu örnekte, pencere sürükleme sırasında X ve Y ekseninde belirli sınırlar içinde kalacak şekilde ayarlanmıştır:

int newX = max(min(pencereX, maksimumX), minimumX);
int newY = max(min(pencereY, maksimumY), minimumY);

Bu kod parçası ile pencere, belirlenen sınırlar arasında hareket ettirilebilir. Burada min ve max fonksiyonları, pencere konumunun belirtilen aralıklar içinde kalmasını sağlar.

Metin2 Uygulamalarında Özel Durumlar
Metin2 özel sunucularında geliştirilen sistemlerde, genellikle UIScript ve PY dosyaları ile birlikte C++ tabanlı modifikasyonlar yapılır. Pencere sürükleme sınırları da bu yapıya entegre edilerek daha esnek hale getirilebilir. Örneğin, belirli pencerelerin sadece belirli ekran bölgelerinde hareket etmesi sağlanabilir.

Python ile Entegrasyon[/COORD]
Python GUI sistemleri ile birlikte çalışan C++ kodları sayesinde, hem görsel hem de mantıksal sınırlar daha kolay uygulanabilir. Özellikle Py Root sistemlerinde, pencere sınırları dinamik olarak değiştirilebilir. Bu, Metin2 geliştiricileri için büyük bir esneklik sağlar.

Sonuç
C++ ile Metin2 özel sunucularında pencere sürükleme sınırlarını tanımlamak, kullanıcı deneyimini ciddi anlamda iyileştirir. Doğru sınırlar belirlendiğinde, kullanıcılar tarafından pencere kaybı yaşanmaz. Ayrıca bu tür kontroller, oyun içi sistemlerin daha profesyonel görünmesini sağlar. Bu tür detaylara dikkat eden sunucular, oyuncular tarafından daha fazla tercih edilir.


Dragging Window Boundary with C++ in Metin2
In the process of developing user interfaces for Metin2 private servers, window control and user experience are very important. Particularly, allowing in-game windows to be draggable increases player satisfaction. However, sometimes these windows need to stay within specific boundaries. In this article, we will explain in detail how to allow a window to be dragged only up to certain limits using C++.

What is Window Dragging Mechanism?
In game development processes, users are often allowed to drag certain windows (e.g., inventory, skill panels, minimap, etc.) to change their position. This creates a user-friendly interface. However, it's also important that these windows do not go beyond certain areas. Otherwise, the user experience can be negatively affected.

Why Is Limitation Necessary?
In C++ based Metin2 client development, window positions are usually determined based on screen coordinates. If a window can be dragged without limits, it may become unreachable by being moved off-screen. In such cases, making the window accessible again becomes difficult. Therefore, the window position must remain within certain boundaries.

Implementing Window Boundaries with C++
In C++ based Metin2 client development, window dragging operations are usually managed through 'mouse move' events. During dragging, the new position is calculated based on current coordinates. The new position must be checked against certain limits. For example:

Boundary Definition: The x, y coordinates of the top-left corner of the window should not go below or above certain values. Additionally, its bottom-right corner should not exceed screen boundaries.

Code Structure Example:
Below is a simple example. In this example, the window remains within specified bounds along the X and Y axes during dragging:

int newX = max(min(windowX, maxX), minX);
int newY = max(min(windowY, maxY), minY);

With this code snippet, the window can be moved within the defined range. Here, the min and max functions ensure that the window position stays within the specified limits.

Special Cases in Metin2 Applications
In systems developed for Metin2 private servers, modifications are often made using both UIScript and PY files alongside C++. Window dragging limits can be integrated into this structure to make them more flexible. For example, certain windows can be restricted to move only within specific screen regions.

Integration with Python
Thanks to C++ codes working together with Python GUI systems, visual and logical boundaries can be implemented more easily. Particularly in Py Root systems, window limits can be changed dynamically, providing great flexibility for Metin2 developers.

Conclusion
Defining window dragging boundaries with C++ in Metin2 private servers significantly improves user experience. When proper limits are set, users won't lose track of windows. Additionally, such controls make in-game systems appear more professional. Servers that pay attention to such details are preferred more by players.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt