第一節課我們先畫出一個圓並且讓他從上方往下掉
然後我們進階一點 畫出兩個圓
並且讓他們的掉落速度不一樣
使用vx和vy可以調整兩個圓的掉落速度
float x=250,y=0,vx=0,vy=3;
float x2=150,y2=50,vx2=0,vy2=2;
void setup(){
size(500,600);
}
void draw(){
background(255);
ellipse(x,y,50,50);
ellipse(x2,y2,50,50);
y=y+vy; //vy是速度
y2=y2+vy2; //vy2是速度
}
再來就可以加上配合陣列的使用
製作更多圓形,而且每個掉落速度都不一樣
最後加上mouse碰到圓就可以得分(讓圓停下來)
//mouse碰到球可以得分
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vx={0,0,0,0};
float []vy={3,2,2.5,4};
void setup(){
size(500,600);
}
void draw(){
background(255);
for(int i=0;i<4;i++){
fill(255,255,0);ellipse(x[i],y[i],50,50);
if(dist(mouseX,mouseY,x[i],y[i])<=50){
continue;
}
y[i]=y[i]+vy[i];//vy是速度
if(y[i]>600) vy[i] = -vy[i];//撞到下方
if(y[i]<0) vy[i] = -vy[i];//接到上方
}
fill(255,0,0); ellipse(mouseX,mouseY,50,50);
}
然後我們加上使用Boolean
讓紅球在碰到黃球之後,黃球就會消失
//mouse碰到球可以得分
float []x={250,150,350,300};
float []y={0,50,80,100};
float []vy={3,2,2.5,4};
boolean [] dead={false,false,false,false};
void setup(){
size(500,600);
}
void draw(){
background(255);
for(int i=0;i<4;i++){
if(dist(mouseX,mouseY,x[i],y[i])<=50){
dead[i]=true;
}
if(dead[i]==true)continue;
fill(255,255,0);ellipse(x[i],y[i],50,50);
y[i]=y[i]+vy[i];//vy是速度
if(y[i]>600) vy[i] = -vy[i];//撞到下方
if(y[i]<0) vy[i] = -vy[i];//接到上方
}
fill(255,0,0); ellipse(mouseX,mouseY,50,50);
}
運用boolean 使背景顏色更改
製造出很多顆球
//mouse碰到球可以得分
float []x;
float []y;
float []vy;
boolean [] dead;
int N=20;
void setup(){
size(500,600);
x=new float[N];
y=new float[N];
vy=new float[N];
dead=new boolean[N];
for(int i=0;i<N;i++){
x[i]=random(500);
y[i]=random(100,200);
vy[i]=random(3,4);
dead[i]=false;
}
}
void draw(){
background(255);
for(int i=0;i<N;i++){
if(dist(mouseX,mouseY,x[i],y[i])<=50){
dead[i]=true;
}
if(dead[i]==true)continue;
fill(255,255,0);ellipse(x[i],y[i],50,50);
y[i]=y[i]+vy[i];//vy是速度
if(y[i]>600) vy[i] = -vy[i];//撞到下方
if(y[i]<0) vy[i] = -vy[i];//接到上方
}
fill(255,0,0); ellipse(mouseX,mouseY,50,50);
}
class Ball{
float x,y,vx,vy;
boolean dead;
Ball(){
x=random(500);
y=random(100,200);
vy=random(3,4);
dead=false;
}
void draw(){
if(dead==true)return;
ellipse(x,y,50,50);
if(dist(mouseX,mouseY,x,y)<50){
dead=true;
}
y=y+vy;
if(y>500)vy=-vy;
if(y<0)vy=-vy;
}
}
Ball [] balls;
void setup(){
size(500,500);
balls=new Ball[20];
for(int i=0;i<20;i++){
balls[i]=new Ball();
}
}
void draw(){
background(255);
for(int i=0;i<20;i++){
balls[i].draw();
}
}
球會朝四面八方到處移動
class Ball{
float x,y,vx,vy;
boolean dead;
Ball(){
x=random(500);
y=random(500);
vy=random(-4,4);
vx=random(-4,4);
dead=false;
}
void draw(){
if(dead==true)return;
ellipse(x,y,50,50);
if(dist(mouseX,mouseY,x,y)<50){
dead=true;
}
x=x-vx;
y=y-vy;
if(y>500||y<0)vy=-vy;
if(x>500||x<0)vx=-vx;
}
}
Ball [] balls;
void setup(){
size(500,500);
balls=new Ball[20];
for(int i=0;i<20;i++){
balls[i]=new Ball();
}
}
void draw(){
background(255);
for(int i=0;i<20;i++){
balls[i].draw();
}
}
之後加上vy+=0.98; 重力加速度
使用Reborn做出像彈幕遊戲一樣的效果
只要滑鼠碰到紅色點點就Gameover了
//Step03-2 用 class物件
class Ball{//我們發明 Ball物件
float x, y, vx, vy;
boolean dead;
Ball(){//建構 同名的東西
reborn();
}
void reborn(){
x = random(500);
y = random(500);
vy = random(-2,2);
vx = random(-2,2);
dead = false;//沒有死掉
}
void draw(){
if(dead==true) return;
fill(255,0,0); ellipse(x,y, 5,5);
if( dist(mouseX,mouseY,x,y)<5 ){
dead=true;
gameOver=true;
}
x = x + vx*1;//速度*時間=距離
y = y + vy*1;
if(y>500 || y<0) reborn();
if(x>500 || x<0) reborn();
}
}
Ball [] balls;
void setup(){
size(500,500);
balls = new Ball[99];
for(int i=0; i<99; i++){
balls[i] = new Ball();
}
}
boolean gameOver=false;
void draw(){
background(0);
for(int i=0; i<99; i++){
balls[i].draw();
}
if(gameOver) background(255,0,0);
}





沒有留言:
張貼留言