2023年1月11日 星期三

week15_新手上碌

  1.優化球的軌跡

1-1.斜率判斷方向:

        /*

        p2.x>p1.x&&p2.y<p1.y//向右上/

         p2.x<p1.x&&p2.y>p1.y//向左下

         slop<=0


         p2.x>p1.x&&p2.y>p1.y//向右下\

         p2.x<p1.x&&p2.y<p1.y//向左上

        slop>=0

         */

1-2.第一版:

void collision(){

    for (int i=0; i< curves.size(); i++) {

      Curve p = curves.get(i);

      for (int j =0; j< p.pts.size()-5; j++) {

        PVector p1 = p.pts.get(j);

        bombing(bomb_1.x, bomb_1.y, x, y);

        PVector p4= p.pts.get(j+5);    //取第5個點

        PVector p2 = p.pts.get(j+1);    //取下一個點

        float d_p1_p2=dist(p1.x, p1.y, p2.x, p2.y);

        float slop=(p2.x-p1.x)*(p2.y-p1.y);    //現在的點與下一個點

        float slop2=(p4.x-p1.x)*(p4.y-p1.y);

        if ((x>=p1.x-19.9&&x<=p1.x+19.9)&&(y>=p1.y-20.5&&y<=p1.y-19.5)) {

          vx=0;

          vy=0;

          println("+++++", slop, "+++", d_p1_p2, "++++", slop2, "H =", H, "U =", U);

          if (slop>=0&&slop2>0) {

            vx=1;

            vy=0.8;

            H=H-vy/10;        //位能

          }

          if (slop<=0&&slop2<0) {

            vx=-1;

            vy=0.5;

            H=H-vy/10;

          }

          if (slop==0&&slop2==0) {

            moving =false;

          }

        }

      }

    }

  }

1-3.第二版:

                    

>>>不會從線中滑落了,但常常會卡住

當斜率很小趨近於0時,要怎麼判斷方向?

2.炸彈

因為炸彈不只一顆>>用class寫

2-1.物件宣告:

Bomb bomb_1;                //宣告

bomb_1=new Bomb();    //new方法創建實體

2-2.定義class:

class Bomb {

  int x, y;

  void draw(int x, int y) {    //一開始就做的事

    fill(#761007);

    ellipse(x, y, 30, 30);

  }

}

void bombing(int x,int y,float ballx, float bally) {

    if (ballx<=(x+15)&&bally<=(y+15)&&ballx>(x-15)&&bally>(y-15)) {//碰撞

      println("Game Over!!!!!");

      ball.vx=0;

      ball.vy=0;

      moving=false;

    }

  }

2-3.使用:



沒有留言:

張貼留言