# GeoGebra 教學 14:使用按鈕及核取方塊控制動畫 > 作者:王一哲 > 日期:2022/5/9 本次課程檔案已上傳至 [GeoGebraTube](https://www.geogebra.org/m/zph29waw),可以線上操作或下載檔案。 <br /> ## 目標 我們之前都是在數值滑桿上按滑鼠右鍵,再點選快速選單中的開始動畫,但是這樣似乎有點麻煩。比較直覺的操作方式,應該是有一個按鈕,點一下開始動畫,再點一下暫停動畫;另一個按鈕則是重置動畫,點一下將時間歸零;或是有一個核取方塊,打勾開始動畫,取消打勾停止動畫。下圖是以水平拋射為例,使用按鈕及核取方塊控制動畫。 <img height="70%" width="70%" src="https://imgur.com/E2Lwq4y.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">使用按鈕及核取方塊控制動畫</div> <br /><br /> ## 基本的水平拋射動畫 1. 於指令列中依序輸入以下指令定義數值 ```latex H = 10 g = 9.8 v_0 = 10 tmax = sqrt(2*H/g) ``` 2. 於指令列中輸入以下指令新增數值拉桿定義時間 t,再開啟**屬性視窗**,將動畫種類調整為**遞增**。 ```latex t = Slider(0, tmax, 0.01*tmax) ``` 3. 於指令列中輸入以下指令新增隨時間移動的點P。 ```latex P = Point({v_0*t, H - 0.5*gt**2}) ``` 4. 於指令列中輸入以下指令新增水平抛射軌跡。到步驟4為止,就是一個可以由數值滑桿控制的水平拋射動畫。 ```latex trail = Curve(v_0*t, H - 0.5*g*t**2, t, 0, tmax) ``` <br /> <img height="70%" width="70%" src="https://imgur.com/q4qGLvm.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">基本的水平拋射動畫</div> <br /><br /> ## 新增控制動畫的按鈕 1. 於指令列中新增控動畫用的布林值 state 並預設為**否** (**False**)。雖然在 GeoGebra 當中 True 及 False 可以用小寫字母開頭,不過我為了符合大多數程式語言的寫法,以下的指令中都還是採用大寫字母開頭。 ```latex state = False ``` 2. 由工具列選取**按鈕**工具,於繪圖區上想要新增按鈕的位置點一下滑鼠左鍵,看到出現的按鈕視窗先按下**確定**。 <br /> <img height="20%" width="20%" src="https://imgur.com/xLUzIf6.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">由工具列新增按鈕</div> <br /> <img height="40%" width="40%" src="https://imgur.com/fsWOqJf.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">按鈕視窗</div> <br /><br /> 3. 再開啟按鈕的屬性視窗,先在**一般**分頁中將按鈕名稱改為 **onoff**。 <br /> <img height="75%" width="75%" src="https://imgur.com/yZIG9aT.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">按鈕屬性視窗:一般</div> <br /><br /> 4. 再於**程式** ⇒ **OnClick** 分頁中新增以下的程式碼 ```latex SetValue(state, If(state, False, True)) StartAnimation(t, state) SetCaption(onoff, If(state,"暫停", "開始")) SetColor(onoff, If(state, "Red", "Blue")) ``` 第一行的 **SetValue** 用來更新布林值 state 的數值,若 state 原為 True 將它更新為 False;反之則更新為 True。第二行的 **StartAnimation** 用來控制動畫,動畫由第一個參數裡的物件控制,在此為數值滑桿 t,當第二個參數值為 True 時會執行動畫。第三行的 **SetCaption** 用來更新按鈕 onoff 的標籤,若 state 的值為 True 時將標籤更新為 **暫停**,反之則更新為 **開始**。第四行的 **SetColor** 用來更新按鈕 onoff 的標籤顏色,若 state 的值為 True 時將標籤顏色更新為 **紅色**,反之則更新為 **藍色**。比較特別的地方在於,要先將屬性視窗關閉,才會真的更改按鈕的屬性。一開始按鈕標籤上的字還沒有改變,但是在點選按鈕之後就會改變了。 <br /> <img height="75%" width="75%" src="https://imgur.com/Z9Xlt2x.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">按鈕屬性視窗:程式</div> <br /> <img height="70%" width="70%" src="https://imgur.com/WhwXEGc.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">新增的按鈕</div> <br /> <img height="70%" width="70%" src="https://imgur.com/rAv0WL0.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">點取按鈕之後的效果</div> <br /><br /> 5. 用相同的方法新增將時間 t 重置為 0 的按鈕 reset,其中程式碼改為 ```latex SetValue(t, 0) ``` <br /> <img height="70%" width="70%" src="https://imgur.com/soCcC3o.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">新增重置按鈕</div> <br /><br /> ## 新增控制動畫的核取方塊 1. 由工具列選取**核取方塊**工具,於繪圖區上想要新增按鈕的位置點一下滑鼠左鍵,看到出現的按鈕視窗先按下**套用**,同時會在代數區新增一個布林值 a。 <br /> <img height="60%" width="60%" src="https://imgur.com/eKaJVw4.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">新增核取方塊視窗</div> <br /> <img height="75%" width="75%" src="https://imgur.com/gvu8N4D.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">新增核取方塊</div> <br /><br /> 2. 開啟核取方塊的屬性視窗,於**程式** ⇒ **OnUpdate** 分頁中新增以下的程式碼 ```latex StartAnimation(t, a) SetCaption(a, If(a, "暫停", "開始")) ``` 一開始按鈕標籤上的字還沒有改變,但是在點選核取方塊之後就會改變了。 <br /> <img height="60%" width="60%" src="https://imgur.com/lk2abnR.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">核取方塊屬性視窗:程式</div> <br /> <img height="75%" width="75%" src="https://imgur.com/E2Lwq4y.png" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">可以控制動畫的核取方塊</div> <br /> <img height="75%" width="75%" src="https://imgur.com/W8S3dtA.gif" style="display: block; margin-left: auto; margin-right: auto;"/> <div style="text-align:center">最終成果</div> <br /><br /> ## 參考資料 1. [GeoGebra 討論區:Using Checkboxes or Buttons to start and stop "animation"](https://help.geogebra.org/topic/using-checkboxes-or-buttons-to-start-and-stop-animation-) 2. [GeoGebra 討論區:How to make a button to start and stop animation](https://help.geogebra.org/topic/how-to-make-a-button-to-start-and-stop-animation) 3. [GeoGebra 官方說明書:StartAnimation Command](https://wiki.geogebra.org/en/StartAnimation_Command) 4. [GeoGebra 官方說明書:StartCaption Command](https://wiki.geogebra.org/en/SetCaption_Command) 5. [GeoGebra 官方說明書:SetColor Command](https://wiki.geogebra.org/en/SetColor_Command) 6. [GeoGebra 官方說明書:SetValue Command](https://wiki.geogebra.org/en/SetValue_Command) <br /> --- ###### tags:`GeoGebra`