增量游戏的冷却计时器

问题描述 投票:0回答:1

我正在尝试制作一款统一的游戏(使用c#),我想要完成的任务几乎与冒险资本家游戏中完成的任务相同。当您点击其中一家公司时,会出现一个“冷却”计时器。我把它放在报价单中,因为在计时器结束之前你不会得到钱。我查看了其他建议的问题并设法创建了下面的代码

public UnityEngine.UI.Text showCurrency;
public int money = 0;
public int moneyPerClick = 1;
public float timeToCollect = 3.0F;
private float timeStamp;
private bool buttonClicked;    

void Start()
{
    timeStamp = Time.time + timeToCollect;
}

void Update()
{
    showCurrency.text = "Money: " + money;
    if(buttonClicked && timeStamp > 0.0F)
    {
        timeStamp -= Time.time;
            
    }
    if (timeStamp == 0.0F)
        {
            money += moneyPerClick;
        }
}

public bool Clicked()
{
    buttonClicked = true;
    return buttonClicked;        
}

我目前收到 1 个错误,但在我添加

showCurrency.text = "Money: " + money;
部分后开始发生这种情况。所以需要解决这个问题。

据我所知,代码不起作用。我没有与图像填充一起使用的冷却效果(这将是另一天的问题)所以我实际上无法看到计时器是否正在倒计时,但我想我可以有一个 Debug.Log 并有一个system.out 行来测试这一点。另一件不起作用的事情是我没有在屏幕上显示新的金额。

这段代码是初学者对如何布局的最佳猜测,这就是我现在所处的位置。如果看起来我使用的方法是错误的,那可能是因为我就是这样。任何进一步的信息至少能指出我正确的方向将不胜感激。

c# unity-game-engine timer
1个回答
0
投票

Unity 的 Update() 方法每帧都会被调用。因此,如果您将游戏设置为 30 FPS,则 Update() 每秒将被调用 30 次。

首先,

timeStamp -= Time.time
从每一帧存储的时间中减去当前时间(它会变得非常小,非常快)。正如您所拥有的,尝试将第二个 if 语句更改为不等式检查,而不是检查相等性:
if (timeStamp <= 0.0F)

或者,您的 Update() 函数可以简化为如下所示:

void Update()
    showCurrency.text = "Money: " + getMoney();/*Make money into a property with a getter and setter, so that it will be easily changeable at run-time*/
    if(buttonClicked && (Time.time >= timeStamp)) 
    {
        timeStamp = (Time.time + timeToCollect);
        setMoney(getMoney() + moneyPerClick);
        buttonClicked = false; /*Reset your button to be clickable again*/
        /*You could also setup your setMoney() like setMoney(moneyPerClick), but that's not what you asked ;b*/
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.