我正在编写一个视频游戏,在其中,我想调用一个方法,每获得 2,000 分就增加玩家的奖励生命。 我不知道要使用什么运算符来完成这样的事情。
If (score is divisible by 2000, each increment){
DoSomething();
}
我什至不确定我是否正确地问了这个问题。 基本上当玩家得分 2,000 分、4,000 分、6,000 分等时,我想通过调用一个方法来给他/她额外的生命。 我已经创建了该方法;我只是想知道如何应用调用它的条件。
我尝试使用这个:
public int bonusTarget = 2000;
paddle = GameObject.Find("Paddle").GetComponent<Paddle>();
if(score >= bonusTarget){
paddle.Bonus();
bonusTarget += 2000;
}
但是,每次增量它都会奖励不止一个奖励生命。 每2,000分我只需要奖励一次红利生命
“分数能被2000整除”
if (score % 2000 == 0) DoSomething()
如果您需要跟踪分数,请使用属性而不是变量,例如:
private int _score;
public int Score
{
get
{
return _score;
}
set
{
var a = Math.Floor(_score / 2000)
var b = Math.Floor(value / 2000)
if (a < b) DoSomething();
_score = value;
}
}
将
if(score is divisible by 2000)
检查放入 DoSomething()
方法中。
没有理由将其保留在增加额外生命的方法之外,在数十种可能增加分数的代码路径中。 您需要一个中心位置来增加分数,并检查各种条件。
您需要一个集中位置来添加分数,如下所示:
public void AddToScore(int points)
{
score += points;
if (score >= bonusTarget)
{
bonusTarget += 2000;
paddle.Bonus();
}
}
我切换了条件块内的两行,以防
paddle.Bonus()
尝试添加点本身,这可能会导致问题,甚至可能导致无限递归。
如果您总是使用此方法添加到分数,则可以添加任何您想要的特殊处理。您可能还想编写一个
ResetScore()
和一个 GetScore()
,这样您就永远不会在代码中的其他地方直接访问 score
。