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

質問編集履歴

2

提示コードを追加

2021/02/09 06:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -30,9 +30,170 @@
30
30
  }
31
31
  }
32
32
 
33
+ }
34
+ ```
33
35
 
36
+ ```cpp
37
+ #ifndef ___STAGE_HPP_
38
+ #define ___STAGE_HPP_
34
39
 
40
+ #include "MapObject.hpp"
41
+ #include "Object.hpp"
42
+ #include "../Entry.hpp"
35
43
 
36
44
 
45
+ #include <iostream>
46
+
47
+ // 画面のセルの数
48
+ #define SCREEN_WIDTH_CELL ((int)((int)SCREEN_WIDTH / CELL))
49
+ #define SCREEN_HEIGHT_CELL ((int)((int)SCREEN_HEIGHT / CELL))
50
+
51
+
52
+ class Stage : Actor_2D
53
+ {
54
+ public:
55
+ Stage(Entry* e);
56
+
57
+ ~Stage();
58
+
59
+ void Update() override;
60
+ void Draw()override;
61
+
62
+ std::vector<MapObject> getMapObject(); //マップオブジェクトを取得
63
+
64
+ private:
65
+
66
+
67
+
68
+ std::vector<MapObject> Area;
69
+
70
+
71
+
72
+ };
73
+
74
+ #endif;
75
+
76
+ ```
77
+
78
+ ```cpp
79
+ #include "../../Header/Game/Stage.hpp"
80
+
81
+
82
+ //コンストラクタ
83
+ Stage::Stage(Entry* e) : Actor_2D()
84
+ {
85
+
86
+ std::shared_ptr<TextureData> sprite = LoadTexture("Assets/Block.png");
87
+ std::shared_ptr<TextureData> Item_sprite = LoadTexture("Assets/Item.png");
88
+
89
+
90
+
91
+ // printf("X: %f\n", SCREEN_WIDTH / (float)CELL);
92
+ // printf("Y: %f\n",SCREEN_HEIGHT / (float)CELL);
93
+
94
+
95
+ // ステージ
96
+ int Map[SCREEN_HEIGHT_CELL][SCREEN_WIDTH_CELL] =
97
+ {
98
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
99
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
100
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
101
+ {0,0,0,0,0,0,3,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
102
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
103
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0},
104
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
105
+ {0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
106
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0},
107
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
108
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
109
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
110
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0},
111
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
112
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
113
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
114
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
115
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
116
+ };
117
+
118
+
119
+
120
+ for (int y = 0; y < SCREEN_HEIGHT_CELL; y++)
121
+ {
122
+ for (int x = 0; x < SCREEN_WIDTH_CELL; x++)
123
+ {
124
+
125
+ // ブロック
126
+ if (Map[y][x] == 1)
127
+ {
128
+ Box_Collision_2D col;
129
+ col.setEnable(true);
130
+ col.setPosition(glm::ivec2(CELL * x,( -CELL * y)));
131
+ col.setSize(glm::ivec2(CELL, CELL));
132
+ TextureUV uv;
133
+ uv.start = glm::vec2(0, 0);
134
+ uv.end = glm::vec2(CELL, CELL);
135
+
136
+ Area.push_back(MapObject(e, ObjectType::Brick, sprite, uv, glm::ivec2(CELL * x, (-CELL * y)), col));
137
+
138
+ //レンガ
139
+ }else if (Map[y][x] == 2)
140
+ {
141
+ Box_Collision_2D col;
142
+ col.setEnable(true);
143
+ col.setPosition(glm::ivec2(CELL * x, (-CELL * y)));
144
+ col.setSize(glm::ivec2(CELL, CELL));
145
+ TextureUV uv;
146
+ uv.start = glm::vec2(CELL, CELL);
147
+ uv.end = glm::vec2(CELL * 2, CELL * 2);
148
+
149
+ Area.push_back(MapObject(e, ObjectType::Block, sprite, uv, glm::ivec2(CELL * x, (-CELL * y)), col));
150
+ }
151
+
152
+ // アイテム
153
+ else if (Map[y][x] == 3)
154
+ {
155
+
156
+ Box_Collision_2D col;
157
+ col.setEnable(true);
158
+ col.setPosition(glm::ivec2(CELL * x, (-CELL * y)));
159
+ col.setSize(glm::ivec2(CELL, CELL));
160
+ TextureUV uv;
161
+ uv.start = glm::vec2(0, 0);
162
+ uv.end = glm::vec2(CELL , CELL);
163
+
164
+ Area.push_back(MapObject(e, ObjectType::Item, Item_sprite, uv, glm::ivec2(CELL * x, (-CELL * y)), col));
165
+ }
166
+ }
167
+ }
37
168
  }
169
+
170
+
171
+ std::vector<MapObject> Stage::getMapObject()
172
+ {
173
+ return Area;
174
+ }
175
+
176
+
177
+ void Stage::Update()
178
+ {
179
+ for (std::vector<MapObject>::iterator itr = Area.begin(); itr != Area.end(); itr++)
180
+ {
181
+ itr->Update();
182
+ }
183
+ }
184
+
185
+ void Stage::Draw()
186
+ {
187
+ for (std::vector<MapObject>::iterator itr = Area.begin(); itr != Area.end(); itr++)
188
+ {
189
+ itr->Draw();
190
+ }
191
+ }
192
+
193
+ //デストラクタ
194
+ Stage::~Stage()
195
+ {
196
+
197
+ }
198
+
38
199
  ```

1

文章を修正

2021/02/09 06:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードですが。コメント部のコードでアクセスエラーになります。どうすればいいのでしょうか?
1
+ 提示コードですが。コメント部のコードでアクセスエラーになります。どうすればいいのでしょうか?stage->getMapObject();はマップのベクターなのですがその要素を指定した要素を削除するコードなのですが削除する例外が出てしまいます。どうすればいいのでしょか?
2
2
 
3
3
 
4
4