当达到整数的特定除法时调用方法

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

我正在编写一个视频游戏,在其中,我想调用一个方法,每获得 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分我只需要奖励一次红利生命

c# unity-game-engine operators
3个回答
1
投票

“分数能被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;
    }
}

0
投票

if(score is divisible by 2000)
检查放入
DoSomething()
方法中。

没有理由将其保留在增加额外生命的方法之外,在数十种可能增加分数的代码路径中。 您需要一个中心位置来增加分数,并检查各种条件。


0
投票

您需要一个集中位置来添加分数,如下所示:

public void AddToScore(int points)
{
    score += points;
    if (score >= bonusTarget)
    {
        bonusTarget += 2000;
        paddle.Bonus();
    }
}

我切换了条件块内的两行,以防

paddle.Bonus()
尝试添加点本身,这可能会导致问题,甚至可能导致无限递归。

如果您总是使用此方法添加到分数,则可以添加任何您想要的特殊处理。您可能还想编写一个

ResetScore()
和一个
GetScore()
,这样您就永远不会在代码中的其他地方直接访问
score

© www.soinside.com 2019 - 2024. All rights reserved.