//week07_1_arras01_background_fill_stroke_ellipse_rect_line
void setup(){
size(500,500);
}
float x=250,y=250;
void draw(){
background(215,184,200);
fill(167,167,175);
stroke(110,100,113);
rect(240,200,20,30);//砲管
fill(204,102,156);
stroke(125,84,105);
strokeWeight(3);
ellipse(x,y,55,55);//圓形本體
line(x,y,mouseX,mouseY);
}單純畫出砲管和本體
//week07_2_02_srras02_sin_cos
void setup(){
size(500,500);
}
float x=250,y=250;
void draw(){
background(215,184,200);
float dx=mouseX-x,dy=mouseY-y;
float a=atan2(dy,dx);
strokeWeight(20);
line(x,y,x+cos(a)*40,y+sin(a)*40);//cos()算出x的方向sin()算出y的方向
fill(167,167,175);
stroke(110,100,113);
rect(240,200,20,30);//砲管
fill(204,102,156);
stroke(125,84,105);
strokeWeight(3);
ellipse(x,y,55,55);//圓形本體
//line(x,y,mouseX,mouseY);
}利用sin和cos找出游標的點//week07_3_arras03_atan_angle_rotate_translate_mytank
void setup(){
size(500,500);
}
float x=250,y=200;
void draw(){
background(215,184,200);
float dx=mouseX-x,dy=mouseY-y;
float a=atan2(dy,dx);
line(x,y,mouseX,mouseY);//cos()算出x的方向sin()算出y的方向
mytank(x,y,a);
}
void mytank(float x,float y,float a){
translate(x,y);
rotate(a);
fill(167,167,175);
stroke(110,100,113);
rect(20,-10,30,20);//砲管
fill(204,102,156);
stroke(125,84,105);
strokeWeight(3);
ellipse(0,0,55,55);//圓形本體
}
讓砲管跟著游標動
//week07_4_arras04_background_for_line_line_void_keyPressed_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(219);
stroke(210);//灰底的線
//stroke(211,180,196);//紅底的線
for(int i=0;i<30;i++){
line(0,i*30,500,i*30);
line(i*30,500,i*30,0);
}
float dx=mouseX-x,dy=mouseY-y;
float a=atan2(dy,dx);
line(x,y,mouseX,mouseY);//cos()算出x的方向sin()算出y的方向
mytank(x,y,a);
}
void mytank(float x,float y,float a){
translate(x,y);
rotate(a);
fill(167,167,175);
stroke(110,100,113);
rect(20,-10,30,20);//砲管
fill(204,102,156);
stroke(125,84,105);
strokeWeight(3);
ellipse(0,0,55,55);//圓形本體
}讓砲塔能夠上下左右移動//week07_5_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(219);//灰底 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);//灰底的線 for(int i=0;i<30;i++){ line(0,i*30,500,i*30); line(i*30,500,i*30,0); } float dx=mx-x,dy=my-y;//改用mx,my float a=atan2(dy,dx); line(x,y,mx,my);//cos()算出x的方向sin()算出y的方向 mytank(x,y,a); } void mytank(float x,float y,float a){ translate(x,y); rotate(a); fill(167,167,175); stroke(110,100,113); rect(20,-10,30,20);//砲管 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0,0,55,55);//圓形本體 }讓背景跟著移動//week07_6_arras06_vx_vy_void_keyPressed_void_keyReleased_void_draw void setup(){ size(500,400); } void keyPressed(){//按下去時會有速度,放開後速度會變成0 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)vy=0; } float x=250,y=200,vx=0,vy=0;//代表移動速度 void draw(){ x+=vx; y+=vy; background(219);//灰底 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);//灰底的線 for(int i=0;i<30;i++){ line(0,i*30,500,i*30); line(i*30,500,i*30,0); } float dx=mx-x,dy=my-y;//改用mx,my float a=atan2(dy,dx); line(x,y,mx,my);//cos()算出x的方向sin()算出y的方向 mytank(x,y,a); } void mytank(float x,float y,float a){ translate(x,y); rotate(a); fill(167,167,175); stroke(110,100,113); rect(20,-10,30,20);//砲管 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0,0,55,55);//圓形本體 } 動起來更順//week07_7_arras07_angle_bulletx_bullety_bulletvx_bulletvy void setup(){ size(500,400); } void keyPressed(){//按下去時會有速度,放開後速度會變成0 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)vy=0; } void mousePressed(){ bulletX=x; bulletY=y; bulletVX=cos(angle); bulletVY=sin(angle); } float angle; float bulletX=0,bulletY=0,bulletVX=0,bulletVY=0; float x=250,y=200,vx=0,vy=0;//代表移動速度 void draw(){ x+=vx; y+=vy; background(219);//灰底 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);//灰底的線 for(int i=0;i<30;i++){ line(0,i*30,500,i*30); line(i*30,500,i*30,0); } float dx=mx-x,dy=my-y;//改用mx,my float a=atan2(dy,dx); angle = a; line(x,y,mx,my);//cos()算出x的方向sin()算出y的方向 pushMatrix(); mytank(x,y,a); popMatrix(); if(bulletVX!=0 && bulletVY!=0){ bulletX +=bulletVX; bulletY +=bulletVY; ellipse(bulletX,bulletY,20,20); } } void mytank(float x,float y,float a){ translate(x,y); rotate(a); fill(167,167,175); stroke(110,100,113); rect(20,-10,30,20);//砲管 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0,0,55,55);//圓形本體 } 射出子彈(但是只能一顆)//week07_8_arras08_array_many_bullet void setup(){ size(500,400); } void keyPressed(){//按下去時會有速度,放開後速度會變成0 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)vy=0; } void mousePressed(){ int i=bulletN;//一開始會有0顆子彈,之後慢慢增加 bulletX[i]=x; bulletY[i]=y; bulletVX[i]=cos(angle); bulletVY[i]=sin(angle);//子彈的位置和速度 bulletN++; } float angle; int bulletN = 0; float [] bulletX=new float[100];//致命問題子彈最多只有100發超過會當機 float [] bulletY=new float[100]; float [] bulletVX=new float[100]; float [] bulletVY=new float[100]; float x=250,y=200,vx=0,vy=0;//代表移動速度 void draw(){ x+=vx; y+=vy; background(219);//灰底 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);//灰底的線 for(int i=0;i<30;i++){ line(0,i*30,500,i*30); line(i*30,500,i*30,0); } float dx=mx-x,dy=my-y;//改用mx,my float a=atan2(dy,dx); angle = a; line(x,y,mx,my);//cos()算出x的方向sin()算出y的方向 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); } } void mytank(float x,float y,float a){ translate(x,y); rotate(a); fill(167,167,175); stroke(110,100,113); rect(20,-10,30,20);//砲管 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0,0,55,55);//圓形本體 }可以射出很多子彈,但是如果超過100會當機//week07_9_arras09_recycle void setup(){ size(500,400); } void keyPressed(){//按下去時會有速度,放開後速度會變成0 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)vy=0; } void mousePressed(){ int i=bulletN;//一開始會有0顆子彈,之後慢慢增加 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); } float angle; int bulletN = 0; float [] bulletX=new float[100];//致命問題子彈最多只有100發超過會當機 float [] bulletY=new float[100]; float [] bulletVX=new float[100]; float [] bulletVY=new float[100]; float x=250,y=200,vx=0,vy=0;//代表移動速度 void draw(){ x+=vx; y+=vy; background(219);//灰底 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);//灰底的線 for(int i=0;i<30;i++){ line(0,i*30,500,i*30); line(i*30,500,i*30,0); } float dx=mx-x,dy=my-y;//改用mx,my float a=atan2(dy,dx); angle = a; line(x,y,mx,my);//cos()算出x的方向sin()算出y的方向 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); } } void mytank(float x,float y,float a){ translate(x,y); rotate(a); fill(167,167,175); stroke(110,100,113); rect(20,-10,30,20);//砲管 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0,0,55,55);//圓形本體 }解決了會當機的bug//week07_10_arras10_bulleT_totimeout void setup(){ size(500,400); } void keyPressed(){//按下去時會有速度,放開後速度會變成0 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)vy=0; } void mousePressed(){ int i=bulletN;//一開始會有0顆子彈,之後慢慢增加 bulletX[i]=x; bulletY[i]=y; bulletVX[i]=cos(angle); bulletVY[i]=sin(angle);//子彈的位置和速度 bulleT[i]=600; 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); } float angle; int bulletN = 0; float [] bulletX=new float[100];//致命問題子彈最多只有100發超過會當機 float [] bulletY=new float[100]; float [] bulletVX=new float[100]; float [] bulletVY=new float[100]; int []bulleT= new int[100]; float x=250,y=200,vx=0,vy=0;//代表移動速度 void draw(){ x+=vx; y+=vy; background(219);//灰底 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);//灰底的線 for(int i=0;i<30;i++){ line(0,i*30,500,i*30); line(i*30,500,i*30,0); } float dx=mx-x,dy=my-y;//改用mx,my float a=atan2(dy,dx); angle = a; line(x,y,mx,my);//cos()算出x的方向sin()算出y的方向 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); bulleT[i]--; if(bulleT[i]==0){ for(int k=i+1;k<bulletN;k++){ bulletX[k-1]=bulletX[k]; bulletY[k-1]=bulletY[k]; bulletVX[k-1]=bulletVX[k]; bulletVY[k-1]=bulletVY[k]; bulleT[k-1]=bulleT[k]; } bulletN--; } } println(bulletN); } void mytank(float x,float y,float a){ translate(x,y); rotate(a); fill(167,167,175); stroke(110,100,113); rect(20,-10,30,20);//砲管 fill(204,102,156); stroke(125,84,105); strokeWeight(3); ellipse(0,0,55,55);//圓形本體 } 改成射出的子彈會過了10秒後消失以解決當機的問題
沒有留言:
張貼留言