Rimworld Mod制作教程7 comp组件

废话

游戏中可重复使用的功能特性都被制作为组件,这些组件可以继承在各种各样的物体上,而想使用这些组件则只需要在xml文件中添加需要的组件就可以,很方便的为物体创造多样性。游戏中的comp组件与unity引擎中的component是两回事。

核心内容

1 comp组件

1.1 ThingWithComps

说到comp,不得不说一下ThingWithComps。ThingWithComps继承与Thing,所有的物体都继承与Thing,而带有组件功能的物体则会继承ThingWithComps。物体根据xml数据加载时添加对应的comp和properties,并执行comp的生命周期。

1.2 compProperties

compProperties是组件的属性,一般用于存一些设定上不变的数据,而需要储存的数据则写在comp中,并且需要实现序列化方法PostExposeData(),否则存档后加载就会失去这些数据,游戏状态会异常。

1.3 comp在xml中的使用方法

在thing的xml文件里有comps属性,可以添加组件。
没有属性compProperties的写法:

<li>
  <compClass>CompQuality</compClass>
</li>

因为组件属性与组件是绑定关系,所以默认有属性的写法如下,省略的组件的class:

<li Class="CompProperties_Flickable"/>

如果需要修改组件中的属性:

<li Class="CompProperties_Art">
  <nameMaker>NamerArtSculpture</nameMaker>
  <descriptionMaker>ArtDescription_Sculpture</descriptionMaker>
  <canBeEnjoyedAsArt>true</canBeEnjoyedAsArt>
</li>

如果自己继承了某个组件,但属性还用原来组件的属性:

<comps>
    <li Class="CompProperties_Usable">
      <compClass>SR.DA.Component.CompUsableElectrocutionChair</compClass>
      <useJob>SR_ElectrocutionChair</useJob>
      <useLabel>处刑</useLabel>
    </li>
</comps>

如果属性和组件都重写的话,记得属性类也要加上命名空间。

<li Class="SR.DA.Component.CompProperties_PowerTraderUsable">
  <compClass>SR.DA.Component.CompPowerTraderUsable</compClass>
  <powerUsing>2000</powerUsing>
  <basePowerConsumption>50</basePowerConsumption>
</li>

1.4 comp和compProperties的写法

继承某个组件的属性比较方便,如果是全新的组件属性则继承CompProperties

using RimWorld;

namespace SR.DA.Component
{
    public class CompProperties_PowerTraderUsable : CompProperties_Power
    {
        public float powerUsing;//使用时消耗大量电量,造成电力负荷
        public CompProperties_PowerTraderUsable() {
            compClass = typeof(CompProperties_PowerTraderUsable);
        }
    }
}

组件类需要记得把属性强转成自己重写的类型,小写的props是读取xml时生成的父类指针,大写的则是我们要使用的类型,有新定义的数据。

using RimWorld;

namespace SR.DA.Component
{
    public class CompPowerTraderUsable : CompPowerTrader
    {
        private new CompProperties_PowerTraderUsable Props=> (CompProperties_PowerTraderUsable)props;
    }
}

剩下的就是丰富一些方法,在需要的时候调用thingwithcomps中的getComp()方法,然后做一些计算了。如果组件还有绘制层级之类的方法,则只需要改写对应的方法,这些方法的调用在thingwithcomps中设定好了。

如果这篇文章对你有帮助,点赞收藏支持一下呗!

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: COBOL中,COMP和COMP-3都是数据类型,但它们有一些区别。 COMP是一种二进制数据类型,它占用一个字(4个字节)的存储空间。它可以存储整数、小数和浮点数等数据类型。但是,它不能存储带有小数点的数值。 COMP-3是一种压缩的二进制数据类型,它占用不定长的存储空间。它可以存储整数、小数和浮点数等数据类型,并且可以存储带有小数点的数值。但是,它的存储方式比较特殊,需要进行压缩和解压缩操作,所以在处理时需要特别注意。 因此,如果需要存储带有小数点的数值,建议使用COMP-3类型。如果只需要存储整数、小数和浮点数等数据类型,可以使用COMP类型。 ### 回答2: COBOL(通用商务语言,英文全称:Common Business-Oriented Language)是一种广泛用于企业应用的编程语言。在COBOL中,主要有两种数据类型:二进制和十进制。 在二进制数据类型中,COBOL中有两个最主要的数据类型── COMP和COMP-3。这两个数据类型的区别可以从编程语言的使用和存储方面来阐述。 首先,COMP(有时称为COMP-1)是一种二进制数据类型,它存储的是32位或64位的二进制数。它最初是用来存储小数的数值,但它还可以用于存储整数。在运算时,二进制数被转换为十进制数,在计算结束时再转换回二进制数。这种数据类型通常用于存储非常大的数字,因为二进制位数越多,数值就越大。如果您的应用程序需要处理非常大的数字,那么COMP类型是非常有用的。 其次,COMP-3(也称为Packed-Decimal)是一种可压缩的二进制数据类型,它可以存储数字和数值。它被广泛用于金融应用程序中,因为它可以存储小数点位置并且可以通过使用压缩算法来减少存储空间。该算法通过将数字加上13(十进制),然后将结果除以10,并将余数加入表示数字长度的字段中,来将数字压缩成不同的字节数。例如,一个俩位的数字在COMP-3中只需要1个字节,而一个四位数字需要2个字节,并且这个数字只能使用10进制表示。 总之,COBOL中的COMP和COMP-3数据类型的区别在于它们存储数据的方式,以及数据类型的存储大小。COMP主要用于存储非常大的数字,而COMP-3则用于存储金融应用程序中的数字和数值,通过压缩算法来节约存储空间。需要根据具体的应用场景来选择使用哪种数据类型。 ### 回答3: COBOL是一种面向商业应用的高级编程语言。在使用COBOL时,我们常会听到两个概念:comp和comp-3。这两者有什么区别?下面就来一一讲解: 1. comp(二进制) comp是COBOL中的一种数据类型,它表示二进制数。comp所占据的存储空间是由所存储数值的位数决定的,例如:pic S9(9) comp 表示一个9位带符号的二进制数。 使用comp类型变量的好处是它占用的存储空间少,节省了系统资源。它也更适合于整数计算,被广泛用于所有的计算机中(从小到大,64位计算机除外)。 2. comp-3(压缩型二进制) COBOL语言中,comp-3也是一种数据类型,它表示一种压缩型二进制数。它将数字压缩成BCD码表现,占据的存储空间比comp要少得多。 同时,它也更适用于金额计算或者其他金融计算。尤其是在大型银行和金融机构中,comp-3被广泛使用。 总结: - comp是一个二进制数据类型,它占用比较小的存储空间,适用于整数计算。 - comp-3是一种压缩型二进制数据类型,它将数字压缩成BCD码表现,占据的存储空间比comp要少得多,适用于金额等金融计算。 根据实际需求来选择不同的存储方式是非常重要的,能够提高应用程序的执行效率和节省系统资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值