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