🤔 Para Refletir :
"Todos projetos não são unicamente meu, pois cada sugestão e critica, recursos e sugestões fazem me ver que ele leva um pedaço de cada pessoa nele"
- riquecamarg0

Magia negra afetando meu código?

Estado
Tópico fechado. Não é possível fazer postagens nela.

Kaw

The Righteous
Membro
Membro
Lord, if the day comes when I fly through the heavens. I shall approach thee!
Juntou-se
09 de Janeiro de 2017
Postagens
620
Bravecoins
193
O código era pra fazer uma contagem decrescente 100 até 0 e quando chegasse à 0(ou menos) ele resetava pra 100. Mas ele tá fazendo exatamente o contrário.

Vou deixar o código aqui comentando o que eu usei e o que eu não usei:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ResourceRoot : MonoBehaviour {
 
    public BaseProperties properties;
 
    public BoostType boostType;  //Não é usado
    public int ThisBaseBoost;  //Definido na unity = 10
    private int globalBoost, othersBoost = 0;  // globalBoost é definido no código, consiste de (ThisBaseBoost + othersBoost)
    public int actualBP; //Valor que muda com o tempo pelo código
    public delegate void FullBaseEventHandler(); //Não é usado
    public event FullBaseEventHandler OnFullResource;  //Não é usado
 
    // Use this for initialization
    void Start ()
    {
        properties.Initialize();   //Ignora esse método aqui
    }
 
    private void Update()
    {
        globalBoost = ThisBaseBoost + othersBoost;  //globalBoost = 10 (10 do ThisBaseBoost + 0 do othersBoost)
        BoostGen(globalBoost); //Inicia a função passando 10 como parâmetro
    }
 
 
    public void BoostCreate(BoostType boostType)
    {
        //Não implementado
    }
 
    public int BoostGen(int boostPerSec)
    {
        if (actualBP >= 1)
        {
            actualBP -= boostPerSec;
        }
        else if (actualBP <= 0)
        {
            BoostCreate(boostType);
            actualBP = 100;
 
            //if (OnFullResource != null)
            //{
            //    OnFullResource();
            //}
        }
 
        return boostPerSec;
    }
}

O que eu quero saber é o porquê dele estar fazendo o oposto do que eu tentei fazer...
 
O metodo BoostGen retorna mas não tem ninguém para receber o valor de retorno, você não implementou totalmente sua lógica. Dê uma debugada para ver o fluxo do código.
 
HermesPasser comentou:
O metodo BoostGen retorna mas não tem ninguém para receber o valor de retorno, você não implementou totalmente sua lógica. Dê uma debugada para ver o fluxo do código.

Mesmo que ninguém usasse o valor de retorno, o tópico estava perguntando sobre o trecho actualBP -= boosPerSec; o qual deveria diminuir 10 por segundo do actualBP, mas no editor da Unity estava mostrando o contrário, na verdade aparentava estar aumentando 10 por segundo.

Na verdade o problema já foi resolvido, era simplesmente que esses 10 que estava sendo subtraido do actualBP não estava limitado à 1 frame, na verdade ele executava dezenas de vezes no mesmo segundo. Assim ele estava tirando mais de 100 do actualBP ao invés de 10. Ele estava retirando tão rápido que no editor da Unity aparentava estar aumentando.

Pra resolver foi simplesmente multiplicar pelo deltaTime pra manter o intervalo entre um e outro fixado em 1 FPS.

De qualquer forma, valeu pela resposta  :Okay_fix:

Edit:

Inclusive, aqui o código final com o "problema" já concertado:

Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ResourceRoot : MonoBehaviour {
 
    public BaseProperties properties;
 
    public BoostType boostType;  //Não é usado
    public float ThisBaseBoost;  //Definido na unity = 10
    private float globalBoost, othersBoost = 0.0f;  // globalBoost é definido no código, consiste de (ThisBaseBoost + othersBoost)
    public float actualBP; //Valor que muda com o tempo pelo código
    public delegate void FullBaseEventHandler(); //Não é usado
    public event FullBaseEventHandler OnFullResource;  //Não é usado
 
    // Use this for initialization
    void Start ()
    {
        properties.Initialize();   //Ignora esse método aqui
    }
 
    private void Update()
    {
        globalBoost = ThisBaseBoost + othersBoost;  //globalBoost = 10 (10 do ThisBaseBoost + 0 do othersBoost)
        BoostGen(globalBoost); //Inicia a função passando 10 como parâmetro
    }
 
 
    public void BoostCreate(BoostType boostType)
    {
        //Não implementado
    }
 
    public void BoostGen(float boostPerSec)
    {
        if (actualBP >= 0.01f)
        {
            actualBP -= boostPerSec * Time.deltaTime;
        }
        else
        {
            BoostCreate(boostType);
            actualBP = 100.0f;
 
            //if (OnFullResource != null)
            //{
            //    OnFullResource();
            //}
        }
    }
}
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior