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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

408閲覧

ゲームの当たり判定がうまくできません

elmo1044

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/01/26 05:05

編集2019/01/26 05:26

前提・実現したいこと

授業の課題でゲームを作っています。
上から降ってくる球をキャッチするゲームです。

発生している問題・エラーメッセージ

当たり判定がうまくいっていません。 球がバーに当たったら色を背景と同じにする、もしくは見えなくして消えさせたいのですが、すり抜けてしまいます。

該当のソースコード

Java

1Basket basket; 2Tanni tanni; 3 4float i = 0; 5 6void setup() { 7 size(1000,800); 8 //fullScreen(); 9 noCursor(); 10 basket = new Basket(); 11 tanni = new Tanni(); 12}; 13 14void draw() { 15 //background(0); 16 fill(0,50); 17 rect(0, 0, width, height); 18 19//keyboard no baai 20 if (keyPressed == true){ 21 if (key == CODED) { 22 if (keyCode == RIGHT) { 23 i++; 24 } else if (keyCode == LEFT) { 25 i--; 26 } else { 27 i = 0; 28 }; 29 } 30 } 31 32 tanni.update(); 33 tanni.display(); 34 35 basket.update(); 36 basket.display(); 37 38//atari hantei 39 boolean hit = hit(basket, tanni); 40 if(hit == true){ 41 tanni.toreta(basket); 42 } 43 /*if((basket.j <= tanni.y) && (tanni.x >= basket.left) && (tanni.x <= basket.right)) { 44 tanni.toreta(); 45 }*/ 46} 47 48boolean hit(Basket b, Tanni t){ 49 if((b.j <= t.y) && (t.x >= b.left) && (t.x <= b.right)) { 50 return true; 51 } else { 52 return false; 53 } 54 } 55 56class Basket { 57 58 float l; 59 int j = height-100; //basket no enchoku ichi 60 int w = 100; //basket no hirosa 61 int h = 10; //basket no takasa 62 63 float left = l - w/2; 64 float right = l + w/2; 65 66 void update() { 67 68 l = width/2 + 10*i; //i ga heruto hidari, i ga fueruto migi 69 l = constrain(l, 200, width-200); //hasikko sitei 70 71 } 72 73 void display() { 74 fill(255); 75 rect(l-w/2, j, w, h); 76 } 77 78} 79 80 81class Tanni { 82 float x, y; //hajimari no ichi 83 int koma = int(random(1,4)); //tanni no kazu 84 int type = int(random(5)); //tanni no shurui 85 int dia; //hannkei 86 float speed = random(3,5); //ochiru hayasa 87 88 //tanni no iro 89 int r, g, b; 90 91 Tanni(){ 92 x = width/2; 93 y = -dia/2; 94 } 95 96 void update() { 97 dia = koma * -20 + 90; 98 y += speed; 99 100 switch(type) { 101 case 0: //fuka 102 r = 255; g = 0; b = 0; 103 break; 104 case 1: //ka 105 r = 0; g = 255; b = 0; 106 break; 107 case 2: //ryou 108 r = 0; g = 0; b = 255; 109 break; 110 case 3: //yuu 111 r = 255; g = 255; b = 0; 112 break; 113 case 4: //shuu 114 r = 255; g = 0; b = 255; 115 break; 116 } 117 118 //ichibann sita made ochita toki 119 if (y > height + dia) { 120 x = random(200, width-200); 121 y = -dia/2; 122 koma = int(random(1,4)); 123 type = int(random(5)); 124 speed = random(3,5); 125 } 126 } 127 128 void display() { 129 fill(r, g, b); 130 noStroke(); 131 ellipse(x, y, dia, dia); 132 } 133 134//tanni ga toreta toki 135 void toreta(Basket s) { 136 r = 0; g = 0; b = 0; 137 //dia = 0; 138 } 139 140}

試したこと

booleanとifの両方を試してみましたがどちらもダメでした。

補足情報(FW/ツールのバージョンなど)

processingを使っています。

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

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

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

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

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

Stan_Dma

2019/01/26 05:21

You should code "if(collision == true)" instead of "if(hit == true)".
guest

回答1

0

ベストアンサー

Processing

1boolean hit(Basket b, Tanni t) { 2 println(String.format("b.j=%d t.y=%f t.x=%f b.right=%f b.left=%f", 3 b.j,t.y,t.x,b.left,b.right)); 4 if ((b.j <= t.y) && (t.x >= b.left) && (t.x <= b.right)) { 5 return true; 6 } else { 7 return false; 8 } 9}

とでもして、各変数の値を調べてみましょう。値が期待通りでない変数を見つけて、なぜそんなことになるのか考えれば解決するでしょう。

余計なお世話ですが、Tanniというシンボル名は、それが表しているものに対して適切でしょうか。私だったら減点にするかも知れません。採点者の性格を把握して、適切に使ってくださいね。

投稿2019/01/26 11:50

編集2019/01/26 11:51
thkana

総合スコア7629

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

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

elmo1044

2019/01/28 04:50

アンサーのコードを挿入して値を確認したらbasketのleft,rightの設定がうまくいっていなかったようです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問