当前位置: 首页 > 编程语言 > C#

修改类属性分享

时间:2023-04-10 11:01:45 C#

修改类属性这道题找一个合适的题名和标签让我很难接受。基本上我已经构建了一个游戏,其中会出现多个单位/暴民。现在我对构建系统很感兴趣,这样每个单位都可以应用效果/增益/减益来修改单位的属性。此类效果的示例可能是FrostEffect,它会减慢设备的移动速度、提高健康度等。计划通过脚本实现这些效果,因此可以创建自定义用户效果。我正在寻找有关如何实现这一目标的建议。现在我考虑过创建一个效果类。每个应用的效果都是此类的一个实例,并将引用它所应用的单元。这个效果至少会有两个方法,apply和unapply方法分别用来应用和取消应用。问题是它不允许不同的百分比累积方式。例如,值100应等于120或121两次乘以10%。不是很重要,但它是用C#编码的。您在Effect类方面走在正确的轨道上。但是保留每个单位的效果列表,而不是将效果引用到单位。如果要获取属性值,查询想要的属性值,而不是使用apply()和unapply()函数修改基值(这可能导致基值因浮点错误等而漂移等)等.您的Effect类可以有一个方法Modify(),它将输入值作为浮点数,并返回修改后的值。查询属性最终看起来像这样的伪代码:defget_movement_speed():value=base_movement_speed()#这是movement_speed_effects_list中效果单位的固有特性:value=effect.modify(value)returnvalue如果你有这么多效果,效率低下,缓存值并在每次添加或删除效果时重新计算它们。你考虑过装饰者模式吗?可以在本教程中找到示例。我写了一个小例子来说明你的具体情况。UnitWithPowerUp类接受一个Unit对象(它可能已被装饰也可能未被装饰)。当您在此类上调用Health()时,它会获取单位的健康状况并将默认值增加10%。如果装饰两次,它将返回121。在单个装饰单元上调用GetDescription()返回“单元+通电”。同样,双修剪单元返回“单元+加电+加电”。publicabstractclassUnit{publicvirtualstringGetDescription(){return"Unit";}publicvirtualdoubleCost(){return100;}}publicabstractclassEffectDecorator:Unit{publicEffectDecorator(){}}publicclassUnitWithPowerUp:EffectDecorator{Unitunit;publicUnitWithPowerUp(Unitunit){this.unit=unit;}publicoverridestringGetDescription(){returnunit.GetDescription()+"+PowerUp";}publicoverridedoubleHealth(){returnunit.Health()*1.10;我没有测试代码或任何东西,只是为了展示这个概念。如果您认为这很有用,我建议您获取一份HeadFirstDesignPatterns的副本。如果您打算使用脚本来执行某些效果(对于具有大量效果的游戏来说可能没问题),您可以继续使用C#的能力在运行时引用期间进行编译。本质上,您在C#中编写所需的一切,将字节代码保存在某处(可能作为关卡文件或扩展包或其他任何内容的一部分),然后执行相应的C#code。在开发对象状态需要动态更改的游戏时,请查看组件系统/实体系统设计。目前为止我看到的关于这个主题的最好的文章是http://www.devmaster.net/articles/oo-game-design/以上是C#学习教程的全部内容:修改类的属性,如果对大家有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: