- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发视频游戏,我希望它具有高度的可修改性。目前,我所有的游戏逻辑都是用 Python 定义的,我的引擎逻辑用 C++ 定义,我的数据用 XML 定义。我想向您解释一下我的游戏中实体是如何定义的,并听听您的想法;例如,它是否太冗长?
首先,一些背景知识:
定义属性
我会一点一点地讨论这个问题。首先我将解释如何定义属性。在 Python 中,属性可能看起来像这样:
class Life(Attribute):
def __init__(self):
# Default values
self.health = 100
self.toxicity = 0
非常基本。现在,在 XML 文件中,可以为我们定义的每个实体赋予属性中的每个字段不同的值:
<Attribute>
<Name>life</Name>
<Class>hero.attributes.Life</Class>
<Field>
<Name>health</Name>
<Value>100</Value>
</Field>
<Field>
<Name>toxicity</Name>
<Value>78</Value>
</Field>
</Attribute>
Name
— 属性的标识符(有点像 Python 中的对象)。当我们定义行为时将会很有用。Class
— 此属性的 Python 类。Field
— 属性的字段。Field.Name
— 必须与 Python 字段相同('self.health' → 'health')。Field.Value
— 此字段的值。定义行为
正如我之前所说,行为与实体的属性相互作用。例如,下面的伤害行为需要了解生命属性。
class Damage(Behavior):
def __init__(self):
self.life = None
用于设置行为的 XML 代码与设置属性的代码类似,但并不完全相同:
<Behavior>
<Class>hero.behaviors.Damage</Class>
<Attribute>
<Field>life</Field>
<Link>life</Link>
</Attribute>
</Behavior>
Class
— 行为的 Python 类;Attribute.Field
— 将放置对属性的引用的行为字段Attribute.Link
— 要链接到的属性。必须是上面定义的属性的 Name 标记中的值之一。最佳答案
您是否考虑过使用json而不是 XML?它更简洁、更具可读性,并且可以转换为即用型 Python 数据结构:
例如:
import json
x='''{"Field": [{"Name": "health", "Value": 100}, {"Name": "toxicity", "Value": 78}],
"Name": "life",
"Class": "hero.attributes.Life"}'''
attribute=json.loads(x)
# {u'Class': u'hero.attributes.Life',
# u'Field': [{u'Name': u'health', u'Value': 100},
# {u'Name': u'toxicity', u'Value': 78}],
# u'Name': u'life'}
并将 dict 转换回 json,
attr=json.dumps(attribute)
关于python - 这个实体定义模型是否太冗长了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374995/
在我们的服务出现一些预期的增长之后,突然间一些更新花费了非常长的时间,这些过去非常快,直到表达到大约 2MM 记录,现在它们每个需要大约 40-60 秒。 update table1 set fiel
我在服务中实现了一个传感器事件监听器,只要采样周期和最大报告延迟低于 1 秒,该监听器就可以正常工作,但一旦我将采样周期增加到超过 1 秒,传感器就根本不会更新。 我希望采样周期为 10 秒(可能是
我使用 Tkinter GUI 来启动测量和分析过程,基本上只需单击一个按钮即可开始。由于这些测量可能需要一段时间,我尝试添加一个进度条,即这个: http://tkinter.unpythonic.
我正在尝试使用套接字发送数据包,但出现错误。 invalid conversion from ‘omnetpp::cPacket*’ to ‘inet::Packet*’ [-fpermissive]
我刚刚发现 String#split 有以下奇怪的行为: "a\tb c\nd".split => ["a", "b", "c", "d"] "a\tb c\nd".split(' ') => ["a
您好,我正在尝试 ClojureScript,我正在使用 Klipse作为我的 REPL 差不多。这可能不是它的预期用途,但因为我没有做任何太复杂的事情,所以现在没问题。 我遇到的一个问题是尝试设置计
根据下面的数据,ClockKit 会生成一次 future 的 CLKComplicationTimelineEntry 项,但对于过去的时间点,会进行 24 次调用!这是为什么? 更多详情: 我注意
我有一个 MySQL 表,这个表有一个名为 datetime_utc 的 DATETIME 列。如您所料,它是 UTC 日期和时间。在我的 Bookshelf 模型中,我定义了一个虚拟 getter,
大家好,我是二哥呀! 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源
我是一名优秀的程序员,十分优秀!