質問編集履歴

3

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

2021/03/22 12:50

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- std::shared_ptr<>で受け取った値がおかしくなる原因が知りたい。
1
+ [ Dxlib ]アドレスがおかしくなる原因が知りたい。
body CHANGED
@@ -1,11 +1,116 @@
1
- 質問内容[ std::shared_ptr<>の引数をるとなぜか値がおかしくなってしまう原因が知たい ]
2
- 提示コードについてすがMapChipクラスをmStageベクター変数が持っています。そこにコンストラクタで値設定してアドレス私でminとmaxの値設定てそれを当り判定でstd::shared_ptr<>を伝ってIntersect関数で処理されるのですが/////提示画像部というメント内部のコードで提示画像のうに値おかくなりますこれはなぜでしょうか?MapChipコントラクタ部では値がかり設定されていした
1
+ 提示コードですがMapChip変にmCol.変数で座標設定してそれをIntersect関数でポインタ渡しで参照しようとすると値がおかしくなります
2
+ なのでアドレスを表示させました。(提示コード下記) 同じアドレスが表示されてしまうのでこれはなぜでしょうか?よくアドレを調べまたがわかりません
3
3
 
4
4
 
5
+ 利用ライブラリ: dxlib,glm
5
- Github: https://github.com/Shigurechan/ActionGame/tree/b9dcf414851398afc9a592dfc62842140c5c4a85
6
+ GitHub: https://github.com/Shigurechan/ActionGame/tree/93a1306c5a4eddb793054710ef5157717c87fb5c
6
7
 
7
- ![イメージ説明](adaa2cae1eabec3be82a9f00c47cba53.png)
8
8
 
9
+
10
+ ![イメージ説明](0920ee0ba9dc5351fbbf7aa0c04f338d.png)
11
+
12
+ ```
13
+
14
+ //ステージを読み込み
15
+ void Stage::LoadStage()
16
+ {
17
+
18
+ printf("LoadStage\n");
19
+ mStage->clear(); //ステージをクリア
20
+
21
+ // *** ステージロード ***
22
+ glm::ivec2 StageSize = glm::ivec2 (0, 0); //画面サイズ
23
+ FILE* fp = NULL; //ファイルポインタ
24
+
25
+ // fopen_s(&fp, "Assets/Stage/Debug_AI.bin", "rb"); //読み込みモードでファイルを開く
26
+ fopen_s(&fp, "Assets/Stage/Debug.bin", "rb"); //読み込みモードでファイルを開く
27
+
28
+ if (fp != NULL)
29
+ {
30
+ //printf("あああ\n");
31
+ //ステージサイズを読み込む(先頭8バイト)
32
+ fread(&StageSize.x, sizeof(int), 1, fp);
33
+ fread(&StageSize.y, sizeof(int), 1, fp);
34
+
35
+ for (int y = 0; y < StageSize.y; y++)
36
+ {
37
+ std::vector<byte> tmp;
38
+ for (int x = 0; x < (int)StageSize.x; x++)
39
+ {
40
+ byte b = 0;
41
+ fread(&b, sizeof(byte), 1, fp);
42
+ tmp.push_back(b);
43
+
44
+ }
45
+
46
+
47
+ Stage_Grid->push_back(tmp);
48
+
49
+ }
50
+
51
+ fclose(fp); //ファイルを閉じる
52
+
53
+ //mStage->resize(StageSize.x * StageSize.y);
54
+
55
+
56
+ //マップオブジェクトを設定
57
+ for (int y = 0; y < StageSize.y; y++)
58
+ {
59
+ for (int x = 0; x < StageSize.x; x++)
60
+ {
61
+ switch (Stage_Grid->at(y).at(x))
62
+ {
63
+ //ブロック
64
+ case 0x01:
65
+ {
66
+ mStage->push_back(MapChip(Tag::Block, glm::vec2 (x * CELL, y * CELL), BlockSize, Block_sprite));
67
+ //printf("えええええ\n");
68
+
69
+ }
70
+ break;
71
+
72
+ //レンガ
73
+ case 0x02:
74
+ {
75
+ mStage->push_back(MapChip(Tag::Brick, glm::vec2 (x * CELL, y * CELL), BrickSize, Brick_sprite));
76
+ }
77
+ break;
78
+
79
+ //ショップ
80
+ case 0x03:
81
+ {
82
+ mStage->push_back(MapChip(Tag::Shop, glm::vec2 (x * CELL, y * CELL), ShopSize, Shop_sprite));
83
+ }
84
+ break;
85
+
86
+ //なし
87
+ default:
88
+ {
89
+ // mStage->push_back(MapChip(StageObjectType::None, glm::vec2 (x * CELL, y * CELL), glm::vec2 (0, 0), -1));
90
+ }break;
91
+
92
+ }
93
+
94
+
95
+ }
96
+ }
97
+
98
+
99
+ }
100
+ else {
101
+ printf("ファイルを読み込めません。\n");
102
+ }
103
+
104
+
105
+ // printf("%d , %d\n", mStage->at(0).getPosition().x, mStage->at(0).getPosition().y);
106
+
107
+
108
+ //fclose(fp);
109
+
110
+ }
111
+
112
+ ```
113
+
9
114
  ```cpp
10
115
  MapChip::MapChip(Tag t, glm::vec2 pos, glm::vec2 colsize,int handle) : Actor(nullptr)
11
116
  {
@@ -23,50 +128,44 @@
23
128
  size.y = CELL;
24
129
 
25
130
 
26
- mCol = std::make_shared<BoxCollision>();
131
+ // mCol = std::make_shared<BoxCollision>();
132
+ // mCol = std::make_shared<BoxCollision>();
27
133
 
28
134
  minValue = position;
29
135
  maxValue = position + size;
30
136
 
137
+
138
+ mCol.setTag(t); //タグ
139
+ mCol.setMin(&minValue); //最小値
140
+ mCol.setMax(&maxValue); //最大値
141
+
142
+
143
+ /*
31
144
  mCol->setTag(t); //タグ
32
145
  mCol->setMin(&minValue); //最小値
33
146
  mCol->setMax(&maxValue); //最大値
147
+ */
148
+ //printf("ああああ %f %f\n", mCol->getMax().x, mCol->getMax().y);
149
+ // printf("ああああ %f %f\n", mCol->getMin().x, mCol->getMin().y);
34
150
 
35
- printf("ああああ %f %f\n", mCol->getMax().x, mCol->getMax().y);
36
-
37
151
  }
38
152
  ```
39
153
  ```cpp
40
-
41
- //プレイヤーとの当たり判定
42
- void Stage::ColPlayer(std::shared_ptr<Player> player)
43
- {
44
- //printf("%d\n",mStage->size());
45
- for (int i = 0; i < mStage->size(); i++)
46
- {
47
-
48
- player->mCol->Intersect(mStage->at(i).mCol);
49
-
50
- }
51
- }
52
- ```
53
-
54
- ```cpp
55
-
56
- //交差判定
57
- void BoxCollision::Intersect(std::shared_ptr<BoxCollision> col)
154
+ void BoxCollision::Intersect(BoxCollision *col)
58
155
  //void BoxCollision::Intersect(BoxCollision& col)
59
156
  {
60
157
  //printf("えええ\n");
61
158
  //printf("%f , %f \n",box.mMin->x,box.mMin->y);
62
159
  //printf("%f , %f \n",box.mMax->x,box.mMax->y);
63
160
  //
64
- ////////////////////////////////////////////////////////////////////////////////////提示画像部
161
+
65
162
  printf("%f , %f \n", col->getMin().x, col->getMin().y);
66
163
  printf("%f , %f \n", col->getMax().x, col->getMax().y);
164
+
165
+ // printf("col->getMin()");
67
166
  printf("\n\n");
68
- ///////////////////////////////////////////////////////////////////////////////////////
69
167
 
168
+
70
169
  if ((col->getMax().x > box.mMin->x && box.mMax->x > col->getMin().x)
71
170
  && (col->getMax().y > box.mMin->y && box.mMax->y > col->getMin().y))
72
171
  {
@@ -151,19 +250,43 @@
151
250
  }
152
251
 
153
252
  ```
154
-
155
253
  ```cpp
156
254
 
157
255
  //最大値を取得
158
256
  glm::vec2 BoxCollision::getMax()
159
257
  {
258
+
259
+ printf("getMax address %x\n", box.mMax);
260
+
160
261
  return *box.mMax;
161
262
  }
162
263
 
163
264
  //最小値を取得
164
265
  glm::vec2 BoxCollision::getMin()
165
266
  {
267
+ printf("getMin address %x\n", box.mMin);
268
+
166
269
  return *box.mMin;
167
270
  }
168
271
 
272
+
273
+
274
+
275
+ // #################################### 設定 関係
276
+
277
+ //最大値を設定
278
+ void BoxCollision::setMax(glm::vec2 *max)
279
+ {
280
+ box.mMax = max;
281
+ printf("setMax address %x\n", box.mMax);
282
+
283
+ }
284
+
285
+ //最小値を設定
286
+ void BoxCollision::setMin(glm::vec2 *min)
287
+ {
288
+ box.mMin = min;
289
+ printf("setMin address %x\n",box.mMin);
290
+ }
291
+
169
292
  ```

2

タイトルの誤字を修正

2021/03/22 12:50

投稿

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

1

文章を修正しました。

2021/03/22 10:48

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -2,8 +2,8 @@
2
2
  提示コードについてですがMapChipクラスをmStageベクター変数が持っています。そこにコンストラクタで値設定してアドレス私でminとmaxの値を設定してそれを当たり判定でstd::shared_ptr<>を伝ってIntersect関数で処理されるのですが/////提示画像部というコメント内部のコードで提示画像のうに値がおかしくなります。これはなぜでしょうか?MapChipコンストラクタ部では値がしっかり設定されていました。
3
3
 
4
4
 
5
+ Github: https://github.com/Shigurechan/ActionGame/tree/b9dcf414851398afc9a592dfc62842140c5c4a85
5
6
 
6
-
7
7
  ![イメージ説明](adaa2cae1eabec3be82a9f00c47cba53.png)
8
8
 
9
9
  ```cpp
@@ -150,4 +150,20 @@
150
150
 
151
151
  }
152
152
 
153
+ ```
154
+
155
+ ```cpp
156
+
157
+ //最大値を取得
158
+ glm::vec2 BoxCollision::getMax()
159
+ {
160
+ return *box.mMax;
161
+ }
162
+
163
+ //最小値を取得
164
+ glm::vec2 BoxCollision::getMin()
165
+ {
166
+ return *box.mMin;
167
+ }
168
+
153
169
  ```