這一期來講一講Processing中的總在一起搞事情的一對CP:
class 類 和 Arraylist 動態數組
圖文比較簡略,推薦看視頻 (∗ᵒ̶̶̷̀ω˂̶́∗)੭₎₎̊₊♡
從代碼的角度來看,class 類 是一種結構化封裝相關變量和函數的一種數據類型。從我們使用和理解的角度來看,我們定義的類,往往表徵了一種或具象或抽象的事物。比如對於教程中的雪花來說,我們定義一個雪花的類,再在其中構建雪花的位置/尺寸/速度等變量,以及它的下落/旋轉/呼吸的動態變化的函數。這些變量和動態函數都有名字,這樣代碼組織和調用起來就非常的直觀了。注意類只是一種定義,使用時還需要建立具體的對象。通過調用對象來執行具體操作。
事實上,類也是「面向對象的編程概念」的核心要義。
Read more about
Object-Oriented Programming Conceptshttps://docs.oracle.com/javase/tutorial/java/concepts/index.html
解釋ArrayList 動態數組之前,我們先認識一下什麼是數組。簡單的說,數組就是一串某種類型的數據,數組接受的數據類型可以是整數int, 浮點數float,等等,甚至可以是圖片PImage,自然也可以是自定義的類class。注意數組可以是多維的,而動態數組只能是一維的。數組的大小是在使用之前定義後固定不變的,而動態數組的大小長短是可以隨時變化的,add增加,remove去除。
動態數組+類這個搭配,非常適合寫小遊戲,因為遊戲中的元素的出現和消失都不是預先可以固定好的,而是隨機動態增減的。當然這對CP也很適合用來組織實時交互生成的畫面,遊戲和互動藝術本就是同根生嘛。
實例解析:視頻教程中,我們通過動態數組+類的方式,呈現了雪花下落的畫面。小夥伴們自行看代碼和視頻理解消化吧,這裡就不多解釋了,有問題歡迎留言。
PImage snowflake;
ArrayList<Flake> f;
void setup() {
size(800, 800);
imageMode(CENTER);
snowflake = loadImage("Snowflake.png");
f = new ArrayList<Flake>();
for (int i=0; i<10; i++) {
f.add(new Flake());
}
}
void draw() {
background(0);
if(random(1)<0.05)f.add(new Flake());
for (int i=0; i<f.size(); i++) {
Flake ff = f.get(i);
ff.move();
if (ff.y>height) {
f.remove(i);
i--;
} else {
ff.display();
}
}
}
class Flake {
float x, y;
float sz;
float speed;
float alp,stp;
float ang,astp;
Flake() {
x = random(width);
y = random(-50,0);
sz = random(0.1, 0.2)*width;
speed = random(1.0,2.5);
alp = random(255);
stp = random(1,3);
ang = random(TWO_PI);
astp = random(-0.05,0.05);
}
void move() {
y+=speed;
}
void display() {
alp += stp;
if(alp<0 || alp>255)stp=-stp;
ang += astp;
tint(255,alp);
pushMatrix();
translate(x,y);
rotate(ang);
image(snowflake, 0, 0, sz, sz);
popMatrix();
noTint();
}
}
TIPS:
最後送上一份Processing學習用代碼
轉發本文至朋友圈,截圖後臺留言,
我們將上圖代碼網盤連結發給你喔!!感恩~
啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
相關文章:
Processing教程之噪波函數
Processing教程之序列幀動畫
Processing教程之遞歸與分形
更多教程請在 |編程教程| >> |Processing| 頁面查看