質問編集履歴
3
文章とタイトルを修正しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
[ Dxlib ]アドレスがおかしくなる原因が知りたい。
|
body
CHANGED
@@ -1,11 +1,116 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
提示コードですがMapChip変数にmCol.変数で座標を設定してそれをIntersect関数でポインタ渡しで参照しようとすると値がおかしくなります。
|
2
|
+
なのでアドレスを表示させました。(提示コード下記) が同じアドレスが表示されてしまうのですがこれはなぜのでしょうか?よくアドレスを調べましたがわかりません。
|
3
3
|
|
4
4
|
|
5
|
+
利用ライブラリ: dxlib,glm
|
5
|
-
|
6
|
+
GitHub: https://github.com/Shigurechan/ActionGame/tree/93a1306c5a4eddb793054710ef5157717c87fb5c
|
6
7
|
|
7
|
-

|
8
8
|
|
9
|
+
|
10
|
+

|
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(
|
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
タイトルの誤字を修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
std::
|
1
|
+
std::shared_ptr<>で受け取った値がおかしくなる原因が知りたい。
|
body
CHANGED
File without changes
|
1
文章を修正しました。
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
|

|
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
|
```
|