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

質問編集履歴

11

更新

2016/09/30 15:07

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -268,4 +268,48 @@
268
268
  ■おわりに
269
269
  上手く変数の引き渡しなどができないため、グローバル変数を多用してしまっている節があります。
270
270
  また、メモリの管理などの理解が足りないため、そのようなご指摘など頂けますと幸いです。
271
- 何卒よろしくお願いいたします。
271
+ 何卒よろしくお願いいたします。
272
+
273
+
274
+ ■Island.classについて
275
+ Island.classの中身を記載いたします。
276
+ ライブラリに入っていた(?)ものだと思います。
277
+ .classの拡張子のファイルを扱うのは初めてで、内容を変更できないことなどに戸惑っています。
278
+ また、デバッグで呼び出されていることはわかったのですが、どこに保存されているのか、どこから呼び出されているのか がわかっておりません。
279
+
280
+ public void init(int bodyCapacity, int contactCapacity, int jointCapacity, ContactListener listener) {}
281
+ が呼び出された際に、「jointCapacity」などが引数として得られているようです。
282
+ ただ、どこで「jointCapacity」を決めてinit()が実行されているのでしょうか?
283
+
284
+ Island.class
285
+ 一部抜粋
286
+
287
+ ```Java
288
+
289
+ /* */ public class Island {
290
+ /* */ public ContactListener m_listener;
291
+ /* */ public Body[] m_bodies;
292
+ /* */ public Contact[] m_contacts;
293
+ /* */ public Joint[] m_joints;
294
+ /* */ public Position[] m_positions;
295
+ /* */ public Velocity[] m_velocities;
296
+ /* */ public int m_bodyCount;
297
+ /* */ public int m_jointCount;
298
+ /* */ public int m_contactCount;
299
+ /* */ public int m_bodyCapacity;
300
+ //~~省略~~
301
+
302
+ /* */ public void init(int bodyCapacity, int contactCapacity, int jointCapacity, ContactListener listener) {
303
+ /* 189 */ this.m_bodyCapacity = bodyCapacity;
304
+ /* 190 */ this.m_contactCapacity = contactCapacity;
305
+ /* 191 */ this.m_jointCapacity = jointCapacity;
306
+ /* 192 */ this.m_bodyCount = 0;
307
+ /* 193 */ this.m_contactCount = 0;
308
+ /* 194 */ this.m_jointCount = 0;
309
+
310
+ //~~省略~~
311
+
312
+ /* */ }
313
+ /* */ }
314
+
315
+ ```

10

更新

2016/09/30 15:07

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -241,8 +241,13 @@
241
241
  ```
242
242
 
243
243
 
244
+ ■ご回答頂いた内容についての補足
244
- ■生成済みのBodyやJointを入れる配列が問題かと考えテスト中です。
245
+ JointOfItem2Centerという配列につい、以下に詳細を記載致します。
245
246
  PhysicsWorld.javaで使えるグローバル変数として定義しております。
247
+
248
+ 現段階でのBodyの個数は6個です。(int ItemNum = 6; としました。)
249
+ Jointを削除する操作をしたいので、Joint型の配列に保存しました。
250
+
246
251
  ```Java
247
252
  //グローバル変数として定義
248
253
 
@@ -257,6 +262,8 @@
257
262
 
258
263
  ![観覧車_補足](646fa8bc2c94fda58a2bc2c4372571b3.png)
259
264
 
265
+ ■現在
266
+ 生成済みのBodyやJointを入れる配列が問題かと考えてテスト中です。
260
267
 
261
268
  ■おわりに
262
269
  上手く変数の引き渡しなどができないため、グローバル変数を多用してしまっている節があります。

9

情報の更新

2016/09/30 14:56

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -240,6 +240,7 @@
240
240
  }
241
241
  ```
242
242
 
243
+
243
244
  ■生成済みのBodyやJointを入れる配列が問題かと考えてテスト中です。
244
245
  PhysicsWorld.javaで使えるグローバル変数として定義しております。
245
246
  ```Java
@@ -257,6 +258,7 @@
257
258
  ![観覧車_補足](646fa8bc2c94fda58a2bc2c4372571b3.png)
258
259
 
259
260
 
261
+ ■おわりに
260
262
  上手く変数の引き渡しなどができないため、グローバル変数を多用してしまっている節があります。
261
263
  また、メモリの管理などの理解が足りないため、そのようなご指摘など頂けますと幸いです。
262
264
  何卒よろしくお願いいたします。

8

情報の更新

2016/09/30 14:54

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -211,9 +211,9 @@
211
211
 
212
212
 
213
213
 
214
- Bodyの生成やJointの生成を行うために関数を作ってあります。
214
+ Bodyの生成やJointの生成を行うために関数を作ってあります。
215
215
 
216
- Bodyの生成処理
216
+ Bodyの生成処理
217
217
  ```Java
218
218
  MakeBody (String ItemWhich,float x,float y ,int MoveAble ,int RotationAble ,int CollisionAble) {
219
219
  //String ItemWhich : どのアイテムを生成するか。(if文で判定して、画像や半径などを振り分けます。)
@@ -228,7 +228,7 @@
228
228
  }
229
229
  ```
230
230
 
231
- Jointの生成処理
231
+ Jointの生成処理
232
232
  ```Java
233
233
  Joint JointBody(Body body1, Body body2 , String JointType ) {
234
234
  //Body body1
@@ -240,6 +240,23 @@
240
240
  }
241
241
  ```
242
242
 
243
+ ■生成済みのBodyやJointを入れる配列が問題かと考えてテスト中です。
244
+ PhysicsWorld.javaで使えるグローバル変数として定義しております。
245
+ ```Java
246
+ //グローバル変数として定義
243
247
 
248
+ //アイテムの数だけ、Bodyを生成する。(識別して処理ができる)
249
+ Body body[] = new Body[ItemNum];
244
250
 
251
+ //アイテムの数だけ、Jointを生成する。(識別して処理ができる)
252
+ Joint JointOfItem2Center[] = new Joint[ItemNum]; //→Body(ゴンドラ)ごとに、画面の中心とのJoint情報を保存するため。(常にItemNum個で問題ないはずです。)
253
+
254
+ Joint JointOfItem2Item[] = new Joint[ItemNum]; //→Body(ゴンドラ)ごとに、隣りのBodyとJointした情報を保存するため。(常にItemNum個で問題ないはずです。)
255
+ ```
256
+
257
+ ![観覧車_補足](646fa8bc2c94fda58a2bc2c4372571b3.png)
258
+
259
+
260
+ 上手く変数の引き渡しなどができないため、グローバル変数を多用してしまっている節があります。
261
+ また、メモリの管理などの理解が足りないため、そのようなご指摘など頂けますと幸いです。
245
262
  何卒よろしくお願いいたします。

7

情報の更新

2016/09/30 14:53

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -5,8 +5,20 @@
5
5
  複数の物理オブジェクト(body)を生成しています。
6
6
  また、body同士を結びつけるためにヒモやバネのようなオブジェクト(joint)を生成しています。
7
7
 
8
+ 「Testing Box2D」のサンプルプログラムにコードを書き足して使用しております。
9
+ googleのplayストアはこちら
10
+ https://play.google.com/store/apps/details?id=pl.mg6.testing.box2d&hl=ja
11
+ サンプルコードはこちら
12
+ https://code.google.com/p/testing-box2d/
8
13
 
14
+
15
+ はじめに、物理演算BOX2Dで行いたい事は、観覧車のように中心を軸として回転する動作をさせるためです。
16
+ そのため、生成したBodyは観覧車のゴンドラのように、画面の中心を軸として回転します。
17
+ ![観覧車](0ce8f6d9af0cad02c74525edc5bf0a74.png)
18
+
19
+
20
+
9
- 複数のbody同士では当たり判定がないように設定してあり、重なり合うような状態にしてあります。
21
+ 複数のbody同士では当たり判定がないように設定してあり、実際には重なり合うような状態にしてあります。
10
22
  この複数のbodyの表示を、画面下にあるものほど最前面に表示させる処理を行いたいです。
11
23
 
12
24
  ![やりたいこと](2d0a8310dd942adb98bfa4a1eb8d5447.jpeg)
@@ -78,6 +90,7 @@
78
90
 
79
91
 
80
92
  以下、コードとなります。
93
+ ※ここに記載してあるコードは、すべてPhysicsWorld.javaの変数・関数です。
81
94
 
82
95
  ```Java
83
96
  /////////////////////////////
@@ -196,4 +209,37 @@
196
209
  ```
197
210
 
198
211
 
212
+
213
+
214
+ Bodyの生成やJointの生成を行うために関数を作ってあります。
215
+
216
+ ■Bodyの生成処理
217
+ ```Java
218
+ MakeBody (String ItemWhich,float x,float y ,int MoveAble ,int RotationAble ,int CollisionAble) {
219
+ //String ItemWhich : どのアイテムを生成するか。(if文で判定して、画像や半径などを振り分けます。)
220
+ //float x : 生成するx座標
221
+ //float y : 生成するy座標
222
+ //int MoveAble : 移動できるかのFlag
223
+ //int RotationAble : Bodyを回転させるかのFlag
224
+ //int CollisionAble : 衝突できるかのFlag
225
+ ~省略~
226
+ MakedBody.createFixture(fixtureDef); //この処理で実際に生成する
227
+ return MakedBody;
228
+ }
229
+ ```
230
+
231
+ ■Jointの生成処理
232
+ ```Java
233
+ Joint JointBody(Body body1, Body body2 , String JointType ) {
234
+ //Body body1
235
+ //Body body2
236
+ //String JointType
237
+ ~省略~
238
+ MyJoint = world.createJoint(Joint情報); //この処理で実際に生成する
239
+ return MyJoint;
240
+ }
241
+ ```
242
+
243
+
244
+
199
245
  何卒よろしくお願いいたします。

6

変更

2016/09/30 14:47

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -61,7 +61,7 @@
61
61
  なのに対して、
62
62
  m_jointCount=14
63
63
  となっております。
64
- ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
64
+ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
65
65
 
66
66
  ![スクリーンショット](fbb1a83cddd4d23433c81ac75e532425.jpeg)
67
67
 
@@ -122,12 +122,14 @@
122
122
 
123
123
 
124
124
 
125
+ Body2Backward( SortBodyList[iiiaa] );
126
+ の部分でエラーが起きるため、さらに詳しく掲載します。
127
+ (一部省略しております。)
125
128
 
126
129
 
127
130
 
128
131
 
129
132
 
130
-
131
133
  ```Java
132
134
  /////////////////////////////
133
135
  //「bodyとjointを再度生成する」

5

解説の追加

2016/09/28 19:17

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -61,6 +61,7 @@
61
61
  なのに対して、
62
62
  m_jointCount=14
63
63
  となっております。
64
+ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
64
65
 
65
66
  ![スクリーンショット](fbb1a83cddd4d23433c81ac75e532425.jpeg)
66
67
 
@@ -68,10 +69,11 @@
68
69
 
69
70
  ■バグの推測
70
71
  デバッグを行うことで、エラー場所は特定できました。
72
+ しかし、原因や解決策はまったくわかりません。
71
73
 
72
74
  動的に変更されるjointの個数がずれてしまい、joint配列の範囲外のものを指定しているようです。
73
75
 
74
- 本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが、なぜかエラーが発生してしまいます。
76
+ 本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが、なぜか今回の処理を行うとエラーが発生してしまいます。
75
77
  (bodyやjointを削除・生成を繰り返す過程が問題?)
76
78
 
77
79
 
@@ -189,4 +191,7 @@
189
191
 
190
192
 
191
193
  }
192
- ```
194
+ ```
195
+
196
+
197
+ 何卒よろしくお願いいたします。

4

情報の修正

2016/09/28 19:15

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -78,7 +78,7 @@
78
78
  以下、コードとなります。
79
79
 
80
80
  ```Java
81
- /////////////////////////////
81
+ /////////////////////////////
82
82
  //「表示順を変更する処理」
83
83
  /////////////////////////////
84
84
 
@@ -91,30 +91,23 @@
91
91
  //bodyが空でなければ
92
92
  if (bodies != null) {
93
93
 
94
- //設定したbodyIdを並び替えたリストを取得しint[]の配列へ代入
94
+ //bodyごとに設定したbodyId(整数)並び替えた取得し配列へ代入
95
- SortBodyList = GetSortedBodyList();
95
+ int[] SortBodyList = GetSortedBodyList();
96
96
 
97
97
  //並び順が前回と同じか否かを取得する。(同じならTrue、異なるならFalse)
98
98
  boolean ArraySameFlag = ArraySameCheck(SortBodyList,SortBodyListPrevious);
99
- //問題あり
100
99
 
101
-
102
- //もし、前回と同じなら (風車のアイテムがないときは同じになる)
100
+ //もし、前回と同じなら
103
101
  if (ArraySameFlag){
104
102
  //なにもしない
105
-
106
103
  }else{ //前回と中身が異なるなら
107
-
108
- //風車Itemの数だけ、再生成する。
104
+ //bodyの数だけ、一つずつ再生成する。
109
105
  for (int iiiaa = 0 ; iiiaa < ItemNum ; iiiaa++){
110
-
111
106
  //順番通り再度生成する。bodyIdの順番を引き渡す
112
107
  Body2Backward( SortBodyList[iiiaa] );
113
-
114
108
  }
115
109
 
116
-
117
- //一つ前のBodyListを保存する
110
+ //SortBodyListPrevious(一つ前のBodyList)に、いまのSortBodyList代入
118
111
  SortBodyListPrevious = SortBodyList;
119
112
 
120
113
  }
@@ -134,14 +127,13 @@
134
127
 
135
128
 
136
129
  ```Java
137
- /////////////////////////////
130
+ /////////////////////////////
138
131
  //「bodyとjointを再度生成する」
139
132
  /////////////////////////////
140
133
 
141
- //風車のアイテム順を指定し、順にアイテムを再度生成するこで表示の重なりを調節する。(新く生成さたものは一番後ろ位置づけられる。
134
+ //アイテム順番号が引数として得らる(body個数6つなので、itemOrderはItemの番号であ0~5が入る)
142
135
  public void Body2Backward(int itemOrder) {
143
136
 
144
- //Itemの番号である0~5を指定する。
145
137
  int NumNum = itemOrder;
146
138
 
147
139
  //////////////////////
@@ -149,16 +141,16 @@
149
141
  //////////////////////
150
142
 
151
143
  //Jointを消す
152
- world.destroyJoint( JointOfItem2Center[NumNum] );
144
+ world.destroyJoint( JointOfItem2Center[NumNum] ); //body番号(NumNum)ごとにJointを生成してあるため、そのJointを削除する。JointOfItem2Center[body番号]にはjointの情報が入っている。
153
145
  JointOfItem2Center[NumNum] = null;
154
146
 
155
147
 
156
148
  //Jointを消す
157
- //省略
149
+ //同様の処理なので省略
158
150
  //
159
151
 
160
152
 
161
-
153
+ //bodyを削除するまえに行う処理
162
154
  //座標を取得する。(再度アイテムを生成するために、同じ座標を記録しておく)
163
155
  Vec2 position = body[NumNum].getWorldCenter();
164
156
  //速度を取得する。
@@ -185,9 +177,10 @@
185
177
 
186
178
 
187
179
  //生成したアイテムをjoinする (ここでエラーが起きる!!!)
188
- JointOfItem2Center[NumNum] = JointBody(CenterPoint1,body[NumNum],"distance");
180
+ JointOfItem2Center[NumNum] = JointBody(CenterPoint1,body[NumNum],"distance"); //CenterPoint1は、画面の中央に生成したbodyです。再度生成したbodyを画面の中央に紐付ける必要があるのですが、この処理を実行するとエラーがおきます。
189
181
 
182
+
190
- //生成したアイテムをjoinする (ここではエラーが起きない)
183
+ //生成したアイテムをjoinする
191
184
  //省略
192
185
  //
193
186
 

3

情報の修正

2016/09/28 19:13

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -21,21 +21,14 @@
21
21
 
22
22
 
23
23
  「bodyとjointを再度生成する」の処理は (★下記にコード貼り付け★)
24
- すでに生成されているbodyを削除し、画面下のものから一つずつ再度生成していくものです。(早く生成されたbodyほど画面面に表示されているため)
24
+ すでに生成されているbodyを削除し、画面下のものから一つずつ再度生成していくものです。(早く生成されたbodyほど画面面に表示されているため)
25
25
  この処理自体はうまくできているのですが、この処理を入れた状態でbodyのjointを行うとエラーでアプリケーションが停止してしまいます。
26
26
 
27
27
 
28
-
29
28
  何日も同じエラーで悩んでおります。
30
29
  お力添え頂けますと幸いです。
31
30
 
32
31
 
33
- ■バグの推測
34
- デバッグを行うことで、ほぼ原因は特定できました。
35
-
36
- jointの個数がずれてしまい、配列の範囲外のものを指定しているようです。(bodyやjointを削除・生成を繰り返す過程が問題?)
37
-
38
-
39
32
  エラーメッセージです。
40
33
 
41
34
  ```エラーメッセージ
@@ -72,9 +65,18 @@
72
65
  ![スクリーンショット](fbb1a83cddd4d23433c81ac75e532425.jpeg)
73
66
 
74
67
 
75
- 本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが、なぜか上記のようなエラーが発生してしまいます。
76
68
 
69
+ ■バグの推測
70
+ デバッグを行うことで、エラー場所は特定できました。
77
71
 
72
+ 動的に変更されるjointの個数がずれてしまい、joint配列の範囲外のものを指定しているようです。
73
+
74
+ 本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが、なぜかエラーが発生してしまいます。
75
+ (bodyやjointを削除・生成を繰り返す過程が問題?)
76
+
77
+
78
+ 以下、コードとなります。
79
+
78
80
  ```Java
79
81
  /////////////////////////////
80
82
  //「表示順を変更する処理」

2

情報の追加

2016/09/28 19:00

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -12,14 +12,20 @@
12
12
  ![やりたいこと](2d0a8310dd942adb98bfa4a1eb8d5447.jpeg)
13
13
 
14
14
  簡単に処理ができればよかったのですが、そのような設定は見つかりませんでした。
15
- そのため、すべてのbodyの座標を読み取りy軸の座標が小さい順に並び替え、順番が変化した場合に「表示順を並び替える処理」を実行させることにしました。
15
+ そのため、「表示順を変更する処理」を実行させたいです (★下記にコード貼り付け★)
16
+ 「表示順を変更する処理」では、
17
+ ①すべてのbodyの座標を読み取る
18
+ ②y軸の座標が小さい順に並び替え
19
+ ③表示順を並び替えるため、「bodyとjointを再度生成する」
20
+ ことで実行させることにしました。
16
21
 
17
- 「表示順を並び替える処理」は
18
- すでに生成されているbodyを削除し、画面下のものから一つずつ再生成していくものです。(早く生成されたbodyほど画面全面に表示されているため)
19
- 処理自体はうまくできているのですが、この処理を入れた状態でbodyのjointを行うとエラーでアプリケーションが停止してしまいます。
20
22
 
23
+ 「bodyとjointを再度生成する」の処理は (★下記にコード貼り付け★)
24
+ すでに生成されているbodyを削除し、画面下のものから一つずつ再度生成していくものです。(早く生成されたbodyほど画面全面に表示されているため)
25
+ この処理自体はうまくできているのですが、この処理を入れた状態でbodyのjointを行うとエラーでアプリケーションが停止してしまいます。
21
26
 
22
27
 
28
+
23
29
  何日も同じエラーで悩んでおります。
24
30
  お力添え頂けますと幸いです。
25
31
 
@@ -70,6 +76,10 @@
70
76
 
71
77
 
72
78
  ```Java
79
+ /////////////////////////////
80
+ //「表示順を変更する処理」
81
+ /////////////////////////////
82
+
73
83
  //重なりを調節するために再生成する関数
74
84
  public void ShowItem2Forward( ) {
75
85
 
@@ -110,4 +120,78 @@
110
120
  }
111
121
 
112
122
  }
123
+ ```
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+ ```Java
135
+ /////////////////////////////
136
+ //「bodyとjointを再度生成する」
137
+ /////////////////////////////
138
+
139
+ //風車のアイテム順を指定し、順番にアイテムを再度生成することで表示の重なりを調節する。(新しく生成されたものは一番後ろに位置づけられる。)
140
+ public void Body2Backward(int itemOrder) {
141
+
142
+ //Itemの番号である0~5を指定する。
143
+ int NumNum = itemOrder;
144
+
145
+ //////////////////////
146
+ //アイテムを削除する処理
147
+ //////////////////////
148
+
149
+ //Jointを消す
150
+ world.destroyJoint( JointOfItem2Center[NumNum] );
151
+ JointOfItem2Center[NumNum] = null;
152
+
153
+
154
+ //Jointを消す
155
+ //省略
156
+ //
157
+
158
+
159
+
160
+ //座標を取得する。(再度アイテムを生成するために、同じ座標を記録しておく)
161
+ Vec2 position = body[NumNum].getWorldCenter();
162
+ //速度を取得する。
163
+ Vec2 velocity = body[NumNum].getLinearVelocity();
164
+
165
+
166
+
167
+ //Bodyを消す
168
+ if (body[NumNum].m_userData != null) {
169
+ world.destroyBody( body[NumNum] );
170
+ body[NumNum].m_userData = null;
171
+ body[NumNum] = null;
172
+ }
173
+
174
+
175
+ //////////////////////
176
+ //全く同じアイテムを生成する処理
177
+ //////////////////////
178
+
179
+ body[NumNum] = MakeBody( ItemName[NumNum] , (float) (position.x) , (float)(position.y),1,0,0);
180
+
181
+ //速度を割り当てる
182
+ body[NumNum].setLinearVelocity(velocity);
183
+
184
+
185
+ //生成したアイテムをjoinする (ここでエラーが起きる!!!)
186
+ JointOfItem2Center[NumNum] = JointBody(CenterPoint1,body[NumNum],"distance");
187
+
188
+ //生成したアイテムをjoinする (ここではエラーが起きない)
189
+ //省略
190
+ //
191
+
192
+
193
+
194
+
195
+
196
+ }
113
197
  ```

1

情報追加

2016/09/28 18:57

投稿

kt.tk.co
kt.tk.co

スコア27

title CHANGED
File without changes
body CHANGED
@@ -53,12 +53,61 @@
53
53
  ```
54
54
 
55
55
 
56
+ の部分より、該当箇所を抜粋します。
56
57
 
57
58
  ```エラーメッセージ
58
59
  java.lang.ArrayIndexOutOfBoundsException: index=13 length=13`
59
60
  ```
60
- の部分より、該当箇所を特定しました。
61
+ m_jointCapacity=13
62
+ なのに対して、
63
+ m_jointCount=14
64
+ となっております。
61
65
 
62
66
  ![スクリーンショット](fbb1a83cddd4d23433c81ac75e532425.jpeg)
63
67
 
68
+
69
+ 本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが、なぜか上記のようなエラーが発生してしまいます。
70
+
71
+
72
+ ```Java
73
+ //重なりを調節するために再生成する関数
74
+ public void ShowItem2Forward( ) {
75
+
76
+ //現在のbody(剛体・物体)のリストを取得
77
+ Body bodies = getWorld().getBodyList();
78
+
79
+ //bodyが空でなければ
64
- 動的にjointの個数を
80
+ if (bodies != null) {
81
+
82
+ //設定したbodyIdを並び替えたリストを取得しint[]の配列へ代入
83
+ SortBodyList = GetSortedBodyList();
84
+
85
+ //並び順が前回と同じか否かを取得する。(同じならTrue、異なるならFalse)
86
+ boolean ArraySameFlag = ArraySameCheck(SortBodyList,SortBodyListPrevious);
87
+ //問題あり
88
+
89
+
90
+ //もし、前回と同じなら (風車のアイテムがないときは同じになる)
91
+ if (ArraySameFlag){
92
+ //なにもしない
93
+
94
+ }else{ //前回と中身が異なるなら
95
+
96
+ //風車Itemの数だけ、再生成する。
97
+ for (int iiiaa = 0 ; iiiaa < ItemNum ; iiiaa++){
98
+
99
+ //順番通り再度生成する。bodyIdの順番を引き渡す
100
+ Body2Backward( SortBodyList[iiiaa] );
101
+
102
+ }
103
+
104
+
105
+ //一つ前のBodyListを保存する
106
+ SortBodyListPrevious = SortBodyList;
107
+
108
+ }
109
+
110
+ }
111
+
112
+ }
113
+ ```