2023年1月11日 星期三

week13_新手上碌

 前提及要:

老師教了新方法(冰火兄弟)

用兩張地圖A、B

A是隱藏地圖,使用者看不到,以顏色判斷讓球沿著線走

B是遊戲背景。


決定試試,看能不能改善球的運動軌跡


1.PGraphics

1-1.新增一張地圖map:

PGraphics map;                    //宣告

map=createGrapthics( x, y);      //設定圖的大小

//把線畫在map上



1-2.用顏色來判斷碰撞:

map.loadPixels[ i ];    //加載像素>>>把像素點讀進來

1-3.問題1:

成功用隱藏版地圖卡住球,但要如何清除map中的線呢??

1.把線的顏色換成背景色>>>看不到但仍存在、會影響碰撞
2.沒有出現錯誤但程式會卡住(??  (如下圖)

anser from老師:
100萬*100萬+100萬*100萬 loadPixels()+updatePixela() 很可怕的計算時間

1-3.不適用:
1.畫在兩張地圖上,速度變好慢
2.老師示範是沿著線上走,但球想要一些彈跳、碰撞效果
3.兩張地圖寫到頭昏
>>>>>棄用 !
2.球的碰撞
2-1.用斜率判斷:
void collision(){
    for (int i=0; i< curves.size(); i++) {
      Curve p = curves.get(i);
      for (int j =1; j< p.pts.size()-1; j++) {
        PVector p1 = p.pts.get(j);
        PVector p3= p.pts.get(j-1);
        PVector p2 = p.pts.get(j+1);
        float d_p1_p2=dist(p1.x, p1.y, p2.x, p2.y);
        float slop=(p2.y-p1.y)/(p2.x-p1.x);    //斜率
        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, "++++");
          if (slop>=0&&p2.x-p1.x>=0) {
            vx=1;
            vy=1;
            break;
          }
        }
      }
    }
  }

----------結果----------
1.球會慢慢從線中滑落
2.卡在邊邊
3.slop不是數字?? NaN


3.加入星星
把之前的星星加進來
void star_setting() {
  star1 = createGraphics(20, 20);
  star2 = createGraphics(20, 20);
  star3 = createGraphics(20, 20);
  drawStar(1);
  drawStar(2);
  drawStar(3);
}
void drawStar(int x) {
  if (x==1) {
    star1.beginDraw();
    star1.background(#FCE454);
    star1.endDraw();
  } else if (x==2) {
    star2.beginDraw();
    star2.background(#FCE454);
    star2.endDraw();
  } else if (x==3) {
    star3.beginDraw();
    star3.background(#FCE454);
    star3.endDraw();
  }
}
void star_beg_clear_end(int x, int starX, int starY, float ballx, float bally) {
  if (x==1)image(star1, starX, starY);
  if (x==2)image(star2, starX, starY);
  if (x==3)image(star3, starX, starY);
  if ( ballx<(starX+25)  &&  bally<(starY+20)  &&  ballx>=starX  &&  bally>=starY) {
    if (x==1) {
      star1.beginDraw();
      star1.clear();
      star1.endDraw();
    }
    if (x==2) {
      star2.beginDraw();
      star2.clear();
      star2.endDraw();
    }
    if (x==3) {
      star3.beginDraw();
      star3.clear();
      star3.endDraw();
    }
    score+=1;
    starX=-100;//把星星座標移到遠處 避免重複計分
    starY=-100;
  }
}
下次目標:
1.優化運動軌跡(會從中間滑落...)
2.放球框
這周沒甚麼進度呢QQ

沒有留言:

張貼留言