我有一个游戏我已经做了一段时间了。核心是C++,但是我用Python编写脚本,用于攻击/状态效应/项目等。
我想把自己的行为规范化。它是如何产生的:
我有一个xml文档,用于规范攻击,如下所示:
<Attack name="Megiddo Flare" mp="144" accuracy="1.5" targetting="EnemyParty">
<Flags>
<IgnoreElements/>
<Unreflectable/>
<ConstantDamage/>
<LockedTargetting/>
</Flags>
<Components>
<ElementalWeightComponent>
<Element name="Fire" weight="0.5"/>
</ElementalWeightComponent>
<ConstantDamageCalculatorComponent damage="9995" index="DamageCalculatorComponent"/>
</Components>
</Attack>
我用python解析这个文件,并构建我的攻击。每种攻击都由任意数量的组件组成,以实现不同的行为。在本次攻击中,我实现了一个DamageCalculatorComponent,告诉python使用ConstantDamage变量。我在脚本文件中实现了所有这些组件。这对我将要经常使用的组件类型很好。在某些攻击中,该攻击将是唯一使用该特定组件变体的攻击。我希望能够在xml文件中指定组件类,而不是将组件添加到脚本文件中。在
例如,如果我要实施《最终幻想》中的经典白风攻击(根据攻击者的生命值恢复团队生命)
^{pr2}$我想知道有没有更好的办法?我能看到的唯一另一种方法是将每个可能的组件变量定义放入python文件中,然后展开组件创建者来检查附加的变量。对于一次性使用的组件来说似乎有点浪费。对于动态生成类型,是否有更好/更安全的替代方法,或者可能是我没有看到的另一种解决方案?在
提前谢谢
内联Python很糟糕,因为
Python源代码编辑器无法理解您的源代码文件,您将错过语法突出显示
所有其他可用于lint和验证源代码的工具(如pylint)也将失败
备选方案
在元素
<CustomComponent index="DamageCalculatorComponent">
。。。添加参数
script
:<CustomComponent index="DamageCalculatorComponent" script="damager.py">
然后在文件系统的某个地方添加文件
damager.py
。在按如下所述加载:What is an alternative to execfile in Python 3?
在主游戏引擎代码中,使用加载的系统模块构造类,如下所示:
所有Python模块都必须共享某种约定的类名/入口点函数。在
如果您想要真正的可插入的体系结构,请使用Python eggs和
setup.py
入口点示例
相关问题 更多 >
编程相关推荐