hasancansaglam

Yeni üye
26 Mar 2017
25
1
0
(34) İstanbul Anadolu
Stamina sistemini event tick e bağladım koştuğunda delay ekleyip (örn : 0.1sn) sürekli staminadan 1 eksiltiyor. Kasan bir haritada koşma 5 sn sürerken normal kasmayan bir haritada 1 sn sürüyor.

Kasmayınca World delta seconds 0.01 kasınca 0.045

Bunu nasıl düzeltebilirim ? :)
 
hasancansaglam' Alıntı:
Stamina sistemini event tick e bağladım koştuğunda delay ekleyip (örn : 0.1sn) sürekli staminadan 1 eksiltiyor. Kasan bir haritada koşma 5 sn sürerken normal kasmayan bir haritada 1 sn sürüyor.

Kasmayınca World delta seconds 0.01 kasınca 0.045

Bunu nasıl düzeltebilirim ? :)

Dediğin event tick olayı her bir çerçevenin geçiş aralığındaki süreyi hesaplar. Bir timer oluşturarak veya Timeline boyunca devam eden sabit sürede belirtilen değeri azaltabilirsiniz. (Lerp de kullanabilirsiniz. )
 
DeltaSeconds amacı tam da budur.

Diyelim ki karakter koştuğu zaman 5sn de tükenmesi gereken bir stamina tasarlayalım. Stamina'nın tamamı 100 birim olsun. Bu durumda bir koşunun saniyede 20 stamina tüketmesi gerekir. Eğer bir frame 0.01 sn alıyorsa o framede tükenmesi gereken stamina miktarı 20 x 0.01 = 0.2 birimdir. Sonuç olarak her frame: 1 saniyede tükenmesi gereken ile geçen sürenin çarpımı kadardır.

// C++ Decleration (Header)
Kod:
float Stamina = 100;

// C++ Definition (Source)
Kod:
if (IsRunning == true)
{
  stamina -= 20 * DeltaSeconds;
  if (stamina <= 0)
  {
    OnStaminaRunOut(); // staminanın bittiğini bir event yada delege ile yayınla...
  }
}

Blueprint üzerinde de Tick eventi üzerinde, eğer koşuyorsa; stamina değerinden; 1saniyede tükenmesi gereken stamina değeri ile DeltaSeconds değerinin çarpımını çıkarmanız ve küçük eşit 0 durumunu kontrol etmeniz gerekir.

Delay kullanmamanızı öneririm.
 
cahitburak' Alıntı:
DeltaSeconds amacı tam da budur.

Diyelim ki karakter koştuğu zaman 5sn de tükenmesi gereken bir stamina tasarlayalım. Stamina'nın tamamı 100 birim olsun. Bu durumda bir koşunun saniyede 20 stamina tüketmesi gerekir. Eğer bir frame 0.01 sn alıyorsa o framede tükenmesi gereken stamina miktarı 20 x 0.01 = 0.2 birimdir. Sonuç olarak her frame: 1 saniyede tükenmesi gereken ile geçen sürenin çarpımı kadardır.

// C++ Decleration (Header)
Kod:
float Stamina = 100;

// C++ Definition (Source)
Kod:
if (IsRunning == true)
{
  stamina -= 20 * DeltaSeconds;
  if (stamina <= 0)
  {
    OnStaminaRunOut(); // staminanın bittiğini bir event yada delege ile yayınla...
  }
}

Blueprint üzerinde de Tick eventi üzerinde, eğer koşuyorsa; stamina değerinden; 1saniyede tükenmesi gereken stamina değeri ile DeltaSeconds değerinin çarpımını çıkarmanız ve küçük eşit 0 durumunu kontrol etmeniz gerekir.

Delay kullanmamanızı öneririm.

Çok teşekkür ederim :)