2017年3月27日 星期一

製作日誌--018

上周在趕作業,就沒有更新了
於是今天的更新決定來個大的
本日將鬧鐘系統搭載完成
以及將失望表情的動畫完成

###鬧鐘###

實作上跟備忘錄差不多,因為兩者本質上是類似的
一樣有新增項目、查看、刪除、清空與開關的功能
不過鬧鐘這裡不一樣的是
只要是沒有設定任何鬧鐘的情況下
開關就一定是關著的狀態
且不被允許在沒有鬧鐘的情況下打開鬧鐘
這個部分下面會詳細說明

由於各項鬧鐘功能的實作和備忘錄十分相似
這裡只說明基本鬧鐘的做法
首先先在初始參數中宣告"alarmtime"、"alarmnum"、"alarmopen"三個變數
alarmtime是用來儲存全部的鬧鐘時間
其形態是以字串為元素的陣列
alarmnum代表目前設定的鬧鐘個數
alarmopen則是用來判斷目前鬧鐘是否為開啟狀態
接著看到這段程式碼:

SetAlarm
{
    "\0\s[0]想要小鳥在什麼時候叫%(username)呢?\![open,timeinput,OnSetAlarm]\e"
}

OnSetAlarm
{
    tmpalarmtime = reference0
    time = SPLIT(reference0,",")
    "\0\s[0]在%(time[0])時%(time[1])分的時候提醒%(username)嗎?\n\n/
    \q[○是,SetAlarmYes]\n/
    \q[○否,SetAlarmNo]\e"
}

Select.SetAlarmYes
{
    alarmtime ,= tmpalarmtime
    alarmnum += 1
    "\0\s[0]我知道了!\e"
}

Select.SetAlarmNo
{
    "\0\s[0]真的不需要小鳥提醒%(username)嗎?\w8\1\s[10]總是不能什麼事都依賴妳吧。\w8\0\s[0]\n\n嗯…\w5我知道了。\e"
}

教學文章進行至此,相信讀者應該都已經對SakuraScript有一定的了解了
這裡就簡單說明這段程式碼的功能
首先是先詢問使用者想要設定鬧鐘的時間
輸入的時間會被當作字串傳入OnSetAlarm
我們只取時與分
然後詢問使用者輸入是否正確
是的話就新增鬧鐘,不是就不做任何修改

再來我們直接跳過其他功能的實作
這些功能的寫法都可以參考備忘錄的作法
詳情請閱讀製作日誌--014製作日誌--017
以下我們看到鬧鐘實踐的方式:

if alarmopen == 1
{
    for i = 0; i < alarmnum; i ++
    {
        time = alarmtime[i]
        time = SPLIT(time,",")
if hour == time[0] && minute == time[1]
        {
"\0\s[0]現在是%(time[0])時%(time[1])分喔!\![sound,play,alarm.mp3]\x\![sound,stop]"
--
"\0\s[0]唉嘿嘿,小鳥有記得提醒%(username)喔!"
"\0\s[2]咦…\w5…\w5…\w8\n%(username)怎麼一臉呆滯?\w8\1\s[10]該不會是小鳥妳把%(username)給嚇傻了吧。\w8\0\s[0]\n\n真的嗎!?\w5\n對不起!%(username)!"
--
"\e"
break
}
    }
}

這段程式碼放在OnMinuteChange事件中
每一分鐘過去就檢查一次是否有鬧鐘該響鈴
首先檢查鬧鐘是否開啟
接著用for迴圈將所有鬧鐘檢查過一輪
一旦找到一個符合的時間就響鈴
而響鈴的辦法是使用\![sound,play,alarm.mp3]
這個指令會去自動搜尋放在人格資料夾下稱為alarm.mp3的檔案
並且播放
接著看到\x指令
這個指令會使目前對話框停滯,直到使用者去點擊對話框為止
點擊後對話框會直接刷新,進行之後的對話
而我們可以看到,在\x指令後接著\![sound,stop]的指令
因為使用者點擊就代表關掉鬧鐘的動作
這樣就完成鬧鐘功能了

===================================================================
把失望表情的動畫給實作了
之後畫的表情可能會開始脫離偽春菜的預設表情列表
以需要用到的為優先考量


via GIPHY

有點鬧彆扭的樣子真可愛

2017/03/27

沒有留言:

張貼留言