質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

2392閲覧

円同士の衝突判定について

R908

総合スコア15

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/11/08 15:09

編集2018/11/09 08:55

c++初心者中の初心者です。いま円形のキャラクターをマウスで操作し、周りにいる複数の円形の敵にぶつかったら敵が止まるというプログラムを作っていて、キャラクターと敵を複数作り、動かすとこまでできたのですが、衝突判定の部分がうまくいかずてこずっています。
そこで教えてほしいことがあります、

 ネットで調べたところhttp://www.gamecorder.net/collision/collision2.phpにかいてあるような衝突の考え方があったので、その通りにコードを書いたのですが、衝突していないのに敵が止まってしまいます。

c++

1#include "ofApp.h" 2float x, y,r1, size1; 3float X1[50], Y1[50], r[50], dx[50], dy[50]; 4int width,height,m, n; 5//-------------------------------------------------------------- 6void ofApp::setup(){ 7 ofBackground(255, 255, 255); 8 width = ofGetWidth(); 9 height = ofGetHeight(); 10 ofSetCircleResolution(64); 11 size1 = 50; 12 n = 15; 13 r1 = 60; 14 x = width / 2; 15 y = height / 2; 16 for (m = 0; m < n; m++) { 17 r[m]= ofRandom(35.0, 50.0); 18 X1[m] = r[m]; 19 Y1[m] = ofRandom(r[m], height - r[m]); 20 dx[m] = ofRandom(5,10); 21 dy[m] = ofRandom(5,10); 22 } 23 24 25 26 27 28} 29 30//-------------------------------------------------------------- 31void ofApp::update(){ 32 33 for (m = 0; m < n; m++) { 34 X1[m] = X1[m] + dx[m]; 35 if (X1[m] <= r[m] || X1[m] >= width - r[m]) { 36 dx[m] = -dx[m]; 37 } 38 Y1[m] = Y1[m] + dy[m]; 39 if (Y1[m] <= r[m] || Y1[m] >= height - r[m]) { 40 dy[m] = -dy[m]; 41 } 42 if (sqrt((x - X1[m])*(x - X1[m]) + (y - Y1[m])*(y - Y1[m])) <= (r[m] + r1)) { 43 cout << "GAME OVER"; 44 dx[m] = 0; 45 dy[m] = 0; 46 break; 47 } 48 } 49 50} 51 52//-------------------------------------------------------------- 53void ofApp::draw(){ 54 int x = mouseX; 55 int y = mouseY; 56 //輪郭 57 ofSetColor(184, 102, 9); 58 ofDrawCircle(x, y, r1); 59 //耳 60 ofSetColor(184, 102, 9); 61 ofDrawEllipse(x - size1 * 0.3067, y - size1 * 0.9833, size1 / 6, size1*0.833); 62 ofDrawEllipse(x + size1 * 0.2933, y - size1 * 0.9833, size1 / 6, size1*0.833); 63 //白目 64 ofSetColor(255, 255, 255); 65 ofDrawEllipse(x - size1 * 0.14, y - size1 * 0.333, size1*0.2333, size1*0.4); 66 ofDrawEllipse(x + size1 * 0.1267, y - size1 * 0.333, size1*0.233, size1*0.4); 67 //黒目 68 ofSetColor(0, 32, 96); 69 ofDrawEllipse(x - size1 * 0.073, y - size1 * 0.3, size1*0.1, size1*0.2); 70 ofDrawEllipse(x + size1 * 0.0667, y - size1 * 0.3, size1*0.1, size1 / 5); 71 //鼻 72 ofSetColor(0, 32, 96); 73 ofDrawEllipse(x + size1 / 30 * 0.1, y, size1 - size1 / 30 * 18.5, size1*0.2667); 74 //鼻テカリ 75 ofSetColor(255, 255, 255); 76 ofDrawRectangle(x - size1 * 0.0733, y - size1 * 0.0667, size1*0.1333, size1*0.067); 77 //右眉毛 78 ofSetColor(0, 32, 96); 79 ofDrawLine(x - size1 / 30 * 10.2, y - size1 / 30 * 13, x - size1 / 30 * 3.2, y - size1 / 30 * 22); 80 ofSetLineWidth(4); 81 //左眉毛 82 ofSetColor(0, 32, 96); 83 ofDrawLine(x + size1 / 30 * 9.8, y - size1 / 30 * 13, x + size1 / 30 * 3.3, y - size1 / 30 * 22); 84 ofSetLineWidth(4); 85 //口 86 ofSetColor(0, 32, 96); 87 ofDrawLine(x - size1 / 30 * 5.2, y + size1 / 30 * 13, x + size1 / 30 * 5.8, y + size1 / 30 * 13); 88 ofSetLineWidth(4); 89 90 //敵 91 for (m = 0; m < n; m++) { 92 //顔 93 ofSetColor(80, 0, 204); 94 ofDrawCircle(X1[m], Y1[m], r[m]); 95 //白目 96 ofSetColor(255, 255, 255); 97 ofDrawCircle(X1[m] - r[m] / 2.5, Y1[m], r[m] / 5); 98 ofDrawCircle(X1[m] + r[m] / 2.5, Y1[m], r[m] / 5); 99 //赤目 100 ofSetColor(255,0,0); 101 ofDrawCircle(X1[m] - r[m] / 2.5, Y1[m], r[m] / 7); 102 ofDrawCircle(X1[m] + r[m] / 2.5, Y1[m], r[m] / 7); 103 } 104 105} 106

どうすれば正常に動きますか?
ぜひとも回答をお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/11/08 23:00

エラーメッセージを提示してください。省略せずに、そのまま貼り付けてください
R908

2018/11/09 07:05

exitについて「'void ofBaseApp::exit(ofEventArgs &)':引数1を'int'から'ofEventArgs &'へ変換できません」と表示されています。
guest

回答2

0

float X1[50], Y1[50], r[50], dx[50], dy[50];

if ((x - X1[50])(x - X1[50]) + (y - Y1[50])(y - Y1[50]) >= (r[50] + r1)*(r[50] + r1)) {

そもそも配列X1の有効なインデックス値は0~49なので、50はアクセス違反です。
ここはループでやるところではないでしょうか?

投稿2018/11/09 02:30

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R908

2018/11/09 05:57

確かにその通りでした。 書き直します。
guest

0

こんにちは。

#include "ofApp.h"をコメントアウトしてみましたが、とりあえず記載されている行ではエラーはでませんでした。(gcc, VC++) 該当のエラー・メッセージを全て記載するか、エラーを再現可能な最小のソースをご提示された方が正確な回答が付きやすいですよ。
//↓エラーが出ますの行ではエラーがでましたが、恐らく質問の際に追加された行と思います。その際に全角スペースでインデントされているのだろうと思います。

「オーバーロードされた関数のインスタンスが引数リストと合致しません」は,ofApp.hの中でexit()関数が定義されているのではないかと思います。それは引数が1個ではないはずです。(だから引数リストが合わない)

投稿2018/11/09 02:27

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R908

2018/11/09 06:07

全角スペース押してました。笑 exit()についてですが、ofApp.hの中で定義はされていないと思います。 ↓ofApp.h #pragma once #include "ofMain.h" class ofApp : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void mouseEntered(int x, int y); void mouseExited(int x, int y); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); }
Chironian

2018/11/09 07:29

ということは、ご提示のソースでは再現しないということですので、私にも分からないです。 問題を再現できる最小のソースを提示されると解決しやすいですよ。 そのようなソースを作っている過程で問題が解決することも多いです。解決しなければそのまま質問するとよいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問