老師很認真的講解及分享每個項目之後,進入本週的進度課程––利用Processing寫出「隕石往下掉」的程式。
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
首先,我們會先寫出一個小畫家(上週進度)。
程式碼如下:
void setup(){ //設定
size(600,400); //畫布大小
}
void draw(){ //畫圖
if(mousePressed) line(mouseX,mouseY,pmouseX,pmouseY); //滑鼠按下時,線跟著滑鼠的軌跡。
}
再來我們修改一下小畫家,讓線變成點。
程式碼如下:
int x=0,y=0; //宣告兩個變數,x,y
void setup(){
size(600,400);
}
void draw(){
if(mousePressed){
x=mouseX; //x是滑鼠座標X
y=mouseY; //y是滑鼠座標Y
circle(x,y,10); //點的座標為(x,y)大小為10
}
}
再進化,讓點可以自動往下墜落。
程式碼如下:
int x=0,y=0;
void setup(){
size(600,400);
}
void draw(){
background(47,79,79); //讓每張圖都先蓋上背景,可以消除圓點留下的軌跡
circle(x,y,10);
y++; //圓點落下的速度,欲加速可改成y+=2、y+=3...
if(mousePressed){
x=mouseX;
y=mouseY;
}
}
再做得更完整一點!讓掉下來的隕石不要消失!
程式碼如下:
int []x={0,0,0,0,0,0,0,0,0,0}; //陣列,java寫法和C語言有些許不同!
int []y={0,0,0,0,0,0,0,0,0,0}; //java : []x={}; C : x[]={};
int n=0; //隕石的數量
void setup(){
size(600,400);
}
void draw(){
background(47,79,79);
for(int i=0;i<n;i++){ //利用for迴圈,讓上一顆隕石不會消失
circle(x[i],y[i],30);
y[i]+=3;
if(y[i]>=400-15) y[i]=400-15; //讓隕石能停留在地表上 (要扣掉半徑,因為座標會在圓心)
}
}
void mousePressed(){
if(n<=30){
x[n]=mouseX;
y[n]=mouseY;
n++; //隕石越來越多顆
}
}
也可以把點改成圖檔,換成可愛的隕石!
程式碼一樣放下面:
int []x={0,0,0,0,0,0,0,0,0,0};
int []y={0,0,0,0,0,0,0,0,0,0};
int n=0;
PImage img; //宣告一張圖
void setup(){
size(600,400);
img=loadImage("01.png"); //讀入一張圖(圖要事先放在data裡)
}
void draw(){
background(47,79,79);
for(int i=0;i<n;i++){
image(img,x[i],y[i],100,100);
y[i]+=3;
if(y[i]>=400-75) y[i]=400-75; //自行調整,讓圖能停在最下面即可
}
}
void mousePressed(){
if(n<=30){
x[n]=mouseX;
y[n]=mouseY;
n++;
}
}
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
課程結束。
沒有留言:
張貼留言