質問編集履歴

1

プログラムの方針を変更。

2018/11/09 08:55

投稿

R908
R908

スコア15

test CHANGED
@@ -1 +1 @@
1
- 円同士の衝突判定とプログラム終了
1
+ 円同士の衝突判定について
test CHANGED
@@ -1,18 +1,10 @@
1
- c++初心者中の初心者です。いま円形のキャラクターをマウスで操作し、周りにいる複数の円形の敵にぶつかったらゲームオーバーというプログラムを作っていて、キャラクターと敵を複数作り、動かすとこまでできたのですが、衝突判定の部分がうまくいかずてこずっています。
1
+ c++初心者中の初心者です。いま円形のキャラクターをマウスで操作し、周りにいる複数の円形の敵にぶつかったら敵が止まるというプログラムを作っていて、キャラクターと敵を複数作り、動かすとこまでできたのですが、衝突判定の部分がうまくいかずてこずっています。
2
-
2
+
3
- そこで教えてほしいことが二つあります、
3
+ そこで教えてほしいことがあります、
4
-
5
-
6
-
7
- **1.衝突判定のコードの書き方について**
4
+
8
-
5
+
6
+
9
-  ネットで調べたところhttp://www.gamecorder.net/collision/collision2.phpにかいてあるような考え方があったので、その通りにコードを書いたのですがビルドエラー発生しました。原因がよくわかりせん
7
+  ネットで調べたところhttp://www.gamecorder.net/collision/collision2.phpにかいてあるような衝突の考え方があったので、その通りにコードを書いたのですが、衝突していないのに敵ってしまいます
10
-
11
-
12
-
13
- **2.プログラム終了のコマンドについて**
14
-
15
-  こちらもネットで調べたところexitというプログラムプログラムを終了コマンドがあったので、それを使ったのですが、「オーバーロードされた関数のインスタンスが引数リストと合致しません」と出ます。
16
8
 
17
9
 
18
10
 
@@ -44,7 +36,9 @@
44
36
 
45
37
  r1 = 60;
46
38
 
47
-
39
+ x = width / 2;
40
+
41
+ y = height / 2;
48
42
 
49
43
  for (m = 0; m < n; m++) {
50
44
 
@@ -62,6 +56,10 @@
62
56
 
63
57
 
64
58
 
59
+
60
+
61
+
62
+
65
63
 
66
64
 
67
65
 
@@ -94,134 +92,138 @@
94
92
 
95
93
  }
96
94
 
97
-
95
+ if (sqrt((x - X1[m])*(x - X1[m]) + (y - Y1[m])*(y - Y1[m])) <= (r[m] + r1)) {
96
+
97
+ cout << "GAME OVER";
98
+
99
+ dx[m] = 0;
100
+
101
+ dy[m] = 0;
102
+
103
+ break;
104
+
105
+ }
98
106
 
99
107
  }
100
108
 
109
+
110
+
111
+ }
112
+
113
+
114
+
115
+ //--------------------------------------------------------------
116
+
117
+ void ofApp::draw(){
118
+
119
+ int x = mouseX;
120
+
121
+ int y = mouseY;
122
+
123
+ //輪郭
124
+
125
+ ofSetColor(184, 102, 9);
126
+
127
+ ofDrawCircle(x, y, r1);
128
+
129
+ //耳
130
+
131
+ ofSetColor(184, 102, 9);
132
+
133
+ ofDrawEllipse(x - size1 * 0.3067, y - size1 * 0.9833, size1 / 6, size1*0.833);
134
+
135
+ ofDrawEllipse(x + size1 * 0.2933, y - size1 * 0.9833, size1 / 6, size1*0.833);
136
+
137
+ //白目
138
+
139
+ ofSetColor(255, 255, 255);
140
+
141
+ ofDrawEllipse(x - size1 * 0.14, y - size1 * 0.333, size1*0.2333, size1*0.4);
142
+
143
+ ofDrawEllipse(x + size1 * 0.1267, y - size1 * 0.333, size1*0.233, size1*0.4);
144
+
145
+ //黒目
146
+
147
+ ofSetColor(0, 32, 96);
148
+
149
+ ofDrawEllipse(x - size1 * 0.073, y - size1 * 0.3, size1*0.1, size1*0.2);
150
+
151
+ ofDrawEllipse(x + size1 * 0.0667, y - size1 * 0.3, size1*0.1, size1 / 5);
152
+
153
+ //鼻
154
+
155
+ ofSetColor(0, 32, 96);
156
+
157
+ ofDrawEllipse(x + size1 / 30 * 0.1, y, size1 - size1 / 30 * 18.5, size1*0.2667);
158
+
101
-     //↓エラーが出ます
159
+ //鼻テカリ
160
+
102
-
161
+ ofSetColor(255, 255, 255);
162
+
163
+ ofDrawRectangle(x - size1 * 0.0733, y - size1 * 0.0667, size1*0.1333, size1*0.067);
164
+
165
+ //右眉毛
166
+
167
+ ofSetColor(0, 32, 96);
168
+
169
+ ofDrawLine(x - size1 / 30 * 10.2, y - size1 / 30 * 13, x - size1 / 30 * 3.2, y - size1 / 30 * 22);
170
+
171
+ ofSetLineWidth(4);
172
+
173
+ //左眉毛
174
+
175
+ ofSetColor(0, 32, 96);
176
+
177
+ ofDrawLine(x + size1 / 30 * 9.8, y - size1 / 30 * 13, x + size1 / 30 * 3.3, y - size1 / 30 * 22);
178
+
179
+ ofSetLineWidth(4);
180
+
181
+ //口
182
+
183
+ ofSetColor(0, 32, 96);
184
+
103
- if ((x - X1[50])*(x - X1[50]) + (y - Y1[50])*(y - Y1[50]) >= (r[50] + r1)*(r[50] + r1)) {
185
+ ofDrawLine(x - size1 / 30 * 5.2, y + size1 / 30 * 13, x + size1 / 30 * 5.8, y + size1 / 30 * 13);
104
-
186
+
105
- exit(1);
187
+ ofSetLineWidth(4);
188
+
189
+
190
+
191
+ //敵
192
+
193
+ for (m = 0; m < n; m++) {
194
+
195
+ //顔
196
+
197
+ ofSetColor(80, 0, 204);
198
+
199
+ ofDrawCircle(X1[m], Y1[m], r[m]);
200
+
201
+ //白目
202
+
203
+ ofSetColor(255, 255, 255);
204
+
205
+ ofDrawCircle(X1[m] - r[m] / 2.5, Y1[m], r[m] / 5);
206
+
207
+ ofDrawCircle(X1[m] + r[m] / 2.5, Y1[m], r[m] / 5);
208
+
209
+ //赤目
210
+
211
+ ofSetColor(255,0,0);
212
+
213
+ ofDrawCircle(X1[m] - r[m] / 2.5, Y1[m], r[m] / 7);
214
+
215
+ ofDrawCircle(X1[m] + r[m] / 2.5, Y1[m], r[m] / 7);
106
216
 
107
217
  }
108
218
 
109
-
219
+
110
220
 
111
221
  }
112
222
 
113
223
 
114
224
 
115
- //--------------------------------------------------------------
116
-
117
- void ofApp::draw(){
118
-
119
- int x = mouseX;
120
-
121
- int y = mouseY;
122
-
123
- //輪郭
124
-
125
- ofSetColor(184, 102, 9);
126
-
127
- ofDrawCircle(x, y, r1);
128
-
129
- //耳
130
-
131
- ofSetColor(184, 102, 9);
132
-
133
- ofDrawEllipse(x - size1 * 0.3067, y - size1 * 0.9833, size1 / 6, size1*0.833);
134
-
135
- ofDrawEllipse(x + size1 * 0.2933, y - size1 * 0.9833, size1 / 6, size1*0.833);
136
-
137
- //白目
138
-
139
- ofSetColor(255, 255, 255);
140
-
141
- ofDrawEllipse(x - size1 * 0.14, y - size1 * 0.333, size1*0.2333, size1*0.4);
142
-
143
- ofDrawEllipse(x + size1 * 0.1267, y - size1 * 0.333, size1*0.233, size1*0.4);
144
-
145
- //黒目
146
-
147
- ofSetColor(0, 32, 96);
148
-
149
- ofDrawEllipse(x - size1 * 0.073, y - size1 * 0.3, size1*0.1, size1*0.2);
150
-
151
- ofDrawEllipse(x + size1 * 0.0667, y - size1 * 0.3, size1*0.1, size1 / 5);
152
-
153
- //鼻
154
-
155
- ofSetColor(0, 32, 96);
156
-
157
- ofDrawEllipse(x + size1 / 30 * 0.1, y, size1 - size1 / 30 * 18.5, size1*0.2667);
158
-
159
- //鼻テカリ
160
-
161
- ofSetColor(255, 255, 255);
162
-
163
- ofDrawRectangle(x - size1 * 0.0733, y - size1 * 0.0667, size1*0.1333, size1*0.067);
164
-
165
- //右眉毛
166
-
167
- ofSetColor(0, 32, 96);
168
-
169
- ofDrawLine(x - size1 / 30 * 10.2, y - size1 / 30 * 13, x - size1 / 30 * 3.2, y - size1 / 30 * 22);
170
-
171
- ofSetLineWidth(4);
172
-
173
- //左眉毛
174
-
175
- ofSetColor(0, 32, 96);
176
-
177
- ofDrawLine(x + size1 / 30 * 9.8, y - size1 / 30 * 13, x + size1 / 30 * 3.3, y - size1 / 30 * 22);
178
-
179
- ofSetLineWidth(4);
180
-
181
- //口
182
-
183
- ofSetColor(0, 32, 96);
184
-
185
- ofDrawLine(x - size1 / 30 * 5.2, y + size1 / 30 * 13, x + size1 / 30 * 5.8, y + size1 / 30 * 13);
186
-
187
- ofSetLineWidth(4);
188
-
189
-
190
-
191
- //敵
192
-
193
- for (m = 0; m < n; m++) {
194
-
195
- //顔
196
-
197
- ofSetColor(80, 0, 204);
198
-
199
- ofDrawCircle(X1[m], Y1[m], r[m]);
200
-
201
- //白目
202
-
203
- ofSetColor(255, 255, 255);
204
-
205
- ofDrawCircle(X1[m] - r[m] / 2.5, Y1[m], r[m] / 5);
206
-
207
- ofDrawCircle(X1[m] + r[m] / 2.5, Y1[m], r[m] / 5);
208
-
209
- //赤目
210
-
211
- ofSetColor(255,0,0);
212
-
213
- ofDrawCircle(X1[m] - r[m] / 2.5, Y1[m], r[m] / 7);
214
-
215
- ofDrawCircle(X1[m] + r[m] / 2.5, Y1[m], r[m] / 7);
216
-
217
- }
218
-
219
-
220
-
221
- }
222
-
223
-
224
-
225
225
  ```
226
226
 
227
+ どうすれば正常に動きますか?
228
+
227
229
  ぜひとも回答をお願いします。