teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

記入時に勝手に閉じたため

2018/03/20 03:54

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -28,10 +28,62 @@
28
28
 
29
29
  例:
30
30
  ```ここに言語を入力
31
- // C++でもないし、C#でもないかも知れない。
32
- // までイメージ
31
+ // 同じ
33
32
 
34
- Chara monster1 = new NezumiChan();
33
+ class CharaEx{
35
- ... // レベル上げ等
34
+ private Chara ch_; // コンポジション
35
+ public CharaEx( chara c ){ ch_ = c; }
36
- if( level > 10 ) monster1 = new ChuchuChan();
36
+ public bool levelUp(){ ch_ = new ChuchuChan(); }
37
+ }
37
- ```
38
+ ```
39
+
40
+ ```ここに言語を入力
41
+ 方法3:
42
+ Chara クラスを作り、それを継承して、「最大」のキャラ用クラスを定義し、それを継承して 前のレベルのキャラを...と継承していくごとにレベルを下げていく。( 逆でもいいが。 )
43
+ ( この方法は苦肉の策か? 本来の使い方からすれば邪道中の邪道。だって、逆になっているし。 )
44
+ ```
45
+
46
+ 例:
47
+ ```ここに言語を入力
48
+ // 同じく
49
+
50
+ // NezumiChan -> ChuchuChan -> GiantChuchu へ進化するとする。
51
+
52
+ // すべてのキャラはこれを継承している
53
+ class Chara{
54
+ // メンバを持っているが省略
55
+ }
56
+
57
+ class GiantChuchu : Chara{
58
+ // メンバを持っているが...
59
+ }
60
+
61
+ class ChuchuChan : GiantChuchu{
62
+ // メンバを持っているが...
63
+ }
64
+
65
+ class NezumiChan : ChuchuChan{
66
+ // メンバを持っているが...
67
+ }
68
+
69
+ // ----------
70
+ // main関数等のような呼び出し側にて
71
+ Chara nezumi = new NeznumiChan();
72
+ // レベル上限に達した等で進化
73
+ nezumi = new ChuchuChan();
74
+ // 同じく
75
+ nezumi = new GiantChuchu();
76
+ ```
77
+
78
+ ```ここに言語を入力
79
+ 方法4:
80
+ 方法3を方法2のようにコンポジションして...
81
+ ```
82
+
83
+ が思いつきました。
84
+
85
+ これならすべてのキャラを生成しなくても済みますからメモリの使用量も少なく済むはずです。
86
+
87
+ ただし、メモリリークにはご注意を。
88
+
89
+ C# ( Unity ) なら GC ( ガーベージコレクタ ) があるはずなので、たぶん勝手にやってくれると思うが。