我們又回到「繪製溫斯頓」這個程式了
但我加了一些文字
看,我想做的就是
放一個溫斯頓在每一個標籤下面
來顯示他不同的人生階段
現在他在螢幕上到處亂竄
這是因為我們把這函數裡的
faceX 和 faceY 設成隨機數
但是我們要做的是「嘿,這就是
我想你把這溫斯頓畫到的指定位置。」
我想每次召喚函數的時候
都能準確說明它的位置
就像我們設定
ellipse() 和 rect() 的時候一樣
我想放溫斯頓在這裡、這裡、一個
溫斯頓在這裡、一個溫斯頓在這裡
我不想每次召喚函數的時候
溫斯頓隨機亂跑
要做到這一點
我們需要指定函數裡的參數
既要在函式定義裡設置參數
頂部這裡
也要在召喚函數裡設置參數
下面這裡
在 drawWinston() 裏
我們給它傳遞 faceX 和 faceY
讓該函數使用我們傳遞的值
而不是使用隨機產生的值
我們先想想要在下方的函數召喚
傳遞什麼數值
我們想要把溫斯頓放在每行文字下面
所以我們該想要每個溫斯頓的 x 跟 y
跟 text() 的座標非常相近
可能溫斯頓的 y
比文字的低10個像素左右
那第一個的就是 10, 30
然後 200, 230 ... 10, 230 ... 200, 230
跟文字座標是一樣的
只是每一個 y 我都加了10
因為我只想它低一點點
但溫斯頓沒有動
這是因爲我們沒有告訴上面的函數
我們正傳遞它參數
所以它還在用這些隨機值
為了告訴這些函數「我們要給你這些資訊啦」
我們須在這些括弧裡輸入參數的名稱
我們將其命名為 faceX 和 face Y
用逗號隔開
這樣命名是因為在該函數裡面
我們已經用了這些名字
這樣我們就不用重寫其餘的程式碼了
但是仍然什麼都沒有發生
溫斯頓還是周圍亂跑
如果你看看我們頂部的函數
你會發現隨機值
還是覆蓋在 faceX 和 faceY 上
所以我們要做的
就是把這兩行都刪掉
噔噔!現在 faceX 和 faceY 傳到函數裡了
而且使用我們在下面召喚的值
但是如你所見,溫斯頓擺放的位置不是很正確
因為我忘記了文字是左對齊
臉則是居中
所以我只需要修改一下我的數字,對吧?
我要把 x 右移很多, y 下移一點
好了,小孩溫斯頓弄好了
繼續修改
現在只要修改一下函數的參數值即可
完全不用修改函數定義
它會使用我們傳給它的任何值
就像製作 ellipse() 和 rect() 時一樣
我已經差不多擺放好了
但我發現溫斯頓有點大
他正重疊在一起
他的大小不大對勁
由於我放了畫出溫斯頓的程式碼
在一個函數裏
我能夠一次改變全部的大小
只要修改這行畫橢圓的程式碼即可
讓我們將他改成 190
耶,溫斯頓減肥了!和 190
現在他的大小合適了
然後,我還可以微調一下
這樣我就能把他放進去了是不是?
酷!
讓我們來回顧下這程式碼的功能
它定義了一個叫做 drawWinston() 的函數
這函數有兩個值
標名為 faceX 和 faceY
實際上這兩值就是變數
我們可在函數裏任何地方使用它們
就像我們以前用於
宣告在頂部的變數一樣
宣告了之後便可隨時召喚這函數
我們可以傳遞不同的值
而函數便會使用這些新的值
你見證了這些函數的神奇效應
我們可以設計一些
我們覺得好用的程式碼來重複使用
但我們也可以利用參數來說
「嘿,你可以在這程式碼裏
修飾一下這小東西。」
就像一個菜譜,你寫下總體指令
如果你突然發現你要餵飼的
是四個溫斯頓而不只是一個
你不用一切重新開始
你只需要調整一下指令原文
並把一切乘上4即可
現在你可以開始創造自己的
程式碼菜譜啦!真好吃!