我正在制作一个游戏,每个生物可以有3次攻击,每次攻击都可以同时产生很多效果。我正在使用CoreData来保存所有数据。
可以通过三个实体看到我的问题的一个基本示例:
Creature
:包含与Attack
实体Attack
:包含与Effect
实体Effect
:包含效果的详细信息(损坏,混淆,毒药等)首先,我需要为每个唯一的Attack
实体提供三个唯一的Creature
个实体。然后我需要为每次攻击添加Effect
个实体。我的问题是每个效果可以有不同的值,但它与所有其他生物的效果基本相同:它仍然是“伤害”,但伤害的值与每个生物不同。
我只想到这两种方式:
为每个Effect
为每个Attack
创建一个唯一的Creature
,这样我就可以将效果值存储在实体中。这样做的缺点是数据可能会变大:3x3x400 = 3,600 Effect
个实体,每个实体只有一个关系。
为每种类型创建一个Effect
(损坏,混淆等),并在Attack
实体中使用Transformable数据类型,其中我存储包含每个{{1}的字典数组实体标识符(以便在需要时可以找到它们)和该效果的值。这可以由Effect
自动轻松处理,并将NSCoding
对象的数量从3,600减少到可能为20.
Entity
& Effect
实体很少被访问(只有当生物在战斗中时)并且我不需要在其中搜索,因此我认为这不会对性能产生明显的影响。我还在许多网站上看到他们建议不要在CoreData中存储数组和字典。有没有其他方法这样做?如果没有,哪种选择会更好?
PS:对于非描述性标题,我不知道该放什么。
答案 0 :(得分:0)
如果您不打算更改效果的类型,您可以拥有一个可以调用CreatureAttack
的实体,其中每行完全指定生物攻击的效果。列可能是:Creature
的外键,Attack
的外键,Damage
,Confuse
,Poison
等。对于每个效果列a row将具有此攻击和生物的效果值。
此实体最多只有#Creature
x#Attack
行,您只需拉一行即可找到有关生物攻击的所有信息。
否则我认为解决方案1更清晰,几千行的性能损失应该可以忽略不计,特别是如果你在Creature
外键和/或{{1}上的复合索引上放置一个索引}和Creature
外键(在iOS5中受支持)。