回答編集履歴
1
見直しキャンペーン中
    
        answer	
    CHANGED
    
    | @@ -1,67 +1,67 @@ | |
| 1 | 
            -
            > ずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            `if (y <= 25 || y >= height - 25) dy = -dy;`
         | 
| 4 | 
            -
            としているので当然だと思うのですが。
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            `if (y <= 25 || y >= height - 25) dy = 0;`
         | 
| 7 | 
            -
            とすれば跳ね返らずに止まりますが、そういう意味じゃないんですよね?
         | 
| 8 | 
            -
            aキーを押した後**だけ**、下で止めるという意味でしょうか??
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            だとすると、aキーを押した後だとわかる「何か」が判定に必要になります。
         | 
| 11 | 
            -
            何かフラグ(`boolean`)を用意してもいいですが、幸い?`dy`が変わっているのでそれで判断しました。
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            ```Processing
         | 
| 14 | 
            -
            int x, y, dx, dy;
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            void setup() {
         | 
| 17 | 
            -
              size(500, 500);
         | 
| 18 | 
            -
              x = width / 2;
         | 
| 19 | 
            -
              y = height / 10;
         | 
| 20 | 
            -
              //dx = 0;
         | 
| 21 | 
            -
              //dy = 0;
         | 
| 22 | 
            -
            }
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            void draw() {
         | 
| 25 | 
            -
              background(255);
         | 
| 26 | 
            -
              noStroke();
         | 
| 27 | 
            -
              fill(111, 183, 255);
         | 
| 28 | 
            -
              ellipse(x, y, 50, 50);
         | 
| 29 | 
            -
              x += dx;
         | 
| 30 | 
            -
              y += dy;
         | 
| 31 | 
            -
              if (x <= 25 || x >= width - 25) dx = -dx;
         | 
| 32 | 
            -
              if (y <= 25 || y >= height - 25) dy = -dy;
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              // dy == 10 としたいところだが、↑でひっくり返っているので -10
         | 
| 35 | 
            -
              if (dy == -10 && y >= height - 25) {
         | 
| 36 | 
            -
                dy = 0; // フレームごとのy移動量を0にする(=止める)
         | 
| 37 | 
            -
                
         | 
| 38 | 
            -
                // aを連打すると沈んでいってしまうので、はみ出さないように矯正
         | 
| 39 | 
            -
                y = height - 25;
         | 
| 40 | 
            -
              }
         | 
| 41 | 
            -
            }
         | 
| 42 | 
            -
             | 
| 43 | 
            -
            void mousePressed() {
         | 
| 44 | 
            -
              switch (mouseButton) {
         | 
| 45 | 
            -
              case LEFT:
         | 
| 46 | 
            -
                dy = 3;
         | 
| 47 | 
            -
                break;
         | 
| 48 | 
            -
              }
         | 
| 49 | 
            -
            }
         | 
| 50 | 
            -
             | 
| 51 | 
            -
            void keyPressed() {
         | 
| 52 | 
            -
              switch (key) {
         | 
| 53 | 
            -
              case 'a':
         | 
| 54 | 
            -
                dy = 10;
         | 
| 55 | 
            -
                break;
         | 
| 56 | 
            -
              }
         | 
| 57 | 
            -
            }
         | 
| 58 | 
            -
             | 
| 59 | 
            -
            //void keyReleased() {
         | 
| 60 | 
            -
            //  switch (key) {
         | 
| 61 | 
            -
            //  case 'a':
         | 
| 62 | 
            -
            //  case 'd':
         | 
| 63 | 
            -
            //    dx = 0;
         | 
| 64 | 
            -
            //    break;
         | 
| 65 | 
            -
            //  }
         | 
| 66 | 
            -
            //}
         | 
| 1 | 
            +
            > ずっと跳ね返るのではなく、下まで行ったら、動きを止めたいです。
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            `if (y <= 25 || y >= height - 25) dy = -dy;`
         | 
| 4 | 
            +
            としているので当然だと思うのですが。。。
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            `if (y <= 25 || y >= height - 25) dy = 0;`
         | 
| 7 | 
            +
            とすれば跳ね返らずに止まりますが、そういう意味じゃないんですよね?
         | 
| 8 | 
            +
            aキーを押した後**だけ**、下で止めるという意味でしょうか??
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            だとすると、aキーを押した後だとわかる「何か」が判定に必要になります。
         | 
| 11 | 
            +
            何かフラグ(`boolean`)を用意してもいいですが、幸い?`dy`が変わっているのでそれで判断しました。
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ```Processing
         | 
| 14 | 
            +
            int x, y, dx, dy;
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            void setup() {
         | 
| 17 | 
            +
              size(500, 500);
         | 
| 18 | 
            +
              x = width / 2;
         | 
| 19 | 
            +
              y = height / 10;
         | 
| 20 | 
            +
              //dx = 0;
         | 
| 21 | 
            +
              //dy = 0;
         | 
| 22 | 
            +
            }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            void draw() {
         | 
| 25 | 
            +
              background(255);
         | 
| 26 | 
            +
              noStroke();
         | 
| 27 | 
            +
              fill(111, 183, 255);
         | 
| 28 | 
            +
              ellipse(x, y, 50, 50);
         | 
| 29 | 
            +
              x += dx;
         | 
| 30 | 
            +
              y += dy;
         | 
| 31 | 
            +
              if (x <= 25 || x >= width - 25) dx = -dx;
         | 
| 32 | 
            +
              if (y <= 25 || y >= height - 25) dy = -dy;
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              // dy == 10 としたいところだが、↑でひっくり返っているので -10
         | 
| 35 | 
            +
              if (dy == -10 && y >= height - 25) {
         | 
| 36 | 
            +
                dy = 0; // フレームごとのy移動量を0にする(=止める)
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                // aを連打すると沈んでいってしまうので、はみ出さないように矯正
         | 
| 39 | 
            +
                y = height - 25;
         | 
| 40 | 
            +
              }
         | 
| 41 | 
            +
            }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            void mousePressed() {
         | 
| 44 | 
            +
              switch (mouseButton) {
         | 
| 45 | 
            +
              case LEFT:
         | 
| 46 | 
            +
                dy = 3;
         | 
| 47 | 
            +
                break;
         | 
| 48 | 
            +
              }
         | 
| 49 | 
            +
            }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            void keyPressed() {
         | 
| 52 | 
            +
              switch (key) {
         | 
| 53 | 
            +
              case 'a':
         | 
| 54 | 
            +
                dy = 10;
         | 
| 55 | 
            +
                break;
         | 
| 56 | 
            +
              }
         | 
| 57 | 
            +
            }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            //void keyReleased() {
         | 
| 60 | 
            +
            //  switch (key) {
         | 
| 61 | 
            +
            //  case 'a':
         | 
| 62 | 
            +
            //  case 'd':
         | 
| 63 | 
            +
            //    dx = 0;
         | 
| 64 | 
            +
            //    break;
         | 
| 65 | 
            +
            //  }
         | 
| 66 | 
            +
            //}
         | 
| 67 67 | 
             
            ```
         | 
