我正在制作一个游戏,每个生物都可以有3次攻击,每次攻击都可以同时产生许多效果。我正在使用CoreData来保存所有数据。
我的问题的一个基本例子可以从三个实体中看到:
Creature
:包含与Attack
实体的多对多关系Attack
:包含与Effect
实体的多对多关系Effect
:包含效果细节(伤害、迷惑、中毒等)
因此,首先,我需要为每个唯一的Creature
实体提供三个唯一的Attack
实体。然后,我需要将Effect
实体添加到每个攻击中。我的问题是,每个效果可能有不同的值,但它与所有其他生物的效果基本相同:它仍然是"伤害",但每个生物的伤害值不同。
我只想到了两种方法:
-
为每个
Attack
和每个Creature
创建一个唯一的Effect
,这样我就可以在实体中存储效果值。这样做的缺点是数据可能会变大:3x3x400=3600个Effect
实体,每个实体只存在一个关系。 -
为每种类型(损坏、混淆等)创建一个
Effect
,并在Attack
实体中使用可转换数据类型,我在其中存储一组字典,其中包含每个Effect
实体标识符(以便在需要时可以找到它们)和该效果的值。这可以很容易地由NSCoding
自动处理,并且可以将Entity
对象的数量从3600减少到可能的20。
CCD_ 18&Attack
实体很少被访问(只有当生物处于战斗中时),我不需要在它们内部搜索,因此我认为这不会对性能产生明显影响。我也在许多网站上读到,他们建议不要在CoreData中存储数组和字典。有其他方法吗?如果没有,什么选择会更好?
PS:很抱歉没有描述性的标题,我不知道该放什么。
如果你不打算改变效果的种类,你可以有一个实体,你可以称之为CreatureAttack
,其中每一行都完全指定了生物攻击的效果。列可能是:Creature
的外键、Attack
的外键、Damage
、Confuse
、Poison
等。对于每个效果列,一行将具有该攻击和生物的效果值。
这个实体最多只有#Creature
x#Attack
行,你只需拉动一行就可以了解到生物攻击的所有信息。
否则,我认为解决方案1更干净,几千行的性能影响应该可以忽略不计,尤其是如果您在Creature
外键上设置索引和/或在Creature
和Attack
外键上设置复合索引(iOS5支持)。