[英]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.