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

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

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

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

Q&A

1回答

684閲覧

ボールの跳ね返りについて

200034

総合スコア1

Processing

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

0グッド

0クリップ

投稿2022/01/11 02:55

以下のコードで実行すると、

int x, y, dx, dy;

void setup() {
size( 500, 500 );
x = width / 2; y = height / 10;
dx = 0; dy = 0;
}

void draw() {
background( 255 );
noStroke();
fill( 111, 183, 255 );
ellipse( x, y, 50, 50 );
x += dx; y += dy;
if( x <= 25 || x >= width -25 ) dx = -dx;
if( y <= 25 || y >= height - 25 ) dy = -dy;
}

void mousePressed() {
switch( mouseButton ) {
case LEFT:
dy = 3;
break;
}
}
void keyPressed() {
switch( key ) {
case 'a': dy = 10; break; //左にずれる
//Aが押され、ボールが下まで行ったら停止する
}
}
void keyReleased() {
switch( key ) {
case 'a': case 'd': dx = 0; break;

}
}
実行はできるのですが、ずっと跳ね返ってしまいます。
これをずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。

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

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

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

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

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

guest

回答1

0

ずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。

if (y <= 25 || y >= height - 25) dy = -dy;
としているので当然だと思うのですが。。。

if (y <= 25 || y >= height - 25) dy = 0;
とすれば跳ね返らずに止まりますが、そういう意味じゃないんですよね?
aキーを押した後だけ、下で止めるという意味でしょうか??

だとすると、aキーを押した後だとわかる「何か」が判定に必要になります。
何かフラグ(boolean)を用意してもいいですが、幸い?dyが変わっているのでそれで判断しました。

Processing

1int x, y, dx, dy; 2 3void setup() { 4 size(500, 500); 5 x = width / 2; 6 y = height / 10; 7 //dx = 0; 8 //dy = 0; 9} 10 11void draw() { 12 background(255); 13 noStroke(); 14 fill(111, 183, 255); 15 ellipse(x, y, 50, 50); 16 x += dx; 17 y += dy; 18 if (x <= 25 || x >= width - 25) dx = -dx; 19 if (y <= 25 || y >= height - 25) dy = -dy; 20 21 // dy == 10 としたいところだが、↑でひっくり返っているので -10 22 if (dy == -10 && y >= height - 25) { 23 dy = 0; // フレームごとのy移動量を0にする(=止める) 24 25 // aを連打すると沈んでいってしまうので、はみ出さないように矯正 26 y = height - 25; 27 } 28} 29 30void mousePressed() { 31 switch (mouseButton) { 32 case LEFT: 33 dy = 3; 34 break; 35 } 36} 37 38void keyPressed() { 39 switch (key) { 40 case 'a': 41 dy = 10; 42 break; 43 } 44} 45 46//void keyReleased() { 47// switch (key) { 48// case 'a': 49// case 'd': 50// dx = 0; 51// break; 52// } 53//}

投稿2022/01/11 09:31

編集2023/07/29 14:11
TN8001

総合スコア9401

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問