回答編集履歴

2

返信を受けて、追記

2022/09/11 13:39

投稿

退会済みユーザー
test CHANGED
@@ -10,7 +10,53 @@
10
10
  ### 引数について
11
11
  前提として、splitDangeonにおいてすべて縦の場合とします。
12
12
  まず、`chunks[count]`ですが、`splitDangeon`内の`width`が`CHUNK_SPLIT_MIN`より小さい時、新しいchunkは生成されません。
13
- なので、新しいchunk(`chunks[count]`)を参照しようとしても`undefined`となります。
13
+ なので、新しいchunk(count加算前における`chunks[count+1]`)を参照しようとしても`undefined`となります。
14
+
15
+ ```JavaScript
16
+ //縦の場合。
17
+ //oldChunk.wを0、splitXを1、CHUNK_SPLIT_MINを0とする。
18
+ let width = oldChunk.w - splitX; //0-1すなわち-1となる。
19
+ if(width > CHUNK_SPLIT_MIN){ //実行されない。
20
+ chunks[count + 1] = {//new chunk
21
+ x:oldChunk.x,
22
+ y:oldChunk.y,
23
+ w:splitX,
24
+ h:oldChunk.h
25
+ };
26
+
27
+ chunks[count] = {//old chunk
28
+ x:splitX,
29
+ y:oldChunk.y,
30
+ w:width,
31
+ h:oldChunk.h
32
+ };
33
+ }
34
+ //chunks[count + 1]は定義されていない。
35
+ count++;
36
+ if(count < 10) splitDangeon(chunks[count]/*<-undefined*/, count);
37
+ ```
14
38
 
15
39
  `chunk[0]`についてですが、chunk[0]はオブジェクトとして参照できる状態にありOKです。
16
40
 
41
+ ### 直す場所
42
+ `width`が`CHUNK_SPLIT_MIN`より小さい時もどこかでchunks[count + 1]を定義する必要があります。
43
+
44
+ たとえばこんな感じです。
45
+ ```JavaScript
46
+ let width = oldChunk.w - splitX;
47
+ chunks[count + 1] = { //new chunk if文の前に書くことでwidthの大きさに関係なく定義できる。
48
+ x: oldChunk.x,
49
+ y: oldChunk.y,
50
+ w: splitX,
51
+ h: oldChunk.h
52
+ };
53
+ if (width > CHUNK_SPLIT_MIN) {
54
+ chunks[count] = { //old chunk
55
+ x: splitX,
56
+ y: oldChunk.y,
57
+ w: width,
58
+ h: oldChunk.h
59
+ };
60
+ }
61
+ ```
62
+

1

誤回答の修正

2022/09/11 08:50

投稿

退会済みユーザー
test CHANGED
@@ -7,8 +7,10 @@
7
7
  そして、splitDangeonの呼び出しを見てみると、`splitDangeon(chunks[count],count)`と`splitDangeon(chunk[0])`のふたつがあることがわかります。
8
8
  それぞれにおける引数の`oldChunk`にあたるものは`chunks[count]`と`chunk[0]`です。
9
9
  それぞれについて見てきましょう。
10
- ### 引数の間違
10
+ ### 引数につ
11
- 本来引数`oldChunk`入れるきもはオブジェクトではなく配列です。
11
+ 前提として、splitDangeonおいてすて縦場合とします。
12
+ まず、`chunks[count]`ですが、`splitDangeon`内の`width`が`CHUNK_SPLIT_MIN`より小さい時、新しいchunkは生成されません。
13
+ なので、新しいchunk(`chunks[count]`)を参照しようとしても`undefined`となります。
14
+
12
- `chunks[count]`と`chunk[0]`どちらもオブジェクトです。
15
+ `chunk[0]`についてですが、chunk[0]はオブジェクトとして参照きる状態にありOKです。
13
- ### 直すこと
16
+
14
- 両方の引数をそれぞれ`chunks`と`chunk`に直してみてください。