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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

3310閲覧

android Rect intersects 配列のRectとの当たり判定

masaakitsuyoshi

総合スコア102

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/05/16 08:05

androidでブロック崩しを作っています。
Rectとintersectsを使って当たり判定を書いています。

ボールとバー(ラケット)

//barとボールの交差判定 Rectを使った場合 public boolean collideWidth(Ball ball2) { RectF rectCheck = new RectF();//判定用 RectF rect_bar = new RectF(bar.x - bar.halfBar , bar.y - bar.height , bar.x + bar.halfBar , bar.y + bar.height);//当たり判定用rect bar RectF rect_ball=new RectF(ball.x - ball.size , ball.y - ball.size , ball.x + ball.size, ball.y + ball.size );//当たり判定用のrect ball return rectCheck.intersects(rect_bar,rect_ball);//intersect=交差メソッド ボールが交差したらtrue }

ブロックとボールの当たり判定を書いている途中です。
下記のような感じで合ってますか?

前提
ブロックを配列で書いているので、RectFでも配列を使って初期化しています。
ブロック 横個数は画面のサイズによって変えている
立て個数は10段(block10[])

考え方としては、どれかのブロックに当たった時に真を返す
つまり 偽 偽 偽 偽 真 偽 偽 偽……
と、一つ以上の真があれば、return trueにする
というので合ってるでしょうか。

ブロックとボール(こんなかんじ?)

//ブロックとボールの当たり判定 public boolean collideWidth2(Ball ball3) { RectF rectCheck2 = new RectF();//判定用 RectF rect_block[] = new RectF[num]; RectF rect_block2[] = new RectF[num]; RectF rect_block3[] = new RectF[num]; RectF rect_block4[] = new RectF[num]; RectF rect_block5[] = new RectF[num]; RectF rect_block6[] = new RectF[num]; RectF rect_block7[] = new RectF[num]; RectF rect_block8[] = new RectF[num]; RectF rect_block9[] = new RectF[num]; RectF rect_block10[] = new RectF[num]; for(int i = 0;i<num;i++) { rect_block[i] = new RectF(block[i].x -blockWidth,block[i].y -blockHeight, block[i].x +blockWidth, block[i].y + blockHeight); rect_block2[i] = new RectF(block2[i].x -blockWidth,block2[i].y -blockHeight, block2[i].x +blockWidth, block2[i].y + blockHeight); rect_block3[i] = new RectF(block3[i].x -blockWidth,block3[i].y -blockHeight, block3[i].x +blockWidth, block3[i].y + blockHeight); rect_block4[i] = new RectF(block4[i].x -blockWidth,block4[i].y -blockHeight, block4[i].x +blockWidth, block4[i].y + blockHeight); rect_block5[i] = new RectF(block5[i].x -blockWidth,block5[i].y -blockHeight, block5[i].x +blockWidth, block5[i].y + blockHeight); rect_block6[i] = new RectF(block6[i].x -blockWidth,block6[i].y -blockHeight, block6[i].x +blockWidth, block6[i].y + blockHeight); rect_block7[i] = new RectF(block7[i].x -blockWidth,block7[i].y -blockHeight, block7[i].x +blockWidth, block7[i].y + blockHeight); rect_block8[i] = new RectF(block8[i].x -blockWidth,block8[i].y -blockHeight, block8[i].x +blockWidth, block8[i].y + blockHeight); rect_block9[i] = new RectF(block9[i].x -blockWidth,block9[i].y -blockHeight, block9[i].x +blockWidth, block9[i].y + blockHeight); rect_block10[i] = new RectF(block10[i].x -blockWidth,block10[i].y -blockHeight, block10[i].x +blockWidth, block10[i].y + blockHeight); } RectF rect_ball= new RectF(ball.x - ball.size , ball.y - ball.size , ball.x + ball.size, ball.y + ball.size );//当たり判定用のrect ball boolean blockFlag[] = for(int i = 0;i<num;i++) { rectCheck2.intersects(rect_ball, rect_block[i]);//intersect=交差メソッド ボールが交差したらtrue rectCheck2.intersects(rect_ball, rect_block2[i]); rectCheck2.intersects(rect_ball, rect_block3[i]); rectCheck2.intersects(rect_ball, rect_block4[i]); rectCheck2.intersects(rect_ball, rect_block5[i]); rectCheck2.intersects(rect_ball, rect_block6[i]); rectCheck2.intersects(rect_ball, rect_block7[i]); rectCheck2.intersects(rect_ball, rect_block8[i]); rectCheck2.intersects(rect_ball, rect_block9[i]); rectCheck2.intersects(rect_ball, rect_block10[i]); } return if (blockFlag[]) {true} else false; }

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

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

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

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

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

guest

回答1

0

そもそも、当たったかどうかではなく、どのブロックに当たったかを判定しないと意味ないですよね。

すべてのブロックを保持しているフィールド変数に対してintersectsを行い、該当のブロックを返却するメソッドを作るべきです。

投稿2016/05/16 12:38

yona

総合スコア18155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問