繁体   English   中英

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

[英]Call method when specific division of integer is reached

我正在编写视频游戏,在其中,我想调用一种方法,该方法可以为每获得2,000分增加玩家奖励寿命。 我不知道该用什么运算符。

If (score is divisible by 2000, each increment){
 DoSomething();
 }

我什至不确定我是否正确地问了这个问题。 基本上,当玩家得分2,000pt,4,000pt,6,000pt等时,我想通过调用方法来给予他/她额外的生活。 我已经创建了方法; 我只是想知道如何应用称为条件的条件。

我尝试使用此:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM