独自メソッドの変数にアクセスできない RectF.intersects
- 評価
- クリップ 0
- VIEW 1,867
androidのブロック崩しを作っています。ブロック10段。
drawRectで描画したブロック(レンガ)とdrawCircleで描画したボールの衝突判定を行いたいです。
どちらもRectFを使って衝突判定します。
そこで、独自メソッドcollideWidth2のreturnで
RectF で作ったブロック配列の変数 rect_block, rect_block2(2段目),rect_block3(3段目)・・・の値を使いたいのですが、スコープの範囲外なのでローカル変数を作れ、と言われます。
どうなおせばよいでしょうか。
追記
if (rectCheck.intersects(rect_ball, rect_block)) {
return true;}
の rect_block部分にエラーが出ています。
forループの中のrect_block が never used となっています。
警告内容
・cannot resolve symbol rect_block
collideWidth2のローカル変数 rect_blockを作れ
・RectF rect_block = null; としてrect_blockをforループの外に出せ
・rect_block を Blockクラスのフィールド変数にせよ
といった警告がでます。
public class Block {
float x; // ブロックのx座標
float y; // ブロックのy座標
int width =40;
int height=10; // ブロックの幅、高さ
int margin = 5; //ブロックの間のマージン
final int NUM_BLOCK = 8;
//コンストラクタ
public Block (int _x,int _y){
this.x = (float)_x;
this.y = (float)_y;
}
public boolean collideWieth2(int view_w, int view_h, Ball _ball,Block[] _block, Block[] _block2, Block[] _block3, Block[] _block4, Block[] _block5, Block[] _block6, Block[] _block7, Block[] _block8, Block[] _block9, Block[] _block10) {
RectF rectCheck = new RectF();//判定用
RectF rect_ball = new RectF(_ball.x - _ball.size, _ball.y - _ball.size, _ball.x + _ball.size, _ball.y + _ball.size);//当たり判定用のrect ball
for(int i = 0;i< NUM_BLOCK ;i++ )
{
_block[i] = new Block(view_w/NUM_BLOCK + (_block[i].width*2+ margin)*i, view_h/10);//blockのx座標とy座標 マージン分横にずらしている
_block2[i] = new Block (view_w/NUM_BLOCK + (_block2[i].width*2+ margin)*i, view_h/10 + (_block2[i].height*2 + margin));
_block3[i] = new Block (view_w/NUM_BLOCK + (_block3[i].width*2+ margin)*i, view_h/10 + (_block3[i].height*2 + margin)*2);
_block4[i] = new Block (view_w/NUM_BLOCK + (_block4[i].width*2+ margin)*i, view_h/10 + (_block4[i].height*2 + margin)*3);
_block5[i] = new Block (view_w/NUM_BLOCK + (_block5[i].width*2+ margin)*i, view_h/10 + (_block5[i].height*2 + margin)*4);
_block6[i] = new Block (view_w/NUM_BLOCK + (_block6[i].width*2+ margin)*i, view_h/10 + (_block6[i].height*2 + margin)*5);
_block7[i] = new Block (view_w/NUM_BLOCK + (_block7[i].width*2+ margin)*i, view_h/10 + (_block7[i].height*2 + margin)*6);
_block8[i] = new Block (view_w/NUM_BLOCK + (_block8[i].width*2+ margin)*i, view_h/10 + (_block8[i].height*2 + margin)*7);
_block9[i] = new Block (view_w/NUM_BLOCK + (_block9[i].width*2+ margin)*i, view_h/10 + (_block9[i].height*2 + margin)*8);
_block10[i] = new Block (view_w/NUM_BLOCK + (_block10[i].width*2+ margin)*i, view_h/10 + (_block10[i].height*2 + margin)*9);
}
for (int i = 0; i < NUM_BLOCK; i++) {
RectF rect_block = new RectF(_block[i].x - _block[i].width, _block[i].y - _block[i].height, _block[i].x + _block[i].width, _block[i].y + _block[i].height);
RectF rect_block2 = new RectF(_block2[i].x - _block2[i].width, _block2[i].y - _block2[i].height, _block2[i].x + _block2[i].width, _block2[i].y + _block2[i].height);
RectF rect_block3 = new RectF(_block3[i].x - _block3[i].width, _block3[i].y - _block3[i].height, _block3[i].x + _block3[i].width, _block3[i].y + _block3[i].height);
RectF rect_block4 = new RectF(_block4[i].x - _block4[i].width, _block4[i].y - _block4[i].height, _block4[i].x + _block4[i].width, _block4[i].y + _block4[i].height);
RectF rect_block5 = new RectF(_block5[i].x - _block5[i].width, _block5[i].y - _block5[i].height, _block5[i].x + _block5[i].width, _block5[i].y + _block5[i].height);
RectF rect_block6 = new RectF(_block6[i].x - _block6[i].width, _block6[i].y - _block6[i].height, _block6[i].x + _block6[i].width, _block6[i].y + _block6[i].height);
RectF rect_block7 = new RectF(_block7[i].x - _block7[i].width, _block7[i].y - _block7[i].height, _block7[i].x + _block7[i].width, _block7[i].y + _block7[i].height);
RectF rect_block8 = new RectF(_block8[i].x - _block8[i].width, _block8[i].y - _block8[i].height, _block8[i].x + _block8[i].width, _block8[i].y + _block8[i].height);
RectF rect_block9 = new RectF(_block9[i].x - _block9[i].width, _block9[i].y - _block9[i].height, _block9[i].x + _block9[i].width, _block9[i].y + _block9[i].height);
RectF rect_block10 = new RectF(_block10[i].x - _block10[i].width, _block10[i].y - _block10[i].height, _block10[i].x + _block10[i].width, _block10[i].y + _block10[i].height);
}
if (rectCheck.intersects(rect_ball,rect_block)) { return true; }
else if (rectCheck.intersects(rect_ball,rect_block2)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block3)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block4)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block5)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block6)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block7)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block8)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block9)) { return true;}
else if (rectCheck.intersects(rect_ball,rect_block10)) { return true;}
else {return false;}
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
forブロックの中で宣言した変数はforブロックの中でしか使えませんよ。
forブロックの閉じかっこをifブロックの後に移動するといいでしょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
yona
2016/05/20 17:53
質問からは変数、メソッドがどのクラスにあり、何がスコープの範囲外なのか読み取れません。
masaakitsuyoshi
2016/05/20 18:04 編集
追記しました。同一クラスの同一メソッド内です。collideWidthのforの中に入っている変数に、collideWidth内からアクセスできません。別の変数rectCheck rect_ballなどはアクセスできています。rect_blockが配列型なのが原因でしょうか?