簡體   English   中英

CoreData:大量實體還是將數組存儲為可變形?

[英]CoreData: Large quantity of entities or store an array as Transformable?

我正在制作一個游戲,其中每個生物可以進行3次攻擊,並且每種攻擊可以同時具有多種效果。 我正在使用CoreData來保存所有數據。

我的問題所在的一個基本示例可以通過三個實體看到:

  1. Creature :包含與Attack實體的多對多關系
  2. Attack :包含與Effect實體的多對多關系
  3. Effect :包含效果的詳細信息(損壞,混淆,毒葯等)

因此,開始時,我需要為每個唯一的Creature實體擁有三個唯一的Attack實體。 然后,我需要將Effect實體添加到每個攻擊中。 我的問題是,每種效果可以具有不同的值,但與所有其他生物基本上具有相同的效果:它仍然是“傷害”,但傷害值與每種生物都不相同。

我想到的只有兩種方法:

  1. 為每個Creature每次Attack創建唯一的Effect ,這樣我就可以將效果值存儲在實體中。 這樣做的缺點是數據可能會變得很大:3x3x400 = 3,600 Effect實體,每個實體僅存在一個單一的關系。

  2. 為每種類型(損壞,混亂等)創建一個Effect ,並在Attack實體中使用Transformable數據類型,在其中存儲包含每個Effect實體標識符(以便在需要時可以找到它們)和值的字典的數組影響。 可以通過NSCoding自動輕松地處理,並將Entity對象的數量從3600個減少到大約20個。

EffectAttack實體很少被訪問(僅當該生物處於戰斗狀態時),並且我不需要在它們內部進行搜索,因此,我認為這不會對性能產生明顯影響。 我還讀過許多網站,他們建議不要在CoreData中存儲數組和字典。 還有其他方法嗎? 如果沒有,哪種選擇會更好?

PS:很抱歉,這是非描述性標題,我不知道該寫些什么。

如果您不打算更改效果的種類,則可以擁有一個可以稱為CreatureAttack的實體,其中每一行都完全指定了生物攻擊的效果。 這些列可能是: Creature外鍵, AttackDamageConfusePoison等的外鍵。對於每個效果列,一行將具有此攻擊和生物的效果值。

該實體最多只有#個Creature x#個Attack行,而您只需拉動一行就可以找出有關生物攻擊的所有信息。

否則,我認為解決方案1會更干凈一些,尤其是如果您在Creature外鍵上添加索引和/或在CreatureAttack外鍵上都添加復合索引(iOS5支持),則具有數千行的性能影響應該可以忽略不計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM