前提及要:
老師教了新方法(冰火兄弟)
用兩張地圖A、B
A是隱藏地圖,使用者看不到,以顏色判斷讓球沿著線走
B是遊戲背景。
決定試試,看能不能改善球的運動軌跡。
1.PGraphics
1-1.新增一張地圖map:
PGraphics map; //宣告
map=createGrapthics( x, y); //設定圖的大小
//把線畫在map上
1-2.用顏色來判斷碰撞:
map.loadPixels[ i ]; //加載像素>>>把像素點讀進來
成功用隱藏版地圖卡住球,但要如何清除map中的線呢??
1.把線的顏色換成背景色>>>看不到但仍存在、會影響碰撞
2.沒有出現錯誤但程式會卡住(?? (如下圖)
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.卡在邊邊
把之前的星星加進來
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
沒有留言:
張貼留言