Processing教程 - 類和動態數組

2021-02-15 雲岸互動

這一期來講一講Processing中的總在一起搞事情的一對CP:

class 類 和 Arraylist 動態數組

圖文比較簡略,推薦看視頻 (∗ᵒ̶̶̷̀ω˂̶́∗)੭₎₎̊₊♡

從代碼的角度來看,class 類 是一種結構化封裝相關變量和函數的一種數據類型。從我們使用和理解的角度來看,我們定義的類,往往表徵了一種或具象或抽象的事物。比如對於教程中的雪花來說,我們定義一個雪花的類,再在其中構建雪花的位置/尺寸/速度等變量,以及它的下落/旋轉/呼吸的動態變化的函數。這些變量和動態函數都有名字,這樣代碼組織和調用起來就非常的直觀了。注意類只是一種定義,使用時還需要建立具體的對象。通過調用對象來執行具體操作。
事實上,類也是「面向對象的編程概念」的核心要義。

Read more about

Object-Oriented Programming Concepts

https://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| 頁面查看


相關焦點

  • VBA中數組的利用及對「過程」的理解(VBA學習方案之五)
    2.1.6 在教程的講解中,我接著講解了數組的初步知識,在VBA中,數組是一處必須理解的知識點,我一直將數組作為變量的一種來看待。關於對於數組的講解,我會利用我的第三套教程進行專門講解,在教程中我是將數組和字典的知識點是一起來講解的。
  • 程式設計師必知的數據結構與算法基礎:線性表數據結構之數組
    什麼是數據結構和算法很多教材或者教程再開篇的時候都會來介紹這兩個概念,但是概念畢竟是抽象的,所以我們不需要死扣定義,畢竟我們不是為了考試而學的,但這並不是說我們不需要理解其概念,我們只是說不要陷入概念的怪圈。下面我們來介紹一下相關概念:1.
  • IC驗證系列之SV隊列&關聯數組
    SystemVerilog引入了一種新的數據類型,即隊列 像動態數組一樣,隊列可以增長和縮小
  • C語言數組的優缺點,你有學廢嗎?
    例如,整數數組保存int類型的元素,而字符數組保存char類型的元素。下面是數組的表示形式:但是,數組有其自己的優點和缺點。以下是數組的一些優點:在數組中,使用索引號可以很容易地訪問元素。搜索過程可以輕鬆地應用於數組。
  • javascript中數組的22種方法
    、數組排序方法、數組拼接方法、創建子數組方法、數組刪改方法、數組位置方法、數組歸併方法和數組迭代方法共10類來進行詳細介紹。)和pop()方法允許將數組當作棧來使用。unshift()和shift()方法的行為非常類似於push()和pop(),不一樣的是前者是在數組的頭部而非尾部進行元素的插入和刪除操作。棧是一種LIFO(Last-In-First-Out,後進先出)的數據結構,也就是最新添加的項最早被移除。而棧中項的插入(叫做推入)和移除(叫做彈出),只發生在一個位置——棧的頂部。
  • 精通Excel數組公式020:MMULT數組函數
    矩陣相乘的規則1.第一個數組的行數與第二個數組的列數必須相等。2.結果數組的大小是第一個數組的行數乘以第二個數組和列數。 下圖2展示了使用MMULT函數計算女隊和男隊的總成本。:(1)任意單元格為空或包含文本(2)數組1中的列數不等於數組2中的行數(3)MMULT函數返回的輸出值超過5460個單元格 MINVERSE函數和MUNIT函數MINVERSE函數和MUNIT函數有助於使用矩陣代數求解方程組。
  • 遞歸和動態規劃
    這其實和動態規劃有著異曲同工的地方。我們結合求和問題來講解一下, 題目是給定一個數組,求出數組中所有項的和,要求使用遞歸實現。對於單個因素的,我們最多只需要一個一維數組即可,對於如背包問題我們需要二維數組等更高緯度。爬樓梯我們並沒有使用一維數組,而是藉助兩個變量來實現的,空間複雜度是 O(1).之所以能這麼做,是因為爬樓梯問題的狀態轉移方程只和前兩個有關,因此只需要存儲這兩個即可。
  • Excel VBA如何定義數組,這裡有最全的數組定義方法
    No.1VBA中的數組定義和賦值,是編程進階的一個標誌。無論什麼編程語文,數組的應用是一個十分重要的項目。如何玩到熟練,就各有各的玩法。但是基礎的東西,一定要掌握牢固。這樣才在應用的過程中,不會迷茫。No.2首先看一下上面的圖片,是為對數組定義的一個集合。
  • Julia語言極簡入門教程
    這個教程以及集智俱樂部的視頻:https://www.bilibili.com/video/av28248187/都可以任意轉載和修改。希望註明出處,也希望可以幫忙宣傳一下中文社區(當然這也並不是強制的)。
  • 教程|Python Web頁面抓取:循序漸進
    另外,小Oxy所介紹的教程適用於所有作業系統。但是,在安裝學習Python所用的環境和在正式開發環境的配置可能會稍有不同。準備工作這次為大家介紹的教程選用了3.8.3版本的Python,也適用於所有3.4+的版本。下面跟著小Oxy一起學習吧!
  • 第三篇:C語言中數組與變量的不同,一個更好用的存儲空間
    >數組。從定義中可以挖掘出數組兩大的特點:類型相同。在C語言中,數組元素的類型必須保持一致。有序。數組元素之間是彼此挨在一起的,類似火車車廂,一節節連在一起。而集合類似於動態數組,其長度(大小)可以自動伸縮(像氣球一樣,可大可小),但集合中的元素類型可以不同。說明:C語言中沒有集合,在Java、C#等程式語言中存在集合的應用。
  • 旋轉數組(Rotate Array)
    來源 |景禹(微信公眾號ID:LifeAtaraxia)旋轉數組旋轉數組分為左旋轉和右旋轉兩類,力扣 189 題為右旋轉的情況,今日分享的為左旋轉。給定一個數組,將數組中的元素向左旋轉 k 個位置,其中 k 是非負數。
  • 遍歷工作薄和工作表(For Each循環的利用)
    不可隨用戶定義類型的數組一起使用「For Each...Next」語句,因為「Variant」不可包含用戶定義類型。2 遍歷工作薄和工作薄的代碼下面代碼中,我們將利用「For Each...Next」語句遍歷所有打開的工作薄和每個工作薄的工作表的名稱。
  • Axure 教程:動態圖表——排名圖
    之前的文章Axure教程:可視化視圖和大家分享了怎樣用中繼器來製作圖表。後來有粉絲問我可不可以用中繼器做成動態的圖表。所以現在作者就教大家怎麼用axure來製作動態圖表,今天先來製作排名圖。製作方法(1)製作動態面板材料10個text文本框,10個條形,10個number文本框,如下圖擺放。
  • 為什麼數組下標從0開始
    在討論數組下標為什麼從0開始之前我們先回顧一下數組有什麼特點。數組的優點:1.內存中佔據連續的內存空間2.數據隨機訪問,也就是說獲取數據非常高效那為什麼說數組的數據可以隨機訪問而且取數據非常高效呢?下面我們來看這樣一張圖:上圖是一個長度為10的整型數組,我們假設數組的首地址是1000。不難看出當下標從0開始的時候,數組中各個元素的首地址計算公式是:a[i]地址 = 1000 + i*4。(其中1000是數組a的首地址,4是每個元素佔的內存大小(int佔4個字節大小)。)
  • MATLAB二維數組(矩陣)的創建
    MATLAB 二維數組與矩陣之間有很大的相關性,二維數組是由實數或複數排列成矩形構成的,而且從數據結構上看,矩陣和二維數組沒有區別。
  • Js Array數組ES5/ES6常用方法
    ,改變了原數組console.log(a) // [1,"我是","插入的值",4,5]concat():數組和數組的粘結成新的數組(參數:可以為多個值或數組)返回:新的數組,原數組不變。 返回:新的反序數組,也改變了原數組。
  • Excel中獲取項目最早開始和最晚結束日期,這些方法你用了幾個?
    今天營長會介紹四種方法:MAXIFS/MINIFS函數MAX/MIN+FILTER組合函數MAX/MIN+IF數組函數數據透視表案例數據在編制項目項目計劃時,多個項目不同階段的開始和結束日期如下,請計算每個項目的最早開始日期和最晚結束日期。
  • DTS Audio Processing 介紹
    簡介透過DTS Audio Processing,您可以通過設備的揚聲器體驗增強的音頻,包括無失真音量和更深的低音.使用DTS以身臨其境的全景收聽體驗欣賞您的音樂, 電影和遊戲.讓您身歷其境,透過耳機感受令人震撼的音效.支援機型支援Intel Tiger Lake UP3平臺以後的機型.