0

私は、すべてのクリーチャーが3回の攻撃を行うことができ、すべての攻撃が同時に多くの効果をもたらすことができるゲームを作成しています。CoreDataを使用してすべてのデータを保持しています。

私の問題の基本的な例は、次の3つのエンティティで確認できます。

  1. CreatureAttack:エンティティとの多対多の関係が含まれています
  2. AttackEffect:エンティティとの多対多の関係が含まれています
  3. Effect:効果の詳細(ダメージ、混乱、毒など)が含まれています

Attackしたがって、最初に、一意のエンティティごとに3つの一意のエンティティを用意する必要がありCreatureます。次にEffect、各攻撃にエンティティを追加する必要があります。私の問題は、それぞれの効果が異なる値を持つことができるということですが、それは基本的に他のすべてのクリーチャーと同じ効果です。それはまだ「ダメージ」ですが、ダメージの値は各クリーチャーとは異なります。

私がこれを行うことを考えた方法は2つだけです。

  1. EffectそれぞれAttackに固有のものを作成しますCreature。これにより、エンティティ内にエフェクト値を保存できます。これの欠点は、データが大きくなる可能性があることです。3x3x400=Effectそれぞれ単一の関係を持つためにのみ存在する3,600のエンティティ。

  2. Effectタイプ(損傷、混乱など)ごとに1つ作成し、エンティティでTransformableデータ型を使用します。ここには、各エンティティ識別子(必要なときに見つけられるように)とその効果の値をAttack含む辞書の配列を格納します。Effectこれは自動的に簡単に処理でき、オブジェクトNSCodingの量をEntity3,600からおそらく20に減らすことができます。

Effect&エンティティにアクセスすることはめったになく(Attackクリーチャーが戦闘中の場合のみ)、それらの内部を検索する必要がないため、パフォーマンスへの顕著な影響はないと思います。また、CoreDataに配列や辞書を保存しないことを提案している多くのWebサイトを読みました。これを行う他の方法はありますか?そうでない場合は、どのオプションが良いでしょうか?

PS:わかりにくいタイトルで申し訳ありませんが、何を入れるべきかわかりませんでした。

4

1 に答える 1

0

効果の種類を変更する予定がない場合は、CreatureAttack各行がクリーチャーの攻撃の効果を完全に指定する、呼び出すことができるエンティティを持つことができます。列は次のようになります。外部キーから、、外部キーから、、、、などCreature。各効果列について、行にはこの攻撃とクリーチャーの効果の値があります。AttackDamageConfusePoison

このエンティティには最大で#Creaturex#Attack行しかなく、1行だけ引くことで、クリーチャーの攻撃に関するすべてを知ることができます。

そうでなければ、ソリューション1の方がクリーンであり、特に外部キーにインデックスを付けたり、外部キーと外部キーCreatureの両方に複合インデックスを付けたりする場合(iOS5でサポート)、数千行のパフォーマンスへの影響は無視できるはずです。CreatureAttack

于 2012-09-08T13:22:41.783 に答える