0

我正在制作一个游戏,其中每个生物都可以进行 3 次攻击,并且每次攻击可以同时产生多种效果。我正在使用 CoreData 来保存所有数据。

可以通过三个实体看到我的问题的一个基本示例:

  1. CreatureAttack:包含与实体的一对多关系
  2. AttackEffect:包含与实体的一对多关系
  3. Effect:包含效果的详细信息(伤害、迷惑、毒药等)

因此,首先我需要Attack为每个唯一实体拥有三个唯一Creature实体。然后我需要将Effect实体添加到每次攻击中。我的问题是每个效果可以有不同的价值,但它与所有其他生物的效果基本相同:它仍然是“伤害”,但伤害的价值因每个生物而异。

我想到的只有两种方法:

  1. Effect为 eachAttack为 each创建一个唯一的Creature,这样我可以将效果值存储在实体中。这样做的缺点是数据可能会变得很大:3x3x400 = 3,600 个Effect实体,每个实体仅存在一个关系。

  2. Effect为每种类型(损坏、混乱等)创建一个,并在Attack实体中使用 Transformable 数据类型,我在其中存储包含每个实体标识符的字典数组Effect(以便在需要时可以找到它们)和该效果的值。这可以很容易地NSCoding自动处理,并将Entity对象的数量从 3,600 减少到大约 20。

Effect&实体很少被Attack访问(仅当生物在战斗中时),我不需要在其中搜索,因此我认为这不会对性能产生明显影响。我还在许多网站上读到,他们建议不要在 CoreData 中存储数组和字典。有没有其他方法可以做到这一点?如果没有,什么选择会更好?

PS:抱歉,标题没有描述性,我不知道该放什么。

4

1 回答 1

0

如果您不打算更改效果的种类,您可以拥有一个可以调用的实体,CreatureAttack其中每一行都完全指定了生物攻击的效果。列可能是:a 的外键,a 的Creature外键Attack,, Damage, Confuse,Poison等。对于每个效果列,一行将具有此攻击和生物的效果值。

该实体最多只有 # Creaturex #Attack行,您只需拉出一行即可了解有关生物攻击的所有信息。

否则,我认为解决方案 1 更干净,拥有几千行的性能影响应该可以忽略不计,特别是如果您Creature在外键上放置索引和/或在外键上放置复合索引CreatureAttack在 iOS5 中支持)。

于 2012-09-08T13:22:41.783 回答