# 属性

LLMS 索引： [llms.txt](/dvw/llms.txt)

---

属性是物体物理特征的抽象。在虚拟世界里，这种做法常常会延伸到非物理的属性上，我们很快就会看到；但占主导地位的是物理属性（质量、密度、形状、颜色，等等）。

属性常常被实现为函数，这样很少用到的属性就可以在需要时才计算。不过，虽然属性在被读取时不会改变任何值，函数一般而言却会改变值：检查一个气球的“diameter”（直径）属性不会改变它的直径 [^94]，但在气球上调用“inflate”（充气）函数就可能改变它。不过从实现的角度看，两者可以长得一模一样。

属性与对象类之间的相处并不总是顺畅。一个瓶子掉在地上会碎，是因为它作为瓶子属于“fragile objects”（易碎物体）的子类吗？还是因为它继承了一个高取值的“fragile”（易碎）属性？你需要多少封装？也许它碎掉，是因为它有一个值为“glass”（玻璃）的“made of”（材质）属性，而玻璃又有一个高取值的“fragile”属性？

要建立一套分类体系，既让物理系统能实现、又不把设计者变成程序员，这是个棘手的领域（更糟的是，许多设计者本来就是程序员出身）。严格说来，这不是朴素物理学的问题，而是表示方式的问题。

遗憾的是，这里其实还没有什么惯例可循。你只能为了让自己的物理能跑起来而做必须做的事。我唯一建议的是：让属性也可以（在面向对象的意义上）成为对象，这样你就能对它们进行量化。如果你能让虚拟世界引擎回答这样一个问题——“给我这个物体所有属性及其对应取值的清单”——那灵活性就足够了。

顺便说一句，当你在寻找区分物体的新办法时，手头有一份现有属性的清单非常有用。“这面魔法盾除了加上通常的防护加值之外，还该有什么作用？嗯，角色有身高、质量、速度这些属性，嗯……眼睛颜色、体毛浓密程度——嘿，我可以让他们一用这面盾就长出毛来！这肯定能把人吓一跳。我就把它做成矮人盾吧，因为矮人看重胡子，女的也一样，而且……”

在一个理想的世界里，物体的全部功能都能从它们的属性推导出来吗？能——在一个理想的世界里。你可以看出某个物体有一面坚硬、薄、平坦、结实、半锋利的表面，连接着一个长、坚固、轻却不脆的部件，顶上还有一根横杆，并由此推断出这个物体适合在草坪上挖洞。虚拟世界不是理想世界，因为这种程度的功能推导会把它压垮。也正因为不是理想世界，你能用铲子挖洞，靠的是“dig”（挖）这个动作认得铲子（也许还认得铁锹和鹤嘴锄）。除此之外，你没法用一面破盾加一根篱笆桩拼出一把铲子来。

所以，组合体的爱好者们，很抱歉：你们短时间内也不太可能靠这条路得到它。


[^94]: 朴素物理学没有不确定性原理。
