1week07_01_arras01_background_fill_stroke_ellipse_rect_line.
// week07_01_arras01_background_fill_stroke_ellipse_rect_line void setup(){ size(500, 400); } float x = 250, y = 200; void draw(){ background(215, 184, 200); fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(240,160,20,20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(x, y, 55, 55); //圓形的身體 line(x, y, mouseX, mouseY); }
2.week07_02_arras02_atan_cos_sin
// week07_02_arras02_atan_cos_sin void setup(){ size(500, 400); } float x = 250, y = 200; void draw(){ background(215, 184, 200); float dx = mouseX - x, dy = mouseY - y; float a = atan2(dy, dx); //atan2() 算出角度 strokeWeight(20); //很粗的一線, 長度是40 line(x, y, x+cos(a)*40, y+sin(a)*40); //cos()算出x方向, sin()算出y方向 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(240,160,20,20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(x, y, 55, 55); //圓形的身體 //line(x, y, mouseX, mouseY); }
3.week07_03_arras03_atan_angle_rotate_translate_myTank
// week07_03_arras03_atan_angle_rotate_translate_myTank void setup(){ size(500, 400); } float x = 250, y = 200; void draw(){ background(215, 184, 200); float dx = mouseX - x, dy = mouseY - y; float a = atan2(dy, dx); //atan2() 算出角度 line(x, y, mouseX, mouseY); myTank(x, y, a); } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }
4.week07_04_arras04_background_for_line_line_void_ketPressed_keyCode
// week07_04_arras04_background_for_line_line_void_ketPressed_keyCode void setup(){ size(500, 400); } void keyPressed(){ if(keyCode==RIGHT) x += 1; if(keyCode==LEFT) x -= 1; if(keyCode==UP) y -= 1; if(keyCode==DOWN) y += 1; } float x = 250, y = 200; void draw(){ //background(215, 184, 200); background(214); //灰底 stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mouseX - x, dy = mouseY - y; float a = atan2(dy, dx); //atan2() 算出角度 line(x, y, mouseX, mouseY); myTank(x, y, a); } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }
5.week07_05_arras05_correct_move_translate_translate_mx_my
// week07_05_arras05_correct_move_translate_translate_mx_my // 會移動的背景,但是其他要正確運作 void setup(){ size(500, 400); } void keyPressed(){ if(keyCode==RIGHT) x += 1; if(keyCode==LEFT) x -= 1; if(keyCode==UP) y -= 1; if(keyCode==DOWN) y += 1; } float x = 250, y = 200; void draw(){ background(214); //灰底 translate(-x, -y); //讓全世界, 都往反方向移動 translate(width/2, height/2); //把0,0 移畫面正中心 float mx = mouseX+x-width/2, my = mouseY+y-height/2; //換算 mx, my 的座標 ellipse(mx, my, 8, 8); stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mx - x, dy = my - y; //改用 mx, my float a = atan2(dy, dx); //atan2() 算出角度 line(x, y, mx, my); myTank(x, y, a); } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }
6.week07_06_arras06_vx_vy_void_keyPressed_void_keyReleased_void_draw
// week07_06_arras06_vx_vy_void_keyPressed_void_keyReleased_void_draw // 希望移動得很順 因為 keyPressed 每秒的次數不夠快 要在 void draw()裡 移動它 // 會移動的背景,但是其他要正確運作 void setup(){ size(500, 400); } void keyPressed(){ //q按下去時,會有速度, 放開後,速度要變成() if(keyCode==RIGHT) vx = 1; //x += 1; if(keyCode==LEFT) vx -= 1; //x -= 1; if(keyCode==UP) vy = -1; //y -= 1; if(keyCode==DOWN) vy = 1; //y += 1; } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; if(keyCode==UP || keyCode==DOWN) vx = 0; } float x = 250, y = 200, vx = 0, vy = 0; void draw(){ x += vx; y += vy; background(214); //灰底 translate(-x, -y); //讓全世界, 都往反方向移動 translate(width/2, height/2); //把0,0 移畫面正中心 float mx = mouseX+x-width/2, my = mouseY+y-height/2; //換算 mx, my 的座標 ellipse(mx, my, 8, 8); stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mx - x, dy = my - y; //改用 mx, my float a = atan2(dy, dx); //atan2() 算出角度 line(x, y, mx, my); myTank(x, y, a); } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }7.week07_07_arras07_angle_bulletX_bulletY_bulletVX_bulletVY// week07_07_arras07_angle_bulletX_bulletY_bulletVX_bulletVY // 要有武器出來 void setup(){ size(500, 400); } void keyPressed(){ //q按下去時,會有速度, 放開後,速度要變成() if(keyCode==RIGHT) vx = 1; //x += 1; if(keyCode==LEFT) vx -= 1; //x -= 1; if(keyCode==UP) vy = -1; //y -= 1; if(keyCode==DOWN) vy = 1; //y += 1; } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; if(keyCode==UP || keyCode==DOWN) vx = 0; } float x = 250, y = 200, vx = 0, vy = 0; void draw(){ x += vx; y += vy; background(214); //灰底 translate(-x, -y); //讓全世界, 都往反方向移動 translate(width/2, height/2); //把0,0 移畫面正中心 float mx = mouseX+x-width/2, my = mouseY+y-height/2; //換算 mx, my 的座標 ellipse(mx, my, 8, 8); stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mx - x, dy = my - y; //改用 mx, my float a = atan2(dy, dx); //atan2() 算出角度 angle = a; line(x, y, mx, my); pushMatrix(); myTank(x, y, a); popMatrix(); if(bulletVX!=0 && bulletVY!=0){ bulletX += bulletVX; bulletY += bulletVY; ellipse(bulletX, bulletY, 20, 20); } } float angle, bulletX = 0, bulletY = 0, bulletVX = 0, bulletVY = 0; //子彈的x, y位置和速度 void mousePressed(){ bulletX = x; bulletY = y; bulletVX = cos(angle); bulletVY = sin(angle); } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }
8.week07_08_arras08_array_many_bullets// week07_08_arras08_array_many_bullets // 要有武器出來 void setup(){ size(500, 400); } void keyPressed(){ //q按下去時,會有速度, 放開後,速度要變成() if(keyCode==RIGHT) vx = 1; //x += 1; if(keyCode==LEFT) vx -= 1; //x -= 1; if(keyCode==UP) vy = -1; //y -= 1; if(keyCode==DOWN) vy = 1; //y += 1; } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; if(keyCode==UP || keyCode==DOWN) vx = 0; } float x = 250, y = 200, vx = 0, vy = 0; void draw(){ x += vx; y += vy; background(214); //灰底 translate(-x, -y); //讓全世界, 都往反方向移動 translate(width/2, height/2); //把0,0 移畫面正中心 float mx = mouseX+x-width/2, my = mouseY+y-height/2; //換算 mx, my 的座標 ellipse(mx, my, 8, 8); stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mx - x, dy = my - y; //改用 mx, my float a = atan2(dy, dx); //atan2() 算出角度 angle = a; line(x, y, mx, my); pushMatrix(); myTank(x, y, a); popMatrix(); for(int i=0; i<bulletN; i++){ bulletX[i] += bulletVX[i]; bulletY[i] += bulletVY[i]; ellipse(bulletX[i], bulletY[i], 20, 20); } } float angle; int bulletN = 0; //一開始有0個子但 之後會慢慢增加 float [] bulletX = new float[100]; //致命問題: 只有100發子彈 float [] bulletY = new float[100]; //超過會當機 float [] bulletVX = new float[100]; float [] bulletVY = new float[100]; //子彈的x, y位置和速度 void mousePressed(){ int i = bulletN; bulletX[i] = x; bulletY[i] = y; bulletVX[i] = cos(angle); bulletVY[i] = sin(angle); bulletN ++; } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }9.week07_09_arras09_recycle_bullet_move_right_to_left// week07_09_arras09_recycle_bullet_move_right_to_left // 要有武器出來 void setup(){ size(500, 400); } void keyPressed(){ //q按下去時,會有速度, 放開後,速度要變成() if(keyCode==RIGHT) vx = 1; //x += 1; if(keyCode==LEFT) vx -= 1; //x -= 1; if(keyCode==UP) vy = -1; //y -= 1; if(keyCode==DOWN) vy = 1; //y += 1; } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; if(keyCode==UP || keyCode==DOWN) vx = 0; } float x = 250, y = 200, vx = 0, vy = 0; void draw(){ x += vx; y += vy; background(214); //灰底 translate(-x, -y); //讓全世界, 都往反方向移動 translate(width/2, height/2); //把0,0 移畫面正中心 float mx = mouseX+x-width/2, my = mouseY+y-height/2; //換算 mx, my 的座標 ellipse(mx, my, 8, 8); stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mx - x, dy = my - y; //改用 mx, my float a = atan2(dy, dx); //atan2() 算出角度 angle = a; line(x, y, mx, my); pushMatrix(); myTank(x, y, a); popMatrix(); for(int i=0; i<bulletN; i++){ bulletX[i] += bulletVX[i]; bulletY[i] += bulletVY[i]; ellipse(bulletX[i], bulletY[i], 20, 20); } } float angle; int bulletN = 0; //一開始有0個子但 之後會慢慢增加 float [] bulletX = new float[100]; //致命問題: 只有100發子彈 float [] bulletY = new float[100]; //超過會當機 float [] bulletVX = new float[100]; float [] bulletVY = new float[100]; //子彈的x, y位置和速度 void mousePressed(){ int i = bulletN; bulletX[i] = x; bulletY[i] = y; bulletVX[i] = cos(angle); bulletVY[i] = sin(angle); bulletN ++; if(bulletN==100){ for(int k=0; k<50; k++){ bulletX[k] = bulletX[k+50]; bulletY[k] = bulletY[k+50]; bulletVX[k] = bulletVX[k+50]; bulletVY[k] = bulletVY[k+50]; } bulletN = 50; } println(bulletN); //印看看現在有幾顆子彈 } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }
10.week07_10_arras10_bulletT_for_timeout// week07_10_arras10_bulletT_for_timeout // 要有武器出來 void setup(){ size(500, 400); } void keyPressed(){ //q按下去時,會有速度, 放開後,速度要變成() if(keyCode==RIGHT) vx = 1; //x += 1; if(keyCode==LEFT) vx -= 1; //x -= 1; if(keyCode==UP) vy = -1; //y -= 1; if(keyCode==DOWN) vy = 1; //y += 1; } void keyReleased(){ if(keyCode==LEFT || keyCode==RIGHT) vx = 0; if(keyCode==UP || keyCode==DOWN) vx = 0; } float x = 250, y = 200, vx = 0, vy = 0; void draw(){ x += vx; y += vy; background(214); //灰底 translate(-x, -y); //讓全世界, 都往反方向移動 translate(width/2, height/2); //把0,0 移畫面正中心 float mx = mouseX+x-width/2, my = mouseY+y-height/2; //換算 mx, my 的座標 ellipse(mx, my, 8, 8); stroke(210); //灰底的線 strokeWeight(1); for(int i=0; i<30; i++){ line(0, i*30, 500, i*30); line(i*30, 0, i*30, 500); } float dx = mx - x, dy = my - y; //改用 mx, my float a = atan2(dy, dx); //atan2() 算出角度 angle = a; line(x, y, mx, my); pushMatrix(); myTank(x, y, a); popMatrix(); for(int i=0; i<bulletN; i++){ bulletX[i] += bulletVX[i]; bulletY[i] += bulletVY[i]; ellipse(bulletX[i], bulletY[i], 20, 20); bulletT[i] --; if(bulletT[i]==0){ //要把i消滅, 就拿右邊的來補 for(int k=i+1; k<bulletN; k++){ bulletX[k-1] = bulletX[k]; //把右邊,移到左邊 bulletY[k-1] = bulletX[k]; bulletVX[k-1] = bulletVX[k]; bulletVY[k-1] = bulletVY[k]; bulletT[k-1] = bulletT[k]; } bulletN --; //少了1顆子彈 } } println(bulletN); //印看看現在有幾顆子彈 } float angle; int bulletN = 0; //一開始有0個子但 之後會慢慢增加 float [] bulletX = new float[100]; //致命問題: 只有100發子彈 float [] bulletY = new float[100]; //超過會當機 float [] bulletVX = new float[100]; float [] bulletVY = new float[100]; //子彈的x, y位置和速度 int [] bulletT = new int [100]; //每個子彈的壽命 void mousePressed(){ int i = bulletN; bulletX[i] = x; bulletY[i] = y; bulletVX[i] = cos(angle); bulletVY[i] = sin(angle); bulletT[i] = 600; //每顆子彈,只有10秒的壽命 bulletN ++; if(bulletN==100){ for(int k=0; k<50; k++){ bulletX[k] = bulletX[k+50]; bulletY[k] = bulletY[k+50]; bulletVX[k] = bulletVX[k+50]; bulletVY[k] = bulletVY[k+50]; } bulletN = 50; } } void myTank(float x, float y, float a){ translate(x, y); //大二下圖學課,教的移動 rotate(a); //大二下圖學課,教的旋轉 fill(167,167,175); stroke(110, 110,113); strokeWeight(4); rect(20, -10, 20, 20); //砲管//砲塔 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0, 0, 55, 55); //圓形的身體 }
沒有留言:
張貼留言