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

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

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

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Processing

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

Q&A

1回答

1412閲覧

proccesingでブロック崩しを作っていたところブロックが表示されなくなった

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Processing

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

0グッド

0クリップ

投稿2020/11/16 05:50

前提・実現したいこと

processingでブロック崩しを作りたい

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

ブロックとボールの当たり判定を作ろうとしている際、ブロックが表示されなくなってしまいました。
if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y+40 > bl[i][j].y && is_alive[i][j]){//UP
から始まる当たり判定の部分をコメントアウトすれば表示されるのでその付近の記述がおかしいのだろうと思うのですが……

どのように修正すればブロックが表示されるようになるでしょうか?

該当のソースコード

processing

1Ball b; 2Bar B; 3Block[][] bl; 4boolean is_alive[][] = new boolean[8][6]; 5int x,y; 6 7void setup(){ 8 size(1000,900); 9 b = new Ball(); 10 B = new Bar(); 11 bl = new Block[8][6]; 12 for(int i=0;i<8;i++){ 13 for(int j=0;j<6;j++){ 14 is_alive[i][j] = true; 15 } 16 } 17} 18 19 20 21 22void draw(){ 23 background(200,200,200); 24 b.show(); 25 B.show(); 26 b.update(); 27 for (int i = 0; i < 8; i++) { 28 for (int j = 0; j < 6; j++) { 29 x=i*100+100; 30 y=j*50+100; 31 bl[i][j]= new Block(x,y); 32 } 33 } 34 35 36 if(b.x> mouseX && b.x<mouseX +90 && b.y>770 && b.y<800 ){ 37 b.boundY(); 38 } 39 40 41 for(int i=0;i<8;i++){ 42 for(int j=0;j<6;j++){ 43 if(is_alive[i][j]){ 44 bl[i][j].show(x,y); 45 } 46 47 if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y+40 > bl[i][j].y && is_alive[i][j]){//UP 48 b.boundY(); 49 is_alive[i][j] = false; 50 } 51 else if(b.x+40 >bl[i][j].x &&( b.y > bl[i][j].y && b.y+40 <bl[i][j].y+50) && is_alive[i][j]){//LEFT 52 b.boundX(); 53 is_alive[i][j] = false; 54 }else if(b.x<bl[i][j].x+100 &&( b.y+40 <bl[i][j].y+50 && b.y > bl[i][j].y) && is_alive[i][j]){//RIGHT 55 b.boundX(); 56 is_alive[i][j] = false; 57 }else if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y <bl[i][j].y+50 && is_alive[i][j]){//DOWN 58 b.boundY(); 59 is_alive[i][j] = false; 60 }else if(b.y<bl[i][j].y+50 && b.x+40>bl[i][j].x && is_alive[i][j]){//DOWN_LEFT 61 b.boundXY(); 62 is_alive[i][j] = false; 63 }else if(b.y+40>bl[i][j].y && b.x+40>bl[i][j].x && is_alive[i][j]){//UP_LEFT 64 b.boundXY(); 65 is_alive[i][j] = false; 66 }else if(b.y+40>bl[i][j].y+50 && b.x<bl[i][j].x+50 && is_alive[i][j]){// 67 b.boundXY(); 68 is_alive[i][j] = false; 69 } 70 else if(b.y<bl[i][j].y+50 && b.x<bl[i][j].x+50 && is_alive[i][j]){// 71 b.boundXY(); 72 is_alive[i][j] = false; 73 } 74 75 76 } 77} 78} 79 80public class Block {//ブロック 81 int WIDTH = 100; 82 int HEIGHT = 50; 83 public int x; 84 public int y; 85 86 87public Block(int x, int y) { 88 this.x = x; 89 this.y = y; 90 91 } 92public void show(int x,int y){ 93 rect(x,y,WIDTH,HEIGHT); 94 95} 96} 97 98class Bar{//ボールを打ち返す棒 99 float x,y; 100Bar(){ 101 x=mouseX; 102 y=770; 103} 104 105void show(){ 106 rect(mouseX,y,90,50); 107} 108 109} 110class Ball{// ボール 111 float x,y; 112 int vx,vy; 113 114Ball(){ 115 x=450; 116 y=760; 117 vx=-4; 118 vy=-4; 119} 120 121void show(){ 122 ellipse(x,y,40,40); 123 124} 125 126void update(){ 127 x +=vx; 128 y +=vy; 129 if(x>width||x<0){ 130 boundX(); 131 } 132 if(y<0){ 133 boundY(); 134 } 135} 136void boundX(){ 137 vx=-vx; 138} 139void boundY(){ 140 vy=-vy; 141} 142 143void boundXY(){ 144 vx=-vx; 145 vy=-vy; 146} 147 148} 149 150 151

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

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

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

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

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

guest

回答1

0

ブロックが表示されなくなった

raritterunさんの予想通り、判定が甘すぎてスタート直後にis_alive全部がfalseになっているんでしょう(未確認)

Processing

1if((b.x>bl[i][j].x && b.x+40 <bl[i][j].x+100 )&& b.y+40 > bl[i][j].y && is_alive[i][j]){//UP

例えばこの1行は上辺への当たり判定?だと思いますが、ブロックのはるか下をボールが通り過ぎても入ってしまいます。

図に書き出して判定条件を煮詰めてください。
参考
Processing - Processing 単純ゲーム制作中 あたり判定と分からない所を教えてください。|teratail


グローバルにあるxyや、Block.showの引数は必要ですかね?
is_aliveBlockクラス側で持てそうです。


私はこういう細かい計算が苦手なので、物理演算ライブラリを使用し同じように作ってみました^^;

Processing

1import fisica.*; 2 3FWorld world; 4FBox bar; 5 6void setup() { 7 size(1000, 900); 8 Fisica.init(this); 9 world = new FWorld(); 10 world.setGravity(0, 0); 11 world.setEdges(); 12 world.remove(world.bottom); 13 14 FCircle ball = new FCircle(40); 15 ball.addForce(10000, -10000); 16 ball.setDamping(0); 17 ball.setDensity(0.2); 18 ball.setPosition(450, 760); 19 ball.setFriction(0); 20 ball.setRestitution(1); 21 world.add(ball); 22 23 bar = new FBox(90, 50); 24 bar.setStatic(true); 25 bar.setFriction(0); 26 bar.setRestitution(1); 27 world.add(bar); 28 29 for (int i = 0; i < 8; i++) { 30 for (int j = 0; j < 6; j++) { 31 int x = i * 100 + 100; 32 int y = j * 50 + 100; 33 FBox box = new FBox(100, 50); 34 box.setPosition(x, y); 35 box.setStatic(true); 36 box.setFriction(0); 37 box.setRestitution(1); 38 box.setName("block"); 39 world.add(box); 40 } 41 } 42} 43 44void draw() { 45 background(200, 200, 200); 46 47 bar.setPosition(mouseX, 760); 48 world.draw(); 49 world.step(); 50} 51 52void contactStarted(FContact c) { 53 if (c.getBody1().getName() == "block") { 54 world.remove(c.getBody1()); 55 } 56 if (c.getBody2().getName() == "block") { 57 world.remove(c.getBody2()); 58 } 59}

メニューの「スケッチ」ー「ライブラリをインポート...」-「ライブラリを追加...」から、
Fisica | A wrapper for JBox2D, a 2D physics engine.をインストールします。

投稿2020/11/16 09:49

TN8001

総合スコア9321

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問