增量游戏的冷却计时器
Cooldown timer for an incremental game
我正在尝试统一制作一个游戏(使用 c#),我想要完成的几乎与 Adventure capitalist 游戏中所做的相同。当您单击其中一家公司时,会出现一个 "cooldown" 计时器。我把它放在引号中是因为你要等到计时器结束后才能拿到钱。我查看了其他建议的问题并设法创建了下面的代码
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 行来测试它。另一件不起作用的事情是我没有在屏幕上显示新的金额。
初学者最好猜测这段代码的布局方式,这就是我所在的位置。如果看起来我使用的方法有误,那可能是因为我错了。任何至少能为我指明正确方向的进一步信息将不胜感激。
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*/
}
}
我正在尝试统一制作一个游戏(使用 c#),我想要完成的几乎与 Adventure capitalist 游戏中所做的相同。当您单击其中一家公司时,会出现一个 "cooldown" 计时器。我把它放在引号中是因为你要等到计时器结束后才能拿到钱。我查看了其他建议的问题并设法创建了下面的代码
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 行来测试它。另一件不起作用的事情是我没有在屏幕上显示新的金额。
初学者最好猜测这段代码的布局方式,这就是我所在的位置。如果看起来我使用的方法有误,那可能是因为我错了。任何至少能为我指明正确方向的进一步信息将不胜感激。
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*/
}
}