首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动设置与手动减少(如何做到这两者?)

自动设置与手动减少(如何做到这两者?)
EN

Stack Overflow用户
提问于 2019-07-12 03:16:17
回答 1查看 40关注 0票数 2

一开始这可能有点复杂,但请您耐心点。我正在做一个城市模拟游戏,我想要实现的是:

  1. 看看这座城市的healthStat
  2. 如果它在一个范围内,设置daysRemaining (意味着城市的寿命)
  3. 每过一天,daysRemaining就会减少。

准则:

healthStat自愿默认daysRemaining

.=‘1’>

.=

-35

-40

我设法解决了这个问题,但是出现了一个问题.我只能做daysRemaining的自动设置,或者手动的减少--我不能两者都做。

这是我的密码:

代码语言:javascript
复制
if (statsHealth <= -10f && statsHealth > -25f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                daysRemaining = 10;
            }
            else if (statsHealth <= -25f && statsHealth > -35f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                if (daysRemaining > 8 || daysRemaining <= 5)
                {
                    daysRemaining = 8;
                }
            }
            else if (statsHealth <= -35f && statsHealth > -40f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                if (daysRemaining > 5 || daysRemaining <= 2)
                {
                    daysRemaining = 5;
                }
            }
            else if (statsHealth <= -40f && statsHealth > -50f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                if (daysRemaining > 2 || daysRemaining < 0)
                {
                    daysRemaining = 2;
                }
            }
            else if(statsHealth >= -50f && hasIssues)
            {
                //GAME OVER
                Debug.Log("GAME OVER!");
                daysRemaining = 0;
            }
            else if(statsHealth >= 0)
            {
                //No More Health Issues
                isHealthHazard = false;
 }

问题是,每当我的比赛一天过去,如果它在healthStat的范围内(例如:-25的healthStat范围在8-6 daysRemaining之间),它就会减少。但是,如果daysRemaining达到5,它将重置为8,因为它超出了范围(基于healthStat)。

另一方面,如果我根据healthStat的范围禁用autoSetting的daysRemaining,它将用于手动减少。但是,当玩家到达特定的daysRemaining时,我如何在第一时间设置healthStat?

我如何能够同时自动设置daysRemaining,同时能够手动调整它?

PS:我知道这可能有点混乱,所以如果你有任何进一步的询问,请随时评论,我一定会回应。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 04:23:20

您需要一种方法来确定何时输入或离开健康类别,或者是否已在该类别中。添加一个变量,该变量跟踪上一个类别中的默认天数,并仅根据前一个和新的默认天数之间的差异更改所剩的天数。

此外,还要有一个布尔值来跟踪您以前是否在任何类别之外。这样,如果您以前不在任何类别之外,则只需将剩余天数设置为默认的剩余天数。

以下是这些更改的样子:

代码语言:javascript
复制
private int previousDefaultDaysRemaining;
private bool previousOutsideHealthCategory;

void Start()
{
    previousDefaultDaysRemaining = 1000;
    previousOutsideHealthCategory = true;
} 

然后..。

代码语言:javascript
复制
// initialize to some value reasonable for not being health category.
int newDefaultDaysRemaining = 1000;
bool newOutsideHealthCategory = true;

// Determine what category of health you are in now
if (statsHealth <= -10f && statsHealth > -25f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    newDefaultDaysRemaining = 10;
}
else if (statsHealth <= -25f && statsHealth > -35f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    newDefaultDaysRemaining = 8;
}
else if (statsHealth <= -35f && statsHealth > -40f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    //Set Days Remaining
    newDefaultDaysRemaining = 5;

}
else if (statsHealth <= -40f && statsHealth > -50f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    newDefaultDaysRemaining = 2;
}

// Decrease timer 
daysRemaining -= 1;

if (previousOutsideHealthCategory) 
{
    // We were not in a category previously, just set the days remaining
    daysRemaining = newDefaultDaysRemaining;
} 
else 
{
    // reduce or increase daysRemaining by any category change
    daysRemaining += newDefaultDaysRemaining - previousDefaultDaysRemaining;
}

// remember the new category's days remaining and 
// our outsideHealthCategory status if either changed
previousDefaultDaysRemaining = newDefaultDaysRemaining;
previousOutsideHealthCategory = newOutsideHealthCategory;

// check for critical health status boundaries
if(statsHealth > -10 && hasIssues)
{
    //GAME OVER
    Debug.Log("GAME OVER!");
    daysRemaining = 0;
}
else if(statsHealth >= 0)
{
    //No More Health Issues
    isHealthHazard = false;
}            
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56999753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档