首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一健康与盔甲

统一健康与盔甲
EN

Stack Overflow用户
提问于 2017-12-17 21:24:46
回答 2查看 846关注 0票数 1

你好,我有一个生命值和护甲脚本,wen,我射击,我有20点护甲和100点生命值,在2次射击后会造成10点伤害,所以你希望你的护甲是0,你的生命值是100,但是我这么做,我的护甲是0,我的生命值是90,我不知道如何避免它,当我的盔甲是0或更少的时候,我想修复它,这是脚本:

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Health_Armor : MonoBehaviour {
    public float health;
    public float armor;




    // Use this for initialization
    void Start () {
        health = 100f;
        armor = 20f;

    }

    // Update is called once per frame
    void Update ()
    {

        Max_Min_Stats();

    }

    private void Max_Min_Stats()
    {        
        if(health >= 100f)
        {
            health = 100f;
        }

        if (health <= 0f)
        {
            health = 0f;
        }

        if (armor >= 100f)
        {
            armor = 100f;
        }

        if (armor <= 0f)
        {
            armor = 0f;
        }
    }

    public void TakeDamage(float amount)
    {
        armor -= amount;
        if (armor <= 0f)
        {
            health -= amount;
            if (health <= 0f)
            {
                Death();
            }
        }
    }

    private void Death()
    {
        Destroy(gameObject);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-17 21:44:00

对于这个计算,有很多事情你需要跟踪。

  • 这种伤害适用于装甲。
  • 还有多少损失要处理。如果伤害为10,你想要对护甲造成5点伤害,对生命造成5点伤害。 //节省剩余损失额。变量damageLeft =数量;如果(装甲> 0) { //应该计算装甲伤害吗?var armorDamage = Math.min (damageLeft,装甲);装甲-= armorDamage;damageLeft -= armorDamage;} if (damageLeft> 0) {健康-= damageLeft;} if (健康<= 0) { // die血腥死亡}
票数 2
EN

Stack Overflow用户

发布于 2017-12-17 21:44:26

试着考虑一下代码的实际结果,而不是代码本身。

假设数量=10.

健康= 100,装甲= 20。

TakeDamage() ->减少护甲10 ->新值10 ->小于或等于0?不是的。好了。

健康= 100,装甲= 10

TakeDamage() ->减少装甲10 ->,新值为0,->小于或等于0 ->,是的。->使健康下降10倍。

怎么解决这个问题呢?如果你把if语句放在减去护甲之前,那么护甲在检查它是否是从健康中减去的0之后就变成0了。

tl;dr -在您评估了if之后,从装甲中减去数量。

编辑: Jdphenix发布了一个可以考虑实现的方法。在你目前的实现中,如果你有5点护甲和100点生命值,并且受到10点伤害,那么护甲就变成0,生命值保持在100点,所以你失去了5点深渊伤害。Jdphenix的方式阻止了这种情况的发生,相反,生命将变为95,装甲将变为0,其余的不会丢失。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47859605

复制
相关文章

相似问题

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