質問編集履歴

3

文章とタイトルを修正しました。

2021/03/22 12:50

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- std::shared_ptr<>で受け取った値がおかしくなる原因が知りたい。
1
+ [ Dxlib ]アドレスがおかしくなる原因が知りたい。
test CHANGED
@@ -1,16 +1,226 @@
1
- 質問内容[ std::shared_ptr<>の引を通るとなぜか値がおかしくなってしう原因が知りたい ]
2
-
3
- 提示コードについてすがMapChipクラスをmStageベクター変数が持っています。そこにコンストラクタで値設定してアドレス私でminとmaxの値設定てそれを当り判定でstd::shared_ptr<>を伝ってIntersect関数で処理されるのですが/////提示画像部というメント内部のコードで提画像のうに値がおかくなりますこれはなぜでしょうか?MapChipコントラクタ部では値しっかり設定されていした
4
-
5
-
6
-
7
-
8
-
9
- Github: https://github.com/Shigurechan/ActionGame/tree/b9dcf414851398afc9a592dfc62842140c5c4a85
10
-
11
-
12
-
13
- ![イメージ説明](adaa2cae1eabec3be82a9f00c47cba53.png)
1
+ 提示コードですがMapChip変数にmCol.変数で座標を設定してそれをIntersectでポインタ渡しで参照しようとすると値がおかしくな
2
+
3
+ なのでアドレスを表示させました。(提示コード下記) が同じアドレスが表されてしまうのでこれはなぜでしょうか?よくアドレを調べましたかりません
4
+
5
+
6
+
7
+
8
+
9
+ 利用ライブラリ: dxlib,glm
10
+
11
+ GitHub: https://github.com/Shigurechan/ActionGame/tree/93a1306c5a4eddb793054710ef5157717c87fb5c
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+ ![イメージ説明](0920ee0ba9dc5351fbbf7aa0c04f338d.png)
20
+
21
+
22
+
23
+ ```
24
+
25
+
26
+
27
+ //ステージを読み込み
28
+
29
+ void Stage::LoadStage()
30
+
31
+ {
32
+
33
+
34
+
35
+ printf("LoadStage\n");
36
+
37
+ mStage->clear(); //ステージをクリア
38
+
39
+
40
+
41
+ // *** ステージロード ***
42
+
43
+ glm::ivec2 StageSize = glm::ivec2 (0, 0); //画面サイズ
44
+
45
+ FILE* fp = NULL; //ファイルポインタ
46
+
47
+
48
+
49
+ // fopen_s(&fp, "Assets/Stage/Debug_AI.bin", "rb"); //読み込みモードでファイルを開く
50
+
51
+ fopen_s(&fp, "Assets/Stage/Debug.bin", "rb"); //読み込みモードでファイルを開く
52
+
53
+
54
+
55
+ if (fp != NULL)
56
+
57
+ {
58
+
59
+ //printf("あああ\n");
60
+
61
+ //ステージサイズを読み込む(先頭8バイト)
62
+
63
+ fread(&StageSize.x, sizeof(int), 1, fp);
64
+
65
+ fread(&StageSize.y, sizeof(int), 1, fp);
66
+
67
+
68
+
69
+ for (int y = 0; y < StageSize.y; y++)
70
+
71
+ {
72
+
73
+ std::vector<byte> tmp;
74
+
75
+ for (int x = 0; x < (int)StageSize.x; x++)
76
+
77
+ {
78
+
79
+ byte b = 0;
80
+
81
+ fread(&b, sizeof(byte), 1, fp);
82
+
83
+ tmp.push_back(b);
84
+
85
+
86
+
87
+ }
88
+
89
+
90
+
91
+
92
+
93
+ Stage_Grid->push_back(tmp);
94
+
95
+
96
+
97
+ }
98
+
99
+
100
+
101
+ fclose(fp); //ファイルを閉じる
102
+
103
+
104
+
105
+ //mStage->resize(StageSize.x * StageSize.y);
106
+
107
+
108
+
109
+
110
+
111
+ //マップオブジェクトを設定
112
+
113
+ for (int y = 0; y < StageSize.y; y++)
114
+
115
+ {
116
+
117
+ for (int x = 0; x < StageSize.x; x++)
118
+
119
+ {
120
+
121
+ switch (Stage_Grid->at(y).at(x))
122
+
123
+ {
124
+
125
+ //ブロック
126
+
127
+ case 0x01:
128
+
129
+ {
130
+
131
+ mStage->push_back(MapChip(Tag::Block, glm::vec2 (x * CELL, y * CELL), BlockSize, Block_sprite));
132
+
133
+ //printf("えええええ\n");
134
+
135
+
136
+
137
+ }
138
+
139
+ break;
140
+
141
+
142
+
143
+ //レンガ
144
+
145
+ case 0x02:
146
+
147
+ {
148
+
149
+ mStage->push_back(MapChip(Tag::Brick, glm::vec2 (x * CELL, y * CELL), BrickSize, Brick_sprite));
150
+
151
+ }
152
+
153
+ break;
154
+
155
+
156
+
157
+ //ショップ
158
+
159
+ case 0x03:
160
+
161
+ {
162
+
163
+ mStage->push_back(MapChip(Tag::Shop, glm::vec2 (x * CELL, y * CELL), ShopSize, Shop_sprite));
164
+
165
+ }
166
+
167
+ break;
168
+
169
+
170
+
171
+ //なし
172
+
173
+ default:
174
+
175
+ {
176
+
177
+ // mStage->push_back(MapChip(StageObjectType::None, glm::vec2 (x * CELL, y * CELL), glm::vec2 (0, 0), -1));
178
+
179
+ }break;
180
+
181
+
182
+
183
+ }
184
+
185
+
186
+
187
+
188
+
189
+ }
190
+
191
+ }
192
+
193
+
194
+
195
+
196
+
197
+ }
198
+
199
+ else {
200
+
201
+ printf("ファイルを読み込めません。\n");
202
+
203
+ }
204
+
205
+
206
+
207
+
208
+
209
+ // printf("%d , %d\n", mStage->at(0).getPosition().x, mStage->at(0).getPosition().y);
210
+
211
+
212
+
213
+
214
+
215
+ //fclose(fp);
216
+
217
+
218
+
219
+ }
220
+
221
+
222
+
223
+ ```
14
224
 
15
225
 
16
226
 
@@ -48,7 +258,9 @@
48
258
 
49
259
 
50
260
 
51
- mCol = std::make_shared<BoxCollision>();
261
+ // mCol = std::make_shared<BoxCollision>();
262
+
263
+ // mCol = std::make_shared<BoxCollision>();
52
264
 
53
265
 
54
266
 
@@ -58,15 +270,31 @@
58
270
 
59
271
 
60
272
 
273
+
274
+
275
+ mCol.setTag(t); //タグ
276
+
277
+ mCol.setMin(&minValue); //最小値
278
+
279
+ mCol.setMax(&maxValue); //最大値
280
+
281
+
282
+
283
+
284
+
285
+ /*
286
+
61
287
  mCol->setTag(t); //タグ
62
288
 
63
289
  mCol->setMin(&minValue); //最小値
64
290
 
65
291
  mCol->setMax(&maxValue); //最大値
66
292
 
67
-
293
+ */
68
-
294
+
69
- printf("ああああ %f %f\n", mCol->getMax().x, mCol->getMax().y);
295
+ //printf("ああああ %f %f\n", mCol->getMax().x, mCol->getMax().y);
296
+
297
+ // printf("ああああ %f %f\n", mCol->getMin().x, mCol->getMin().y);
70
298
 
71
299
 
72
300
 
@@ -76,262 +304,280 @@
76
304
 
77
305
  ```cpp
78
306
 
79
-
80
-
81
- //プレイヤーとの当たり判定
82
-
83
- void Stage::ColPlayer(std::shared_ptr<Player> player)
307
+ void BoxCollision::Intersect(BoxCollision *col)
308
+
84
-
309
+ //void BoxCollision::Intersect(BoxCollision& col)
310
+
85
- {
311
+ {
86
-
312
+
87
- //printf("%d\n",mStage->size());
313
+ //printf("えええ\n");
314
+
88
-
315
+ //printf("%f , %f \n",box.mMin->x,box.mMin->y);
316
+
317
+ //printf("%f , %f \n",box.mMax->x,box.mMax->y);
318
+
319
+ //
320
+
321
+
322
+
323
+ printf("%f , %f \n", col->getMin().x, col->getMin().y);
324
+
325
+ printf("%f , %f \n", col->getMax().x, col->getMax().y);
326
+
327
+
328
+
89
- for (int i = 0; i < mStage->size(); i++)
329
+ // printf("col->getMin()");
330
+
331
+ printf("\n\n");
332
+
333
+
334
+
335
+
336
+
337
+ if ((col->getMax().x > box.mMin->x && box.mMax->x > col->getMin().x)
338
+
339
+ && (col->getMax().y > box.mMin->y && box.mMax->y > col->getMin().y))
90
340
 
91
341
  {
92
342
 
343
+ printf("true \n");
344
+
345
+ setCol(true); //当たり判定を設定
346
+
347
+ setColTag(col->getMyTag()); //タグを取得
348
+
349
+ col->setColTag(getMyTag()); //タグを設定
350
+
351
+
352
+
353
+
354
+
355
+ if(getTriggerType() == false)
356
+
357
+ {
358
+
359
+
360
+
361
+ //サイズを取得
362
+
363
+
364
+
365
+ //相手
366
+
367
+ glm::vec2 colSize = col->getMax() - col->getMin();
368
+
369
+ colSize.x = colSize.x / 2;
370
+
371
+ colSize.y = colSize.y / 2;
372
+
373
+
374
+
375
+ //自分
376
+
377
+ glm::vec2 boxSize = *box.mMax - *box.mMin;
378
+
379
+ boxSize.x = boxSize.x / 2;
380
+
381
+ boxSize.y = boxSize.y / 2;
382
+
383
+
384
+
385
+ float colCenterX = (col->getMin().x + colSize.x);
386
+
387
+ float colCenterY = (col->getMin().y + colSize.y);
388
+
389
+ float boxCenterX = (box.mMin->x + boxSize.x);
390
+
391
+ float boxCenterY = (box.mMin->y + boxSize.y);
392
+
393
+
394
+
395
+
396
+
397
+ float deltaX = boxCenterX - colCenterX; //正ならboxが右にいる
398
+
399
+ float deltaY = boxCenterY - colCenterY; //正ならboxが上にいる
400
+
401
+ float adjust = 0.0;
402
+
403
+
404
+
405
+ if (fabs(deltaX) < fabs(deltaY))
406
+
407
+ {
408
+
409
+ // printf(", Y adjust \n");
410
+
411
+ if (deltaY > 0)
412
+
413
+ {
414
+
415
+ adjust = col->getMax().y - box.mMin->y + 0.001f; // +する
416
+
417
+ }
418
+
419
+ else
420
+
421
+ {
422
+
423
+ adjust = -(box.mMax->y - col->getMin().y + 0.001f); // -する
424
+
425
+ }
426
+
427
+ box.mMin->y += adjust;
428
+
429
+ box.mMax->y += adjust;
430
+
431
+ }
432
+
433
+ else
434
+
435
+ {
436
+
437
+ // printf(", X adjust \n");
438
+
439
+ if (deltaX > 0)
440
+
441
+ {
442
+
443
+ adjust = col->getMax().x - box.mMin->x + 0.001f; // +する
444
+
445
+
446
+
447
+ }
448
+
449
+ else
450
+
451
+ {
452
+
453
+ adjust = -(box.mMax->x - col->getMin().x + 0.001f); // -する
454
+
455
+ }
456
+
457
+ box.mMin->x += adjust;
458
+
459
+ box.mMax->x += adjust;
460
+
461
+ }
462
+
463
+ }
464
+
465
+ else {
466
+
467
+ //Trigger true
468
+
469
+ }
470
+
471
+ }
472
+
473
+ else
474
+
475
+ {
476
+
93
477
 
94
478
 
479
+ //当たってない時
480
+
481
+ setCol(false);
482
+
483
+ setColTag(Tag::Invalid);
484
+
95
- player->mCol->Intersect(mStage->at(i).mCol);
485
+ col->setColTag(Tag::Invalid);
96
-
97
-
486
+
487
+
98
488
 
99
489
  }
100
490
 
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
101
- }
499
+ }
500
+
501
+
102
502
 
103
503
  ```
104
504
 
105
-
106
-
107
505
  ```cpp
108
506
 
109
507
 
110
508
 
111
- //交差判定
509
+ //最大値を取得
112
-
113
- void BoxCollision::Intersect(std::shared_ptr<BoxCollision> col)
510
+
114
-
115
- //void BoxCollision::Intersect(BoxCollision& col)
511
+ glm::vec2 BoxCollision::getMax()
116
-
512
+
117
- {
513
+ {
118
-
119
- //printf("えええ\n");
120
-
121
- //printf("%f , %f \n",box.mMin->x,box.mMin->y);
122
-
123
- //printf("%f , %f \n",box.mMax->x,box.mMax->y);
124
-
125
- //
126
-
127
- ////////////////////////////////////////////////////////////////////////////////////提示画像部
128
-
129
- printf("%f , %f \n", col->getMin().x, col->getMin().y);
130
-
131
- printf("%f , %f \n", col->getMax().x, col->getMax().y);
132
-
133
- printf("\n\n");
134
-
135
- ///////////////////////////////////////////////////////////////////////////////////////
136
-
137
-
138
-
139
- if ((col->getMax().x > box.mMin->x && box.mMax->x > col->getMin().x)
140
-
141
- && (col->getMax().y > box.mMin->y && box.mMax->y > col->getMin().y))
142
-
143
- {
144
-
145
- printf("true \n");
146
-
147
- setCol(true); //当たり判定を設定
148
-
149
- setColTag(col->getMyTag()); //タグを取得
150
-
151
- col->setColTag(getMyTag()); //タグを設定
152
-
153
-
154
514
 
155
515
 
156
516
 
157
- if(getTriggerType() == false)
158
-
159
- {
160
-
161
-
162
-
163
- //サイズを取得
164
-
165
-
166
-
167
- //相手
168
-
169
- glm::vec2 colSize = col->getMax() - col->getMin();
170
-
171
- colSize.x = colSize.x / 2;
172
-
173
- colSize.y = colSize.y / 2;
174
-
175
-
176
-
177
- //自分
178
-
179
- glm::vec2 boxSize = *box.mMax - *box.mMin;
180
-
181
- boxSize.x = boxSize.x / 2;
182
-
183
- boxSize.y = boxSize.y / 2;
184
-
185
-
186
-
187
- float colCenterX = (col->getMin().x + colSize.x);
188
-
189
- float colCenterY = (col->getMin().y + colSize.y);
190
-
191
- float boxCenterX = (box.mMin->x + boxSize.x);
192
-
193
- float boxCenterY = (box.mMin->y + boxSize.y);
194
-
195
-
196
-
197
-
198
-
199
- float deltaX = boxCenterX - colCenterX; //正ならboxが右にいる
200
-
201
- float deltaY = boxCenterY - colCenterY; //正ならboxが上にいる
202
-
203
- float adjust = 0.0;
204
-
205
-
206
-
207
- if (fabs(deltaX) < fabs(deltaY))
208
-
209
- {
210
-
211
- // printf(", Y adjust \n");
212
-
213
- if (deltaY > 0)
214
-
215
- {
216
-
217
- adjust = col->getMax().y - box.mMin->y + 0.001f; // +する
218
-
219
- }
220
-
221
- else
222
-
223
- {
224
-
225
- adjust = -(box.mMax->y - col->getMin().y + 0.001f); // -する
226
-
227
- }
228
-
229
- box.mMin->y += adjust;
230
-
231
- box.mMax->y += adjust;
232
-
233
- }
234
-
235
- else
236
-
237
- {
238
-
239
- // printf(", X adjust \n");
240
-
241
- if (deltaX > 0)
242
-
243
- {
244
-
245
- adjust = col->getMax().x - box.mMin->x + 0.001f; // +する
246
-
247
-
248
-
249
- }
250
-
251
- else
252
-
253
- {
254
-
255
- adjust = -(box.mMax->x - col->getMin().x + 0.001f); // -する
256
-
257
- }
258
-
259
- box.mMin->x += adjust;
260
-
261
- box.mMax->x += adjust;
262
-
263
- }
264
-
265
- }
266
-
267
- else {
268
-
269
- //Trigger true
270
-
271
- }
272
-
273
- }
274
-
275
- else
276
-
277
- {
278
-
279
-
280
-
281
- //当たってない時
282
-
283
- setCol(false);
284
-
285
- setColTag(Tag::Invalid);
286
-
287
- col->setColTag(Tag::Invalid);
288
-
289
-
290
-
291
- }
292
-
293
-
294
-
295
-
296
-
297
-
298
-
299
-
517
+ printf("getMax address %x\n", box.mMax);
518
+
519
+
520
+
521
+ return *box.mMax;
522
+
523
+ }
524
+
525
+
526
+
527
+ //最小値を取得
528
+
529
+ glm::vec2 BoxCollision::getMin()
530
+
531
+ {
532
+
533
+ printf("getMin address %x\n", box.mMin);
534
+
535
+
536
+
537
+ return *box.mMin;
538
+
539
+ }
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+ // #################################### 設定 関係
550
+
551
+
552
+
553
+ //最大値を設定
554
+
555
+ void BoxCollision::setMax(glm::vec2 *max)
556
+
557
+ {
558
+
559
+ box.mMax = max;
560
+
561
+ printf("setMax address %x\n", box.mMax);
562
+
563
+
564
+
565
+ }
566
+
567
+
568
+
569
+ //最小値を設定
570
+
571
+ void BoxCollision::setMin(glm::vec2 *min)
572
+
573
+ {
574
+
575
+ box.mMin = min;
576
+
577
+ printf("setMin address %x\n",box.mMin);
300
578
 
301
579
  }
302
580
 
303
581
 
304
582
 
305
583
  ```
306
-
307
-
308
-
309
- ```cpp
310
-
311
-
312
-
313
- //最大値を取得
314
-
315
- glm::vec2 BoxCollision::getMax()
316
-
317
- {
318
-
319
- return *box.mMax;
320
-
321
- }
322
-
323
-
324
-
325
- //最小値を取得
326
-
327
- glm::vec2 BoxCollision::getMin()
328
-
329
- {
330
-
331
- return *box.mMin;
332
-
333
- }
334
-
335
-
336
-
337
- ```

2

タイトルの誤字を修正

2021/03/22 12:50

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- std::shrad_ptr<>で受け取った値がおかしくなる原因が知りたい。
1
+ std::shared_ptr<>で受け取った値がおかしくなる原因が知りたい。
test CHANGED
File without changes

1

文章を修正しました。

2021/03/22 10:48

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
-
9
+ Github: https://github.com/Shigurechan/ActionGame/tree/b9dcf414851398afc9a592dfc62842140c5c4a85
10
10
 
11
11
 
12
12
 
@@ -303,3 +303,35 @@
303
303
 
304
304
 
305
305
  ```
306
+
307
+
308
+
309
+ ```cpp
310
+
311
+
312
+
313
+ //最大値を取得
314
+
315
+ glm::vec2 BoxCollision::getMax()
316
+
317
+ {
318
+
319
+ return *box.mMax;
320
+
321
+ }
322
+
323
+
324
+
325
+ //最小値を取得
326
+
327
+ glm::vec2 BoxCollision::getMin()
328
+
329
+ {
330
+
331
+ return *box.mMin;
332
+
333
+ }
334
+
335
+
336
+
337
+ ```