OnurBoyla 1
OnurBoyla
noisiv 1
noisiv
Manwe Work 1
Manwe Work
farkmt2official 1
farkmt2official
mavzermete 1
mavzermete
dreamstone 1
dreamstone
Fethi Polat 1
Fethi Polat
Bvural41 1
Bvural41
Hikaye Ekle

Cevaplanmadı İTem arama sistemi efect hatası

  • Konuyu başlatan Konuyu başlatan safsag
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 3
  • Görüntüleme Görüntüleme 77

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!

İkarus ofline Shop için item arama sistemi kurdum
Sistemin çalışma mantığı f5 tuşuna basınca bir panel açılıyor bu panele itemin ismini yazıyoruz ve o haritadaki hangi pazarlarda o item den var ise o pazarların üstünde target oku beliriyor
Yaşadığım sorun ise şöyle
Panele itemin adını yazıp ara dediğimde itemin olduğu pazarın üstünde target oku bir defa düzgünce renderlenip ardından bir anda defalarca renderleniyor bunu nasıl tek sefer renderlenmesi ini ayarlarım
 
Bu sorun genellikle OnUpdate veya sürekli çalışan bir döngü (render loop) içerisinde kontrolsüz bir şekilde "ok oluşturma" fonksiyonunun çağrılmasından kaynaklanır. Sistem, itemi bulduğu her karede (frame) yeni bir ok objesi oluşturmaya çalışıyor olabilir.
Sorunu çözmek için Bayrak (Flag) mantığını veya Varlık Kontrolü yöntemini kullanmalısın. İşte uygulayabileceğin adımlar:
1. Bayrak (Flag) Mantığı ile Kontrol
Arama butonuna basıldığında bir değişkeni True yapıp, ok render edildikten sonra bunu False çekerek döngüyü kırabilirsin.

# Başlangıçta değişkeni tanımla
self.isTargetCreated = False

# Ara butonuna basıldığında
def SearchItem(self):
self.isTargetCreated = False # Yeni arama için sıfırla
# ... arama kodları ...
if item_found and not self.isTargetCreated:
self.__CreateTargetArrow(vid)
self.isTargetCreated = True

2. Mevcut Target Okunu Temizleme
Yeni bir ok oluşturmadan önce, eğer ekranda halihazırda bir ok varsa onu sildirmen gerekir. Aksi takdirde üst üste binen onlarca ok hem görüntüyü bozar hem de FPS düşürür.
def __CreateTargetArrow(self, vid):
# Eğer daha önceden bir target varsa onu kapat/sil
if self.target_vid != 0:
background.DeleteTarget(self.target_vid)

# Yeni targetı oluştur
background.RegisterTarget(vid, "Search_Target")
self.target_vid = vid

3. Update Döngüsünden Çıkarın​


Eğer ok oluşturma fonksiyonun OnUpdate (Python tarafı) veya Update (C++ tarafı) altındaysa, bu fonksiyon saniyede 60-144 kez çalışır. Ok oluşturma işlemini sadece "Ara" (Search) butonuna basıldığı an çalışan fonksiyonun içine (Event) yazmalısın.


4. C++ Tarafında Pointer Kontrolü (Eğer Source'tan yapıyorsan)​


Eğer sistemi C++ tarafında InstanceBase üzerinden yönetiyorsan, efektin (arrow) ekli olup olmadığını kontrol eden bir if bloğu ekle:

if (!pkInst->HasTargetArrow()) {
pkInst->CreateTargetArrow();
}

girintilerde hata olabilir
 

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

Geri
Üst