2012年7月5日 星期四

[Puredata] workshop day3_阻力





1. split

  • 判斷大小值,若大於0.1便從左方輸出,若小於500便從右方輸出
  • 輸出值不斷減二,但因為split,數值若低於0.1,就不會往下傳


2.key

  • 設定空白鍵,按下空白鍵,score+10
  • 但因為split,數值若高於500,就不會往下傳



[Puredata] workshop day3_gem advance 2

1.repeat
Object,repeat,重複執行,後方數字為重複次數
在repeat下接translateXYZ,每重複產生一個圓形,位置便往右邊0.2



2. 若使用上separator,每個位置都會在(0.2, 0)



3. Array
  • 使用array放置每一個圓球的位置
  • array,put / Array
  • name裡設置array的名稱
  • size裡設定array的大小


4. tabread
  • Object,tabread,讀取array,後方接array的名稱
  • 輸入值為array的位置,輸出值為該位置的數值
  • 下方陣列名稱為train,size為5


5. 動態讀取array
  • 使用counter計數從0~9,讀取每一個位置的值



6. array的位置控制X,array的內容控制Y,因此array的圖形便會與gem產生的圓相同




7. 使用array位置控制顏色



8. 使用滑鼠的Y傳數值給array,使用tabwrite寫入,右邊的輸入值為array位置


8. 使用麥克風的大小傳數值給array,使用tabwrite寫入,右邊的輸入值為array位置





9. dsp,下列寫法等同在主控台開始compute audio



[Puredata] workshop day3_gem advance 1

1. dimen
  • 一般使用create, 1接到gemwin即可產生gem,再加上dimen可以調整gem的大小
  • dimen 螢幕寬度 螢幕高度



2. 若要寫兩個圖形可使用兩個gemhead產生,或者使用t a a,接上兩個圖形


3. 當我們要控制圖形位置,需使用translateXYZ



4. 若使用一個gemhead產生,因為t a a由右執行到左的特性, 左邊的translateXYZ會被右邊的translateXYZ影響,也就是說,circle會先執行square的translateXYZ,也就是X位移1、Y位移1,再執行自己的translateXYZ,X位移1、Y位移-1



5. 為避免彼此影響,使用separator再接上translateXYZ,便可將指令分開



6. 公轉
  • 使用Toggle、metro、counter,做一個0~360的計數器,使用rotateXYZ,讓circle跟square同步旋轉




7.  自轉
  • 在separator之後接上rotateXYZ,便可使方塊除了與圓形一起公轉,還擁有自己的自轉




2012年7月4日 星期三

[Puredata] workshop day2_make a little game 2

1. 建立一個由使用者 /玩家操控的主角

  • 開啟新檔,命名為player
  • 畫一個圓來當作主角,顏色選用與ball不同





















2. 替玩家設立預設出現位置

  • 使用translateXYZ來改變玩家位置
  • 使用$來建立變數
  • 運用Message,在主控台顯示此物件各種變數代表意義
  • 設立全域變數,使用v,半徑為playerR,X為playerX,Y為playerY
  • 可建立subpatch,讓畫面較為整潔













































3. 判斷ball有無碰到player

  • 回到ball的檔案
  • 為取得是否碰撞,需得知ball的XY,利用send區域變數($0-),傳送XY數值,ball的XY值設定於translateXY的subpatch之中




4. distance
取得ball的位置後便可判別他與player之前的距離
在subpatch "translateXY"中建立subpatch "collision ",將程式寫於其中
使用 r 取得ball的XY值,取得Y的同時,同步取得player的XY值
Object,distance2d,偵測兩點距離的方式,但由於只有兩個輸入點,利用pack先將xy集合後,再輸入給distance2d






















5. 建立碰撞反應

  • r 接收ball的半徑,用t f b,把ball的半徑跟player的半徑相加





















6.  產生碰撞

  • 當距離 <= 兩圓半徑,便產生碰撞
  • 將兩者相比,如果成立,便產生聲音




























7.  利用判斷碰撞產生視覺回饋

  • 判斷碰撞後,用s score,將數值傳出
  • 到player的檔案,接收,r score
  • 使用score作為觸發,每當碰撞,便將player的半徑降低









[Puredata] workshop day2_make a little game 1

1. 開啟新檔,檔案名稱為"start"

  • 使用loadbang,讓檔案一執行便開啟視窗













2. 開啟新檔,檔案名稱為"mainboard"

  • mainboard為主要程式區,將其他程式以patch的方式呼叫到mainboard之中
  • 將步驟1建立的檔案,在mainboard中呼叫
  • PS. 以執行模式點選呼叫的程式,可以直接開啟程式內容






















3. 開啟新檔,檔案名稱為"ball"

  • 此檔案為建立圓形用



4. 讓圓形開始移動,執行模式點選reset旁的0,即可歸零位置
















5. 為了讓圓形遇到邊界可以反向,建立判別式 >4  、 <-4



6. 利用設定區域變數,讓畫面看起來更乾淨
區域變數宣告方式為" $0- " 加上變數名稱
s為send的意思,傳送值,s $0-xVector,傳送一個區域變數名稱為xVector
r,receive接收值,r $0-xVector,接受一個區域變數名稱為xVector

























7. 每個圓形的起始位置都不一樣,才會有趣

  • 使用loadbang,讓ball的程式一執行便設定隨機位置,給值到步驟四所提到的f迴圈之中
  • 設定一個變數,$1,並且把值給到circle,讓ball可以控制大小
  • 下圖中,Y_translate的r $0-xVector與 s $0-xVector有誤, 改為 r $0- yVector與 s $0-yVector

























8. 產生兩顆球,大小分別為0.3、0.1






















9. 使用subpatch讓版面更整齊

  • 下圖中,Y_translate的r $0-xVector與 s $0-xVector有誤, 改為 r $0- yVector與 s $0-yVector





























10. 設定圓形的顏色,使用阿亂怪招

















11. 運用$1的變數,改變半徑後也改變速度
建立一個subpatch,名稱為"meta",存放初始值,將步驟7的set position original放置到meta之中
$1傳送進後,使用t f f f,傳送正負值的速度跟半徑





12. 讓球碰撞到有聲音,設定一個subpatch"sound"

  • 在main中新增一個dac~
  • 使用throw~,將聲音訊號丟到main中的dac~,throw~就像是send訊息一樣,只是傳送的是音訊,一樣要設置變數,main中則是用catch~來接收
  • Message,1,0 200,從一到零,時間200毫秒,接到line,讓它呈線性變化,因此可以產生漸強漸弱的音量
  • *~後面沒放數字,預設值為零,利用line,傳送1~0的值,使之發出聲音


























13. 當球反彈,便發出聲音,因此將sound subpatch接到判斷式後面,此處使用send跟recive讓畫面更簡潔


14. 打開主控台的compute audio,就可以聽到聲音了