tag:blogger.com,1999:blog-87999134653905865932023-11-16T18:38:31.115+08:00偽春菜人格製作日誌記錄製作新偽春菜人格的日記
方便個人追蹤進度
歡迎交流
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-8799913465390586593.post-37220621500503143072017-04-17T01:41:00.000+08:002017-04-17T01:41:40.741+08:00製作日誌--019上周剛好遇到期中考周<br />
於是偽春菜就又被放置一周了<br />
<br />
上次把鬧鐘功能補齊<br />
這次就只是稍微改得更方便一點<br />
<br />
<b><span style="color: red;">###鬧鐘###</span></b><br />
<span style="color: orange;"><br /></span>
<span style="color: orange;">**鬧鐘開關**</span><br />
上次完成的鬧鐘在設定第一個時間的時候<br />
並不會自動把鬧鐘打開<br />
個人實測的時候還蠻常忘記打開的<br />
所以在加入第一個鬧鐘的時候<br />
會強制把該功能打開<br />
<span style="color: orange;"><br /></span>
<span style="color: orange;">**與備忘錄連動**</span><br />
在備忘錄的選單下面新增了"鬧鐘連動"的選項<br />
打開這項功能<br />
偽春菜便會在鬧鐘響完之後把備忘錄顯示出來<br />
<br />
之後如果有機會新增更多功能的話<br />
也會考慮像這樣的連動機制<br />
<br />
==============================================================<br />
今天幫小鳥弄了新表情<br />
不過還沒上色<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIg0l7N2Eu1vbuKzwckvsAY6kW9iiVezITTGUPvmZNlF5Y6JN5CUWw2SB_dDjbc_uHigd2BjD1RZePlTguSqe3qs0sD360koxC3y0oqtVdRp9F8HP7zvgBi6O03c-eIIGTIumLRqDVTpN3/s1600/0012.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIg0l7N2Eu1vbuKzwckvsAY6kW9iiVezITTGUPvmZNlF5Y6JN5CUWw2SB_dDjbc_uHigd2BjD1RZePlTguSqe3qs0sD360koxC3y0oqtVdRp9F8HP7zvgBi6O03c-eIIGTIumLRqDVTpN3/s320/0012.png" width="132" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
這次是疑惑或思考的表情...雖然不太像@@<br />
之後應該會在頭旁邊加個問號<br />
強行疑惑@@<br />
<br />
2017/04/17嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com1tag:blogger.com,1999:blog-8799913465390586593.post-77419372813376590092017-03-27T01:44:00.001+08:002017-03-27T01:44:21.445+08:00製作日誌--018上周在趕作業,就沒有更新了<br />
於是今天的更新決定來個大的<br />
本日將鬧鐘系統搭載完成<br />
以及將失望表情的動畫完成<br />
<br />
<b><span style="color: red;">###鬧鐘###</span></b><br />
<br />
實作上跟備忘錄差不多,因為兩者本質上是類似的<br />
一樣有新增項目、查看、刪除、清空與開關的功能<br />
不過鬧鐘這裡不一樣的是<br />
只要是沒有設定任何鬧鐘的情況下<br />
開關就一定是關著的狀態<br />
且不被允許在沒有鬧鐘的情況下打開鬧鐘<br />
這個部分下面會詳細說明<br />
<br />
由於各項鬧鐘功能的實作和備忘錄十分相似<br />
這裡只說明基本鬧鐘的做法<br />
首先先在初始參數中宣告"alarmtime"、"alarmnum"、"alarmopen"三個變數<br />
alarmtime是用來儲存全部的鬧鐘時間<br />
其形態是以字串為元素的陣列<br />
alarmnum代表目前設定的鬧鐘個數<br />
alarmopen則是用來判斷目前鬧鐘是否為開啟狀態<br />
接著看到這段程式碼:<br />
<br />
<span style="color: #0b5394;">SetAlarm</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]想要小鳥在什麼時候叫%(username)呢?\![open,timeinput,OnSetAlarm]\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"><br /></span>
<span style="color: #0b5394;">OnSetAlarm</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> tmpalarmtime = reference0</span><br />
<span style="color: #0b5394;"> time = SPLIT(reference0,",")</span><br />
<span style="color: #0b5394;"> "\0\s[0]在%(time[0])時%(time[1])分的時候提醒%(username)嗎?\n\n/</span><br />
<span style="color: #0b5394;"> \q[○是,SetAlarmYes]\n/</span><br />
<span style="color: #0b5394;"> \q[○否,SetAlarmNo]\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"><br /></span>
<span style="color: #0b5394;">Select.SetAlarmYes</span><br />
<span style="color: #0b5394;">{<span class="Apple-tab-span" style="white-space: pre;"> </span></span><br />
<span style="color: #0b5394;"> alarmtime ,= tmpalarmtime</span><br />
<span style="color: #0b5394;"> alarmnum += 1</span><br />
<span style="color: #0b5394;"> "\0\s[0]我知道了!\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"><br /></span>
<span style="color: #0b5394;">Select.SetAlarmNo</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]真的不需要小鳥提醒%(username)嗎?\w8\1\s[10]總是不能什麼事都依賴妳吧。\w8\0\s[0]\n\n嗯…\w5我知道了。\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"><br /></span>
教學文章進行至此,相信讀者應該都已經對SakuraScript有一定的了解了<br />
這裡就簡單說明這段程式碼的功能<br />
首先是先詢問使用者想要設定鬧鐘的時間<br />
輸入的時間會被當作字串傳入OnSetAlarm<br />
我們只取時與分<br />
然後詢問使用者輸入是否正確<br />
是的話就新增鬧鐘,不是就不做任何修改<br />
<br />
再來我們直接跳過其他功能的實作<br />
這些功能的寫法都可以參考備忘錄的作法<br />
詳情請閱讀<a href="https://ukagaka-making.blogspot.tw/2017/01/014.html">製作日誌--014</a>、<a href="https://ukagaka-making.blogspot.tw/2017/03/017.html">製作日誌--017</a><br />
以下我們看到鬧鐘實踐的方式:<br />
<br />
<span style="color: #0b5394;">if alarmopen == 1</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> for i = 0; i < alarmnum; i ++</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> time = alarmtime[i]</span><br />
<span style="color: #0b5394;"> time = SPLIT(time,",")</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if hour == time[0] && minute == time[1]</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>"\0\s[0]現在是%(time[0])時%(time[1])分喔!\![sound,play,alarm.mp3]\x\![sound,stop]"</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>--</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>"\0\s[0]唉嘿嘿,小鳥有記得提醒%(username)喔!"</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>"\0\s[2]咦…\w5…\w5…\w8\n%(username)怎麼一臉呆滯?\w8\1\s[10]該不會是小鳥妳把%(username)給嚇傻了吧。\w8\0\s[0]\n\n真的嗎!?\w5\n對不起!%(username)!"</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>--</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>"\e"</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break</span><br />
<span style="color: #0b5394;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"><br /></span>
這段程式碼放在OnMinuteChange事件中<br />
每一分鐘過去就檢查一次是否有鬧鐘該響鈴<br />
首先檢查鬧鐘是否開啟<br />
接著用for迴圈將所有鬧鐘檢查過一輪<br />
一旦找到一個符合的時間就響鈴<br />
而響鈴的辦法是使用\![sound,play,alarm.mp3]<br />
這個指令會去自動搜尋放在人格資料夾下稱為alarm.mp3的檔案<br />
並且播放<br />
接著看到\x指令<br />
這個指令會使目前對話框停滯,直到使用者去點擊對話框為止<br />
點擊後對話框會直接刷新,進行之後的對話<br />
而我們可以看到,在\x指令後接著\![sound,stop]的指令<br />
因為使用者點擊就代表關掉鬧鐘的動作<br />
這樣就完成鬧鐘功能了<br />
<br />
===================================================================<br />
把失望表情的動畫給實作了<br />
之後畫的表情可能會開始脫離偽春菜的預設表情列表<br />
以需要用到的為優先考量<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="270" src="//giphy.com/embed/l4FGq6ypFihvzyAF2" width="480"></iframe><br />
<a href="http://giphy.com/gifs/l4FGq6ypFihvzyAF2">via GIPHY</a><br />
<br />
有點鬧彆扭的樣子真可愛<br />
<br />
2017/03/27嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-64768765092673762212017-03-13T03:28:00.001+08:002017-03-13T03:28:53.780+08:00製作日誌--017難得的準時更新<br />
今天把備忘錄功能補齊了<br />
因為偽春菜本身有自己的一套語法<br />
很多操作上有不少限制<br />
只能用比較取巧的方式去處理一些功能<br />
<br />
<span style="color: red;"><strong>###備忘錄###</strong></span><br />
<strong><span style="color: red;"></span></strong><br />
本日的更新內容只有備忘錄<br />
因為刪除項目的部份讓我研究了一兩個小時<br />
以下開始說明實作方法<br />
<br />
首先,假設我們的備忘錄參數memo現在長這樣子:<br />
<br />
<span style="color: #073763;">memo = "0\n1\n2\n"</span><br />
<br />
在查看備忘錄時,因為有\n的存在,看起來就像條列式的清單<br />
為了讓使用者可以選取想要刪除的項目<br />
我們先用AYA的內建函數SPLIT來處理字串:<br />
<br />
<span style="color: #073763;">memoarr = SPLIT(memo,"\n")</span><br />
<br />
上面的操作會將memo分割成陣列,而分割點為\n<br />
在這裡便會將memo分割成["0","1","2",""]<br />
需注意最後面會多出一個空字串<br />
因為SPLIT的分割模式是一但看到分割點<br />
就會將前後分別做為單一字串放入陣列<br />
因此在memo中最後一個\n的前後分別是"2"與""<br />
這個部分讓我頭痛了一陣子<br />
所以在這裡特別提醒一下<br />
接著就是要將選項輸出了<br />
<br />
大家應該還記得選項的輸出方式為:<br />
<br />
<span style="color: #073763;">\q[標題,ID]</span><br />
<br />
但是這裡就有個問題,我們存在memoarr中的元素皆為字串<br />
而上面程式碼中的標題本身就只是一串字,而不是字串<br />
只是傳入內碼的時候會作為字串傳入而已<br />
因此要怎麼將memoarr中的字串成功在選項中被顯示呢?<br />
這時就可以利用AYA內建函數STRFORM<br />
該函數的功能與C語言中的sprintf相似<br />
以下便說明如何將memoarr的每個字串化為一個一個選項輸出:<br />
<br />
<span style="color: #073763;">question = STRFORM("\q[○$s,OnRemoveMemo,$d]\n", i, cnt)</span><br />
<br />
可以看到STRFORM的傳入值為一個有點怪怪的字串<br />
首先,上面程式碼中的$s和$d代表這個地方要由後面提供的變數來替換<br />
s代表string,代表替換變數型態為字串<br />
而d代表decimal,其他應該都與C語言相同<br />
因此上面程式碼中的$s與$d會分別被變數i與cnt代換<br />
而question變數便會存放"\q[○(字串i),OnRemoveMemo,(整數cnt)]\n"<br />
這樣便是一個選項的正確形式了<br />
由於選項中的ID為On開頭的函數,後面的參數會作為reference0、reference1...等等傳入ID函數<br />
而這裡的傳入值是cnt變數所存放的整數<br />
而前面也提過了,傳入值會以字串傳入<br />
<br />
現在要將memoarr的內容全部變成選項:<br />
<br />
<span style="color: #073763;">cnt = 0</span><br />
<span style="color: #073763;">talk = "\0\s[0]"</span><br />
<span style="color: #073763;">foreach memoarr;i</span><br />
<span style="color: #073763;">{</span><br />
<span style="color: #073763;"> if i != ""</span><br />
<span style="color: #073763;"> {</span><br />
<span style="color: #073763;"> question = STRFORM("\q[○$s,OnRemoveMemo,$d]\n", i, cnt)</span><br />
<span style="color: #073763;"> talk = talk + question</span><br />
<span style="color: #073763;"> cnt = cnt + 1</span><br />
<span style="color: #073763;"> }</span><br />
<span style="color: #073763;">}</span><br />
<br />
首先看到前面兩行<br />
cnt為計數器,記錄memoarr中每個字串的序數<br />
而talk為最後要讓偽春菜說出的話,因此初始值為開啟對話框與設定表情<br />
接著看到foreach迴圈,其功能跟python中的for i in list相同<br />
這裡便是以變數i作為迭代器,將memoarr中每個元素迭代一輪<br />
每一次迭代都檢查i是否為空字串,避免生成不該存在的選項<br />
這個動作便是在防範前面提到SPLIT分割模式所造成的問題<br />
再來看到STRFORM,裡面我將每個選項的序數做為reference0傳入OnRemoveMemo<br />
用途下面會說明<br />
每跑完一圈,cnt就加1,以得到正確的序數<br />
最後看到OnRemoveMemo怎麼處理刪除動作<br />
<br />
<span style="color: #073763;">OnRemoveMemo</span><br />
<span style="color: #073763;">{</span><br />
<span style="color: #073763;"> memoarr = SPLIT(memo)</span><br />
<span style="color: #073763;"> idx = TOINT(reference0)</span><br />
<span style="color: #073763;"> cnt = 0</span><br />
<span style="color: #073763;"> memo = ""</span><br />
<span style="color: #073763;"> </span><br />
<span style="color: #073763;"> foreach memoarr;i</span><br />
<span style="color: #073763;"> {</span><br />
<span style="color: #073763;"> if (idx != cnt) && (i != "")</span><br />
<span style="color: #073763;"> {</span><br />
<span style="color: #073763;"> memo = memo + i + "\n"</span><br />
<span style="color: #073763;"> }</span><br />
<span style="color: #073763;"> cnt = cnt + 1</span><br />
<span style="color: #073763;"> }</span><br />
<span style="color: #073763;">}</span><br />
<br />
這裡的操作基本與前一段程式碼相同<br />
首先看到idx變數,由於reference0會被當作字串傳入<br />
因此要用AYA內建函數TOINT將字串轉為整數<br />
接著在memo被更動前再一次將其分割並存入memoarr變數中<br />
然後將memo清空並重新將沒被刪除的內容填入<br />
這裡重新填入同樣用到foreach迴圈<br />
但是判斷式稍微不一樣<br />
要兩個條件同時為真才會執行if內的動作<br />
第一個是idx不等於cnt,這個判斷是確認當前i的序數是否等於待刪除項目的序數<br />
第二個是i不為空字串,這個判斷的理由在前面已經提過了<br />
在字串內部做刪除這個動作比較困難<br />
但刪除這個動作等價於將剩下的記錄下來<br />
因此我們便是用後者處理刪除的動作<br />
<br />
這裡的解說只提了最核心的功能<br />
而我另外還追加了選擇刪除項目時,最下面會出現取消選擇肢<br />
可以用來防按錯的情況<br />
而當memo被刪除所有項目後<br />
會自動還原到空白的狀態<br />
以及當memo為空白狀態時<br />
小鳥會提醒使用者目前備忘錄是空白而不進行刪除工作<br />
<br />
==================================================================<br />
今天是把失望表情完成之後才開始編程工作<br />
但並沒有將表情實裝,只有將設定檔寫好而已<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8vCkLgGiwuNoUikWkpoNyLu5mq8y3MU0CKOPni-OVz5xBRR-rP4S03kguYIICxDWIAmpfrhx8wh9ZAOOjL3KKjGIqrIZByeh-OwBr_888D-MHHL0e8Cilb48d7bWuFQD5-YSolI8jAmWe/s1600/0004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8vCkLgGiwuNoUikWkpoNyLu5mq8y3MU0CKOPni-OVz5xBRR-rP4S03kguYIICxDWIAmpfrhx8wh9ZAOOjL3KKjGIqrIZByeh-OwBr_888D-MHHL0e8Cilb48d7bWuFQD5-YSolI8jAmWe/s320/0004.png" width="132" /></a><br />
<br />
一個計畫拖越久,畫風就變越多<br />
這是一件無比哀傷的事情<br />
<br />
2017/03/13<br />
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-5580244674928629412017-03-06T17:45:00.000+08:002017-03-06T17:45:24.728+08:00製作日誌--016228連假沒了電腦,又休息一周<br />
不過這周的進度也很少<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
新增了兩個對話<br />
突然想到所有很電波的事情都丟給啾啾來說就好了<br />
這樣應該可以增加不少對話內容<br />
<br />
<strong><span style="color: red;">###備忘錄###</span></strong><br />
<br />
稍微調整了一下備忘錄所用到的函式<br />
<br />
=============================================<br />
由於先寫了些作業,能畫圖的時間剩不多<br />
就先把失望表情給描起來而已<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9-slWuxEvwV-tWJXNDyX01L2gUhknav7EWgl0WYhbcg7v6ivpaCIaI3laZtcNgmXZtFrtmkUIIWYT-Z_swJh7_84OlIo7BIsCGKbPkVX_66AwE2Wc6RZt22rVIX3-76RLB64TP_xyswrG/s1600/0004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9-slWuxEvwV-tWJXNDyX01L2gUhknav7EWgl0WYhbcg7v6ivpaCIaI3laZtcNgmXZtFrtmkUIIWYT-Z_swJh7_84OlIo7BIsCGKbPkVX_66AwE2Wc6RZt22rVIX3-76RLB64TP_xyswrG/s320/0004.png" width="132" /></a><br />
<br />
下周應該就可以上色了<br />
<br />
2016/03/06嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-41915094885734282522017-02-20T01:09:00.001+08:002017-02-20T01:09:49.665+08:00製作日誌--015開學了,之後的更新進度應該會和以前一樣一周一次<br />
不知不覺這個網誌也更新到第15篇文章了<br />
但每周的進度倒是越來越少<br />
<br />
今天程式的更新不多<br />
但是畫了新表情的草稿<br />
<br />
<strong><span style="color: red;">###溝通###</span></strong><br />
<br />
在與小鳥對話時如果輸入中包含"出門"或"出發"的話<br />
小鳥會問使用者是否要出門了<br />
如果選是,偽春菜會在對話後自動關閉<br />
這裡我銜接到了備忘錄的功能<br />
<br />
<span style="color: red;"><strong>###備忘錄###</strong></span><br />
<br />
新增初始參數goout,作為判斷是否在使用者出門時印出備忘錄<br />
出門提醒的開關在主菜單的備忘錄選單內<br />
設計上就只是在memo.dic中加上ChangeGoOut的函式<br />
並且在備忘錄選單中新增選項與對話<br />
設計非常簡單,便不詳細說明程式碼了<br />
<br />
======================================================<br />
<br />
這次的新表情是失望,但畫起來感覺像是鬧彆扭<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0AhaZ92cTRqqkCciFQYi7vB87vmwDyHRsPIcM3Gw3kLz5Ga_c6Lnivcp28UYGYW9aEnZOnK28d5_LN0DkxCxYyi2By9ZbeEHjykZykyh-qgpn9HPRblkPRdhoNR3o3EWHe1YfB4ITxVSO/s1600/0004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0AhaZ92cTRqqkCciFQYi7vB87vmwDyHRsPIcM3Gw3kLz5Ga_c6Lnivcp28UYGYW9aEnZOnK28d5_LN0DkxCxYyi2By9ZbeEHjykZykyh-qgpn9HPRblkPRdhoNR3o3EWHe1YfB4ITxVSO/s320/0004.png" width="132" /></a><br />
<br />
將近兩個月沒有畫小鳥了,希望沒有太奇怪<br />
<br />
2017/02/20<br />
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-43582319608862867662017-01-30T01:59:00.002+08:002017-01-30T01:59:52.920+08:00製作日誌--014小鳥偽春菜已經一個月沒有更新了<br />
一開始放假就失去了時間感<br />
直到今天早上才想起今天是星期日<br />
幸好休息一個月之後沒有失去戰鬥力<br />
<br />
本次更新有一項非常重要的事情必須宣布<br />
「南小鳥人格新增了備忘錄功能 」<br />
雖然是臨時想到可以新增的功能<br />
作為對SakuraScript的練習也是個不錯的挑戰<br />
目前只有最基本的功能<br />
詳細會在下面做討論<br />
<br />
<strong><span style="color: red;">###溝通###</span></strong><br />
<br />
新增了一些溝通內容<br />
備忘錄功能就是在增加溝通對話時想到的主意<br />
<br />
<strong><span style="color: red;">###備忘錄###</span></strong><br />
<br />
本次更新的重點<br />
以下會說明一下個人的對此功能的構想與做法<br />
首先,我認為備忘錄不應該因為偽春菜主程式的關閉而消失<br />
且應該可以隨時新增項目、查看、清空和刪除項目<br />
並且在使用者要出門前可以提醒要帶出去的東西<br />
<br />
接著是我已完成的部分<br />
現在只有新增項目、察看與清空的功能<br />
出門提醒的功能還沒引入,但這部份很簡單<br />
<br />
首先我先在aya_bootend.dic的OnFirstBoot事件中加入兩個參數<br />
<br />
<span style="color: #0b5394;">memo = "<空白>"</span><br />
<span style="color: #0b5394;">memoisblank = 1</span><br />
<br />
memo參數的型態為字串(string),這個參數就是整本備忘錄<br />
而memoisblank則是用來判定memo目前是否為空白<br />
由於個人不希望當備忘錄空白時,查看備忘錄時就真的看到空白<br />
因此用"<空白>"來表示目前沒有記錄任何項目<br />
<br />
接下來則是加入一些專門處理memo的函式<br />
先新增一個叫做aya_memo.dic的檔案<br />
(詳細處理方式請參考005─**事件處理**的部分)<br />
並在裡面加入兩個函式<br />
<br />
<span style="color: #0b5394;">ClearMemo</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> memo = "<空白>"</span><br />
<span style="color: #0b5394;"> memoisblank = 1</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"></span><br />
<span style="color: #0b5394;">OnAddMemo</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> if reference0 != ""</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> if memoisblank == 1</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> memo = ""</span><br />
<span style="color: #0b5394;"> memoisblank = 0</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> memo += reference0 + "\n"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> "\0\s[0]已經幫%(username)把提醒寫進備忘錄囉!\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
第一個ClearMemo就是將備忘錄整個清空<br />
第二個OnAddMemo則為新增項目<br />
先判定使用者有無輸入內容<br />
如果有,再判斷目前備忘錄是否為空白<br />
如果有輸入且備忘錄為空白<br />
則將memoisblank設為0,且將memo設為""<br />
再加入新增項目<br />
如果有輸入且備忘錄已有內容<br />
則直接加入新增項目<br />
如果沒有輸入內容<br />
小鳥依然會告訴你已更新備忘錄<br />
但其實她什麼也沒做(.8.)<br />
<br />
再來就是要提供使用者存取備忘錄的方式<br />
首先在OpenMenu中多加上這行<br />
<br />
<span style="color: #0b5394;">"\q[○備忘錄,memo]\n"</span><br />
<br />
這樣在開啟主菜單時便會多出備忘錄的選項<br />
接著再加上<br />
<br />
<span style="color: #0b5394;">Select.memo<br />{<br /> Memo<br />}</span><br />
<span style="color: #0b5394;"></span><br />
<span style="color: #0b5394;">Memo<br />{<br /> "\0\s[0]\n\n/<br /> \q[○查看,open_memo]\n/<br /> \q[○新增項目,add_memo]\n/<br /> \q[○清空,clear_memo]\e"<br />}</span><br />
<br />
如此一來使用者便可以在主菜單找到備忘錄的功能了<br />
接著便要寫入現有的三個互動式功能<br />
第一個是"查看"<br />
<br />
<span style="color: #0b5394;">Select.open_memo</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]這是%(username)的備忘錄:\n\n%(memo)\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
這裡應該不需要多加說明了,就只是將memo作為變數存取並顯示出來而已<br />
<br />
第二個是"新增項目"<br />
<br />
<span style="color: #0b5394;">Select.add_memo</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]請問要加入什麼項目呢?\![open,inputbox,OnAddMemo,-1]\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
這裡我們注意到新的語法<span style="color: black;">\![open,inputbox,OnAddMemo,-1]</span><br />
這個語法的功能是打開輸入視窗,等待使用者輸入內容<br />
詳細說明如下:<br />
\![open,inputbox,ID,(等待時間),(預設輸入內容)]<br />
(括號內的內容為選擇性參數,可輸入可不輸入)<br />
首先,由於開啟了inputbox<br />
如果使用者有輸入內容,則會引發OnUserInput事件<br />
而ID會被當作reference0被傳入OnUserInput作為事件名稱<br />
而使用者輸入內容則是作為reference1被傳入<br />
等待時間以毫秒為單位,超過等待時間就會自動關閉輸入框<br />
若等待時間為-1,則代表輸入框會等到使用者輸入內容或自行關閉才會關閉<br />
而預設輸入內容則是在輸入框出現時<br />
顯示在輸入欄的文字<br />
作為提醒使用者目前該輸入的內容,是個貼心的設計<br />
<br />
這個語法有個特別的用法<br />
當ID所表的事件名稱為On開頭,會跳過OnUserInput事件<br />
直接執行ID所表示的事件名稱<br />
也就是上面範例碼的用法<br />
因此當使用者輸入(或沒有輸入)內容時<br />
程式會自動跳轉到aya_memo.dic內定義的OnAddMemo函式<br />
這也是會什麼該函式要以On作為開頭的原因<br />
<br />
第三個是"清空"<br />
<br />
<span style="color: #0b5394;">Select.clear_memo</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]這就幫你把備忘錄清空!\e"</span><br />
<span style="color: #0b5394;"> ClearMemo</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;"></span><br />
以上是目前備忘錄的功能<br />
對特定內容作刪除可能還需要更多字串處理的工作<br />
然後不排除會新增備忘錄的其他功能<br />
<br />
<span style="color: red;"><strong>###唱歌###</strong></span><br />
<strong><span style="color: red;"></span></strong><br />
將唱歌的表情實裝<br />
但發現唱歌時不會執行動嘴的動畫<br />
<br />
=============================================================<br />
<br />
雖然畫了唱歌時的動嘴動畫<br />
但上面已經說了<br />
並不會被執行<br />
因此今天沒有新的圖檔<br />
<br />
2017/01/30嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-88112570707055372292016-12-26T03:24:00.000+08:002016-12-26T03:24:01.224+08:00製作日誌--013接近期末,最近也開始忙碌起來了<br />
這次更新可能會是這學期最後一次<br />
預定是要到寒假後才會有下一次更新<br />
除非我中途手癢<br />
不過這個可能性非常低<br />
<br />
=======================================================<br />
今天的進度只有把唱歌的動作上色完<br />
下周元旦回家沒有電腦<br />
如果下下周手癢,可能會把動畫做完<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD6vj3dfhFcsD2nSpiz8WtFb9vCqxu0M4vaEnXsAER_rnpRHARh1hb5CfWbjMSqCfxeep-8InB_rVXUjFgEcYrSks1e6EaErHeM-ZDiszpmJb-Ct5hbn4Z-Y1pPAppJKRlzY5-VJEud0zG/s1600/0025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD6vj3dfhFcsD2nSpiz8WtFb9vCqxu0M4vaEnXsAER_rnpRHARh1hb5CfWbjMSqCfxeep-8InB_rVXUjFgEcYrSks1e6EaErHeM-ZDiszpmJb-Ct5hbn4Z-Y1pPAppJKRlzY5-VJEud0zG/s320/0025.png" width="132" /></a><br />
<br />
小鳥真的真的好可愛啊<br />
<br />
2016/12/26<br />
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-28149957218932802872016-12-19T09:06:00.002+08:002017-01-30T01:07:25.247+08:00製作日誌--012昨天半夜(今天凌晨)電腦突然當機<br />
重開是開得起來,但螢幕完全沒有訊號...<br />
大半夜室友也睡了,想說別拆主機整理了<br />
就留到早上睡醒再來更新@@<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
正準備要想force_talk的時候當機了<br />
不過有新增一句一般對話<br />
<br />
<strong><span style="color: red;">###溝通###</span></strong><br />
<br />
在009那篇提到,個人寫的溝通是可以切換溝通對象的<br />
不過溝通對象flag的初始化被放在ReplyToUser的函式裡面<br />
導致不管怎麼切換,溝通的對象都是salura端<br />
後來我將初始化變數放在bootend.txt裡面<br />
因此每次重啟人格時,對象會重設為sakura端<br />
而在運作期間,則會記憶該次溝通對象<br />
<br />
<strong><span style="color: red;">###變數初始化###</span></strong><br />
<br />
接著溝通對象變數的問題<br />
由於需要tailtosakura與talktokero兩個做為flag的變數<br />
在OnFirstBoot中就必須宣告這兩個變數的存在<br />
原本的初始值是設定為0<br />
但因為這次的修改<br />
因此在首次啟動的時候<br />
改成直接將talktosakura設定為1<br />
<br />
======================================================<br />
這周畫圖的進度很...慢<br />
要來好好檢討一下了@@<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWGhz6qZX1GR24bFotfpMn9X9Yojrat0CaLU9vGhlU3ysG06M6gdJlcNLIM9xal6w4AtcY9JRCX6U9wvHEyLEEmaRJRSLXB3BMMHSlISERGAVVr6hMrVfuhOy7cc1O0kYQEDEUnfaggG7w/s1600/0025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWGhz6qZX1GR24bFotfpMn9X9Yojrat0CaLU9vGhlU3ysG06M6gdJlcNLIM9xal6w4AtcY9JRCX6U9wvHEyLEEmaRJRSLXB3BMMHSlISERGAVVr6hMrVfuhOy7cc1O0kYQEDEUnfaggG7w/s320/0025.png" width="132" /></a><br />
<br />
唱歌的動作<br />
不排除會有更多種唱歌的動作<br />
<br />
2016/12/19嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-23741240429187251012016-12-12T02:35:00.000+08:002016-12-12T02:35:49.669+08:00製作日誌--011這周感冒了,但精神其實很好<br />
比備考的時候還要好<br />
<br />
今天逛中文教學文件的時候<br />
看到了製作歌詞卡的教學<br />
於是心血來潮,想說幫小鳥做個歌詞卡<br />
結果就花了很多時間...囧<br />
所以今天的進度就只有將之前改好的文本和新表情加裝進去而已<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
新增了一句(或是兩句)對話。<br />
<br />
<strong><span style="color: red;">###啟動對話###</span></strong><br />
<br />
原本的啟動對話只會依照啟動時間(小時)而有不同的內容<br />
現在新增了節日判斷的功能<br />
這個部分參考了橘花的寫法<br />
新增一個"GetTime"的函式<br />
並將節日或時間點以字串的方式回傳<br />
<br />
<span style="color: #0b5394;">GetTime</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> if month==1 && day==1</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "NewYear"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
上面的範例便是宣告了新的函式"GetTime"<br />
呼叫此函式時,便會去偵測目前系統的時間<br />
而範例中偵測的是系統的月分與日期<br />
如果月份和日期都是1的話,便會回傳"NewYear"字串<br />
而對話的時候便可以依照回傳值來決定對話內容<br />
<br />
<strong><span style="color: red;">###唱歌###</span></strong><br />
<br />
新增了小鳥solo的歌詞卡<br />
製作歌詞卡的部分不難也不簡單<br />
主要是需要耐心<br />
這部分的教學在中文教學文件上非常詳細<br />
這裡便不做教學了<br />
...反正也不會公開歌詞卡((X<br />
<br />
==================================================<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="//giphy.com/embed/l0Hlvc4wxLE7DNhpC" width="480"></iframe><br />
<a href="http://giphy.com/gifs/l0Hlvc4wxLE7DNhpC">via GIPHY</a><br />
微笑表情與說話動畫<br />
還有唱歌的部分<br />
歌本身有版權問題,就只錄唱歌的動畫<br />
<br />
今天沒有新畫的圖<br />
不過既然開始做歌詞卡了<br />
可能會預定幾張唱歌專用的圖片也說不定<br />
我是說...說不定...會有...新的圖片...<br />
說不定...<br />
<br />
2016/12/12嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-65773443572992384282016-12-05T04:05:00.001+08:002016-12-05T04:05:46.689+08:00製作日誌--010上週日因為喝了酒,沒有更新<br />
這周因為隔天考試,到凌晨2:30才開始畫圖<br />
所以今天的進度只有把上次的圖上色完畢而已<br />
希望下周開始可以回到正常的進度<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOnNQROGIFGejGD0zLENB3NtuTu2d9Gjs0zKcJwLB4OcnOoEE0jmIiWPM6sPydi48O6LkVCZSHsu94qmT1PWbTdpEpiNyNkUDuscPGOZmA2gtKBZ7O8jvrv9QosByC5hv20jDS17FxWk3C/s1600/0005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOnNQROGIFGejGD0zLENB3NtuTu2d9Gjs0zKcJwLB4OcnOoEE0jmIiWPM6sPydi48O6LkVCZSHsu94qmT1PWbTdpEpiNyNkUDuscPGOZmA2gtKBZ7O8jvrv9QosByC5hv20jDS17FxWk3C/s320/0005.png" width="132" /></a><br />
<br />
畫的時候順便複習了一下配色跟陰影位置<br />
之後即使有不同動作<br />
也不用為了思考上色而浪費時間了<br />
<br />
2016/12/05嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-11232299743590693832016-11-21T02:38:00.003+08:002016-11-21T02:38:39.038+08:00製作日誌--009上週因為準備期中考,便自行暫停更新一周<br />
最近在考慮是否要放棄用偽春菜製作人格<br />
改用pyQt重寫一份偽AI桌面助理程式<br />
個人覺得重寫對最後的完成度會有很大的幫助<br />
但目前有兩個問題:<br />
<br />
1. 不確定pyQt的功能是否符合我的需求。<br />
2. 在Windows上安裝pyQt非常困難<br />
<br />
第2點是我今天試了3個小時後的結論<br />
因此,如果要轉用pyQt開發程式的話<br />
會轉到Linux上做開發,但這樣程式是否可以在Windows運行就又是問題了<br />
總之,近期的更新依然會在偽春菜上<br />
也有可能在把原本設定的目標在偽春菜上完成後<br />
再轉向自行設計程式<br />
<br />
因為花了些時間嘗試安裝pyQt<br />
今天的更新內容較少<br />
但有補上新的功能<br />
<br />
<strong><span style="color: red;">###啟動對話###</span></strong><br />
<br />
有鑑於前陣子的萬聖節<br />
突然想到啟動對話應該也要與節日有關<br />
於是新增了對特定節日的對話<br />
目前有:<br />
新年<br />
情人節<br />
萬聖節<br />
聖誕節<br />
之後會再新增節日與使用者的生日<br />
<br />
<strong><span style="color: red;">###溝通###</span></strong><br />
<br />
今天最大的更新就是做好與人格溝通的雛形<br />
以下簡單說明我的做法:<br />
<br />
<span style="color: orange;"><strong>**溝通對象**</strong></span><br />
我希望使用者可以對Sakura端與Kero端分別進行對話<br />
因此新增了兩個變數:talktosakura與talktokero<br />
其值只會為1或0<br />
當其中一個為1時,另一個必為0<br />
而使用者的溝通對象便是變數為1的對象<br />
可以藉由輸入對象的名字來切換溝通對象<br />
(ex."小鳥"、"啾啾")<br />
<br />
<strong><span style="color: orange;">**溝通**</span></strong><br />
這個人格的對話只限於使用者呼叫的被動對話<br />
因此我們只需要用到"OnCommunicate"事件<br />
請看以下範例碼:<br />
<br />
<span style="color: #0b5394;">OnCommunicate</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> if reference0 == "user" || reference0 == "User"</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> ReplyToUser //與User對話</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;">}</span><br />
OnCommunicate事件中,我們需要用到reference0來判定與人格溝通的對象<br />
偽春菜中支持與使用者和與其他人格的溝通<br />
如果要和其他人格溝通<br />
則將"user"更改為"人格本體側名字"即可<br />
另外,"||"代表邏輯運算中"or"意思,只要其中一個運算元為真,則為真<br />
而"&&"則代表"and"的意思,除了兩個運算元皆為真時為真,其他條件皆為假<br />
如果要處理多重條件,且不需要用到巢狀結構時會使用到<br />
接著我們來看看如何處理使用者輸入的訊息:<br />
<br />
<span style="color: #0b5394;">ReplyToUser</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> //預設與本體側對話</span><br />
<span style="color: #0b5394;"> talktosakura = 1</span><br />
<span style="color: #0b5394;"> talktokero = 0</span><br />
<span style="color: #0b5394;"> if "你好" _in_ reference1</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> if talktosakura == 1</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "\0\s[0]你好。\e"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> else</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "\1\s[10]你好啊。\e"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> elseif "小鳥" _in_ reference1</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> talktosakura = 1</span><br />
<span style="color: #0b5394;"> talktokero = 0</span><br />
<span style="color: #0b5394;">}</span><br />
在這裡處理使用者輸入訊息的方式十分簡單<br />
由於偽春菜會將輸入訊息當作字串傳入程式<br />
因此我們只要檢查特定單詞是否出現在字串中<br />
便可以讓人格做出回應<br />
"_in_"在文中代表檢查左側的字串是否包含在右側字串中<br />
另外範例的最後也示範了如果更改溝通對象<br />
對Kero端溝通的方法也一樣,這裡便不再贅述<br />
<br />
================================================================<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWOSFSq_-AtLGa8mnhvDq4a1s7cHJpQg_sF-iyRyt0LTkHFo4jfXkNRUYqRAeJuvDxWvKXupbnDV9NDEVmqAN1xMrhavPDx8RjA5IH3hE44KqcUwPVc-z5KhcrCfzmX6hpJ1kS4v_QtG7z/s1600/0005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWOSFSq_-AtLGa8mnhvDq4a1s7cHJpQg_sF-iyRyt0LTkHFo4jfXkNRUYqRAeJuvDxWvKXupbnDV9NDEVmqAN1xMrhavPDx8RjA5IH3hE44KqcUwPVc-z5KhcrCfzmX6hpJ1kS4v_QtG7z/s320/0005.png" width="132" /></a><br />
<br />
今天只把上次的線稿描邊上底色而已<br />
原本想說把圖趕完<br />
但想想還是幫程式加點東西好了<br />
預計下周可以完成這張圖<br />
最晚下下周就可以把這張圖的動畫做完<br />
<br />
2016/11/21<br />
<br />
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-53460922918206699542016-11-07T01:31:00.000+08:002016-11-07T01:32:56.887+08:00製作日誌--008從開始製作已經兩個月左右了<br />
人格大致上的雛型都有了<br />
接下來的問題是shell與充實功能<br />
另外,鬧鐘功能也尚未寫入<br />
不過有預感之後會花很大一段時間畫圖<br />
文本的部分只能期待靈感正常運作了<br />
<br />
題外話,開始覺得當初不應該選擇二創角色<br />
對話真的太難寫了<br />
話題必須被侷限在「像是角色會說的話」<br />
而不能像原創,想說什麼就說什麼<br />
以上只是發牢騷<br />
<br />
<span style="color: red;"><strong>###AI對話###</strong></span><br />
<br />
只新增了一句對話<br />
有想要擴張話題的範圍<br />
不過很擔心造成話題與角色搭不上邊<br />
<br />
<span style="color: red;"><strong>###切換人格###</strong></span><br />
<br />
換成別的人格和從別的人格換回來的時候<br />
會依照好感度而有不同的對話<br />
<br />
<span style="color: red;"><strong>###單語字典###</strong></span><br />
<br />
新增了「話題(topic)」類別<br />
<br />
=============================================================<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRsEi-Vzgo3jeK26YjB6Xtk2lEij1YqziZHEz-Q3UL6gQ4BAMzp2SK_Ob1_Bi1tSNRMyRazPAPiiDrjtcT8uleiAkcpZb1mO6WgASjf5pPB7FDxuOF3aqVKgvqtN4dE-gAGP9TT1W3N_xN/s1600/0005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRsEi-Vzgo3jeK26YjB6Xtk2lEij1YqziZHEz-Q3UL6gQ4BAMzp2SK_Ob1_Bi1tSNRMyRazPAPiiDrjtcT8uleiAkcpZb1mO6WgASjf5pPB7FDxuOF3aqVKgvqtN4dE-gAGP9TT1W3N_xN/s320/0005.png" width="132" /></a><br />
<br />
今天並沒有增加surface,但是做出了新的動作<br />
目前預計完整的shell總共會有5-6種動作<br />
搭配不同手勢與表情,形成不同的 surface<br />
當然動作的數目是會隨時調整的<br />
<br />
這周是期中考周<br />
祝各位考試順利<br />
2016/11/07嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-16396608360845353512016-10-31T00:45:00.000+08:002016-10-31T00:47:22.349+08:00製作日誌--007原本以為今天這篇會是008<br />
結果還在007@@<br />
明天(今天?)有個考試,就不花太多時間更新了<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
將使用者觸碰反應的對話依照好感度做了分類<br />
不過依現在的設計<br />
一旦被討厭了,似乎會很難拉好感度<br />
考慮從其他互動來彌補<br />
總之,如果被討厭的情況下做出失禮的事<br />
好感度會降非常快<br />
<br />
========================================================<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi09mfCrFs1iLnyUnNe1znLjN4H5MRQcMY7VYaEzLZYkKjK5diAyO_Y2Heg9ouGc6BpxnQmJQfH357JMF2L5X2iQdr77NeQBjP-aZAvuZEmHMoW_EPSL_dSV5bfhLjTCGYxNXdu5I87aLa3/s1600/0002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi09mfCrFs1iLnyUnNe1znLjN4H5MRQcMY7VYaEzLZYkKjK5diAyO_Y2Heg9ouGc6BpxnQmJQfH357JMF2L5X2iQdr77NeQBjP-aZAvuZEmHMoW_EPSL_dSV5bfhLjTCGYxNXdu5I87aLa3/s320/0002.png" width="132" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1zvjgF0pNLM99mxCWICe5VbYkFLvda0bFpTiWknHV_e_4KtyugsNOejoI475nOgdr-JoXGG3Z4_lHxkG0hE6B3irg_WMAHy_KwKZGOJgdJt3IhcD027l2fbMQocMkhjSj5Qlcu8cDpg7R/s1600/1021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1zvjgF0pNLM99mxCWICe5VbYkFLvda0bFpTiWknHV_e_4KtyugsNOejoI475nOgdr-JoXGG3Z4_lHxkG0hE6B3irg_WMAHy_KwKZGOJgdJt3IhcD027l2fbMQocMkhjSj5Qlcu8cDpg7R/s320/1021.png" width="132" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEHC3hBgkk7wockJ7RyZjhKT_3UkmDsBtkLHZmmw_wnbVot5f8UdPIWmDvYbgKHDM611fvb2tbLTjKMdlgZH-4ZI4ULuWWGjU4lHR_U1g7N0P2Fxyz92t6ywTcgT_tiJ1Jli5cyXTcrbr3/s1600/1022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEHC3hBgkk7wockJ7RyZjhKT_3UkmDsBtkLHZmmw_wnbVot5f8UdPIWmDvYbgKHDM611fvb2tbLTjKMdlgZH-4ZI4ULuWWGjU4lHR_U1g7N0P2Fxyz92t6ywTcgT_tiJ1Jli5cyXTcrbr3/s320/1022.png" width="132" /></a><br />
<br />
眨眼分解動作,這次覺得眼睛半開的小鳥眼神很鄙視QAQ<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_OfkRALQ_0t9q7dipMcNEtL5tR6Oj5emr8EQ2oullE2YXfP9evbjtffATBtbvEfwThHPrSXDplCUR7j7DOQzXLjvDW6ha4haAfWUrJNdxqT9zHuEYfzywJcaDHK3DR_dOgccok_8svwHM/s1600/1023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_OfkRALQ_0t9q7dipMcNEtL5tR6Oj5emr8EQ2oullE2YXfP9evbjtffATBtbvEfwThHPrSXDplCUR7j7DOQzXLjvDW6ha4haAfWUrJNdxqT9zHuEYfzywJcaDHK3DR_dOgccok_8svwHM/s320/1023.png" width="132" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3dt15PPgafXE5qzsbKfVgmc3OPwgArp47UgBUkzAai_MQuJUjc4S0krfCFVFg6YlQuxpr5vuaeE4THD_mEBU1WIeCsZ0uuYm3psHpMduuKK8jqgx_FXHCJiQlXRrvUt0d8kT7h9HREXFK/s1600/1024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3dt15PPgafXE5qzsbKfVgmc3OPwgArp47UgBUkzAai_MQuJUjc4S0krfCFVFg6YlQuxpr5vuaeE4THD_mEBU1WIeCsZ0uuYm3psHpMduuKK8jqgx_FXHCJiQlXRrvUt0d8kT7h9HREXFK/s320/1024.png" width="132" /></a><br />
<br />
說話分解動作,原本驚訝的預設表情是張嘴的<br />
不過因為貼圖好像有點問題<br />
就改成預設閉口了<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="//giphy.com/embed/l3vRhyYoctFczjtfi" width="480"></iframe><br />
<a href="http://giphy.com/gifs/l3vRhyYoctFczjtfi">via GIPHY</a><br />
驚訝表情動畫,真的好可愛啊<br />
<br />
觸碰反應裡面增加了一些有點害羞的對話<br />
寫得自己都很害羞<br />
另外,萬聖節快樂<br />
不給糖就導彈((無誤<br />
<br />
2016/10/31嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-17711797198582374072016-10-24T03:16:00.001+08:002016-10-24T03:17:52.818+08:00製作日誌--006終於到第六周了(應該是第七周)<br />
這周幾乎都在畫圖,不過進度十分緩慢<br />
不如說只要遇到畫新動作與表情<br />
進度就會非常慢@@<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
新增了一個forced_talk<br />
和一個蠻長的連鎖對話<br />
測試一下自己對sakura script語句排列的熟練度<br />
<br />
<br />
=============================================================<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBiSdakdMjbhmpE88NNJfom4uraCCa22XRnAF_bWcfq0CSZWnefppbANQ06I2PSmjHQE_Z2BRnsugfzd7Q9U0c03_0tR48SEnB8L_KsvY3tj3mwwvoH-QFJ_5GopaFKsrulGeyL-YXyZHM/s1600/0002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBiSdakdMjbhmpE88NNJfom4uraCCa22XRnAF_bWcfq0CSZWnefppbANQ06I2PSmjHQE_Z2BRnsugfzd7Q9U0c03_0tR48SEnB8L_KsvY3tj3mwwvoH-QFJ_5GopaFKsrulGeyL-YXyZHM/s320/0002.png" width="132" /></a><br />
目瞪鳥呆,一樣好可愛<br />
<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="//giphy.com/embed/3oz8xyZNTgxZ1hoqje" width="480"></iframe><br />
<a href="http://giphy.com/gifs/3oz8xyZNTgxZ1hoqje">via GIPHY</a><br />
目前對話數量不多,內容也不夠廣泛<br />
表情做完似乎都不知道要放在哪裡@@<br />
<br />
<br />
另外,今天原本有幫旁邊那隻做了眨眼和動嘴的動畫<br />
但因為主要底色是白色<br />
偽春菜在貼圖時似乎直接把白色當作透明色<br />
於是大失敗<br />
之後應該就不考慮幫他做動畫了<br />
不過可能會有別的表情或動作<br />
<br />
2016/10/24嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-74237450192109019472016-10-17T02:09:00.004+08:002016-10-24T03:13:57.201+08:00製作日誌--005從決定開始製作已經一個多月了<br />
目前看來進度不快不慢的<br />
沒有期限,所以希望可以完成的完整一些<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
增加了一種forced_talk的項目<br />
如果是使用者強制啟動對話的話<br />
有一半的機率會進到forced_talk<br />
另一半的機率會進到一般的aitalk<br />
<br />
<strong><span style="color: red;">###主選單###</span></strong><br />
<br />
將芽芽美原有的主選單完全改掉<br />
管理此項目的文件為aya_menu.dic<br />
以下會對於"選項處理"、"輸入框"做些說明<br />
<br />
<strong><span style="color: orange;">**選項及選項處理**</span></strong><br />
與人格的互動非常大一部份是建立在選項上的<br />
如果建立選項與處理使用者選擇後的反應便是件很重要的事<br />
我們先看看以下範例:<br />
<br />
<span style="color: #0b5394;">"請問有什麼事嗎?\n\n/</span><br />
<span style="color: #0b5394;">\q[聊天,talk]\n/</span><br />
<span style="color: #0b5394;">\q[改變會話頻率,interval]\n/</span><br />
<span style="color: #0b5394;">\q[沒事,cancel]\e"</span><br />
<br />
我們先說明"/"這個符號的意思<br />
在文(AYA)中,"/"是保留語<br />
其意義為「將此行結尾與下一行開頭結合,不包含/本身」<br />
在這裡,我們為了排版方便閱讀,使用了"/"符號<br />
讓程式碼的排序更接近於執行後的結果<br />
當然可以選擇不使用該符號<br />
不過使用後的效益遠大於記憶該符號的力氣(個人見解)<br />
<br />
再來便是sakura script的選擇肢命令"\q[title, ID]"<br />
每一個這樣的命令都代表了一個選項<br />
title為該選項的標題,會顯示在balloon上供使用者閱讀及點選<br />
因此,title的內容便是用來告知使用者該選項的功能<br />
而ID則是在程式內對於該選項的識別<br />
這點我們在下面的選項處理會繼續說明<br />
接著看到下面的範例:<br />
<br />
<span style="color: #0b5394;">OnChoiceSelect</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> case reference0</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> when "talk"</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> OnAiTalk</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> when "interval"</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "想要改變成怎麼樣呢?\n\n/</span><br />
<span style="color: #0b5394;"> \q[多話,interval_30]\n/</span><br />
<span style="color: #0b5394;"> \q[沉默,interval_0]\e"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> when "cancel"</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "\0\s[0]呣。\e"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
首先,"OnChoiceSelect"為用來處理選擇後的「所有」事務<br />
個人目前不是很了解其運作,但若有一個以上的"OnChoiceSelect"<br />
程式似乎會出錯,因此必須非常注意「所有」這兩個字<br />
在文(AYA)中,有類似於C的switch條件判斷式<br />
其用法見上例,"case var",var代表之後要用來做判定的變數<br />
範例中使用的"reference0"為選擇選項後傳給OnChoiceSelect的參數<br />
在不同的事件處理中,reference的數量及其代表的意義皆不相同<br />
在OnChoiceSelect中,reference0代表使用者選擇的選擇肢之ID<br />
因此我們用"when "ID""來判定reference0為哪個選項<br />
並對各個選項做處理<br />
這裡可以看到,在talk選項中,會自動導向OnAiTalk事件<br />
而在interval選項中,還包含了兩個選項<br />
這麼做是可以的<br />
假設使用者此時選了"多話"<br />
那麼,"OnChoiceSelect"的"reference0"便會變成"interval_30"<br />
猜測這就是為何不能有多個OnChoiceSelect的原因<br />
最後的"cancel"選項則是讓整個對話結束<br />
<br />
另外,我們提到選項處理中可以再新增選項<br />
而新增的選項也必須在同一個OnChoiceSelect中處理<br />
個人推測新增選項的處理必須放在生成該選項的block之外<br />
舉例來說,interval_30是在interval中被生成的<br />
因此,處理interval_30的block必須在interval之後<br />
(以上敘述單純為推測,根據電腦讀取程式碼的順序性,這樣的推測有一定的道理在)<br />
<br />
前面提到了只能有一個OnChoiceSelect<br />
為了解決這樣的問題,我從橘花的文件中參考了一些有趣的作法<br />
在說明之前,想先提一下對於「事件發生」與「事件處理」的差別<br />
<br />
<span style="color: orange;"><strong>**事件發生**</strong></span><br />
以選擇處理為例,不管有沒有OnChoiceSelect的block存在<br />
只要選擇了選項,事件就是會發生<br />
發生這件事並不包含了處理<br />
<br />
<strong><span style="color: orange;">**事件處理**</span></strong><br />
事件發生後,我們才能對其做處理<br />
而Ukagaka提供我們許多處理事件用的函式<br />
每個函式都會因為不同事件的發生而得到不同的參數<br />
我們便可以運用這些參數,對事件做出各式各樣的反應<br />
<br />
這部分說明僅提供做為參考,若有錯誤,煩請糾正<br />
<br />
接著,參考橘花的文件後,可以發現一個"aya_sysex.dic"的文件<br />
我們只需要移植其第一個block<br />
也就是對"OnChoiceSelect"做出一些更動<br />
見以下程式碼:<br />
<br />
<span style="color: #0b5394;">OnChoiceSelect</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> EVAL("Select.%(reference0)")</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
其中的"EVAL"在上一篇日誌已經有說明了,這裡便不再多做敘述<br />
這裡便會將"Select.%(reference0)"作為指令碼處理<br />
"reference0"跟前面一樣,是指選項的ID<br />
因此,不管在哪個地方遇到"Select.%(reference0)"<br />
都會包含在這裡的"OnChoiceSelect"之中<br />
非常巧妙的迴避了之前提到的問題<br />
真想問問當初的開發者怎麼想到的,太天才了<br />
<br />
我們只需要在自己的人格存放dic檔案的地方<br />
新增一個隨意檔名的dic檔<br />
加入上面的程式碼,以UTF-8儲存檔案<br />
並且在人格的資料夾中的"yaya.txt"加上一行:<br />
<br />
<span style="color: #0b5394;">dic, dic/aya_sysex.dic</span><br />
<br />
這裡以我開發的文件為例,最前面的dic指程式要去開啟的檔案為dic檔<br />
逗號後面則為yaya.txt與dic檔的相對位置<br />
這樣程式啟動時就會自動去開啟這份檔案,讀取並執行其內容了<br />
<br />
接著,對於前面的"OnChoiceSelect"的事件處理<br />
可以改成以下形式:<br />
<br />
<span style="color: #0b5394;">Select.talk</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> OnAiTalk</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;">Select.interval</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "想要改變成怎麼樣呢?\n\n/</span><br />
<span style="color: #0b5394;"> \q[多話,interval_30]\n/</span><br />
<span style="color: #0b5394;"> \q[沉默,interval_0]\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<span style="color: #0b5394;">Select.cancel</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]呣。\e"</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
看起來簡潔許多,也可以在不同文件中做事件處理<br />
真的是一個非常聰明的方式<br />
<br />
最後,在本篇日誌最剛開始提到的forced_talk<br />
其實只是在aitalk.dic文件中<br />
另外加上一個forced_talk的block<br />
並在Select.talk的block中<br />
直接加上一行"forced_talk"<br />
這樣處理"talk"選項時<br />
程式便會等機率挑選"OnAiTalk"或"forced_talk"<br />
<br />
<span style="color: red;"><strong>###BUG###</strong></span><br />
<br />
目前遇到的BUG在主程式更新後便自動消失了<br />
...QAQ<br />
<br />
=============================================================<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCM4wyX05pbLL9wEaWxPtph5Ibjf2tl2BIYVhBGUvQCxQgmSVtAL_w_JpwvtubTXeeaDy3LvQquGy_GAHvqHAItU395I5ueST5Gk5-iG6psPMhEKGgIvdKNPlv1QqjWTjkOk9duG0_rdkH/s1600/1011.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCM4wyX05pbLL9wEaWxPtph5Ibjf2tl2BIYVhBGUvQCxQgmSVtAL_w_JpwvtubTXeeaDy3LvQquGy_GAHvqHAItU395I5ueST5Gk5-iG6psPMhEKGgIvdKNPlv1QqjWTjkOk9duG0_rdkH/s320/1011.png" width="131" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc7Rl7Z71RwuDQN1ROrtLzmmZHEu0udAuxdRg2zUj0dhDxgoDST7ERMjk-gYFYMuN0U3HwjNRo6wBRUTGTzNwM43otDEwxLocfi_0Oiy8ByG9a_3ZVzUKoRaoTslyqtvHW8uaILKpElcoT/s1600/1012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc7Rl7Z71RwuDQN1ROrtLzmmZHEu0udAuxdRg2zUj0dhDxgoDST7ERMjk-gYFYMuN0U3HwjNRo6wBRUTGTzNwM43otDEwxLocfi_0Oiy8ByG9a_3ZVzUKoRaoTslyqtvHW8uaILKpElcoT/s320/1012.png" width="132" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlMyVqPLfg39HqTLV4mtBwc8KkWmJhULrgYR8sMB2NmRNjyJNPmg3RGDHM_DJQuPi8qXIldO-xZou3E6BIBGrit5ZjD1UVIbK9hncktnfF9IM5bCJQ0nthA8C_5ZxWgoFoS0Z-58WTtaJo/s1600/1013.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlMyVqPLfg39HqTLV4mtBwc8KkWmJhULrgYR8sMB2NmRNjyJNPmg3RGDHM_DJQuPi8qXIldO-xZou3E6BIBGrit5ZjD1UVIbK9hncktnfF9IM5bCJQ0nthA8C_5ZxWgoFoS0Z-58WTtaJo/s320/1013.png" width="132" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQvTVcKWleo0NdmfHqop4eNvQW8IM3TVbdxvXdMskgvMLdlsA_-4XTVIZIVa2UU6hH0jwfkuHOtiYeOOxdRsGPVyDZndmAio-jq95ZO9WMZ6awdUmX8SErgvzu_C1c7r2k3aHiOzwWHCpi/s1600/1014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQvTVcKWleo0NdmfHqop4eNvQW8IM3TVbdxvXdMskgvMLdlsA_-4XTVIZIVa2UU6hH0jwfkuHOtiYeOOxdRsGPVyDZndmAio-jq95ZO9WMZ6awdUmX8SErgvzu_C1c7r2k3aHiOzwWHCpi/s320/1014.png" width="132" /></a><br />
<br />
<br />
害羞鳥的眨眼與說話動畫的分解動作<br />
為什麼每次半開眼的表情看起來都特別病嬌' ')<br />
<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="//giphy.com/embed/l0MYI1B2gZjpg7gsg" width="480"></iframe><br />
<a href="http://giphy.com/gifs/l0MYI1B2gZjpg7gsg">via GIPHY</a><br />
<br />
害羞表情動畫的GIF,好可愛<br />
<br />
大部分功能的雛型都已經建立好了<br />
接下來就是把表情補完,並且把所有功能再擴充到更加充實<br />
<br />
2016/10/17嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-46162164755574170942016-10-10T11:48:00.001+08:002016-10-10T11:48:08.024+08:00製作日誌--004上次更新是上上周的事了((囧<br />
昨天處理完事情已經兩點了,於是現在才來寫日誌<br />
不過這兩周幾乎都在畫圖,進度非常少<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<strong><span style="color: red;"></span></strong><br />
這段時間又新增了幾句AI對話<br />
之後可能會考慮增加與使用者對話的功能<br />
<br />
<strong><span style="color: red;">###單語字典###</span></strong><br />
<strong><span style="color: red;"></span></strong><br />
一樣新增了一些內容<br />
之後應該還是會持續更新<br />
<br />
<strong><span style="color: red;">###好感度###</span></strong><br />
<strong><span style="color: red;"></span></strong><br />
<span style="color: black;">新增了好感度參數,目前只有摸臉動作可以增加好感度</span><br />
未來不排除有增加與減少好感度的行動<br />
並且所有互動內容都會依照好感度的高低有所分別<br />
<br />
<span style="color: orange;"><strong>**新增自定義參數**</strong></span><br />
<span style="color: black;">增加參數非常簡單,在bootend.dic裡面就可以新增/減少參數</span><br />
<br />
<span style="color: #0b5394;">OnFirstBoot<br />{<br /> //---- 變數初始化<br /> username = "User"<br /> userbirthday = "未知"<br /> stroke = 0 // 撫摸判定用<br /> teachusername = 0 // 記住user名用<br /> teachuserbirthday = 0 // 記住user生日用<br /> mikireflag = 0 // 見切處理用<br /> communicateratio = 0 // 溝通開始率[%]<br /> intimacy = 0 //好感度<br /> startuptime = 0 //總啟用時間<br /> lastboottime = "%(systemuptime)" //每次啟用時間,用來計算每次開啟人格多少時間<br /><br /> //---- 對話<br /> "\0\s[0]\1\s[10]\0你好,初次見面,我叫南小鳥。\w8\1\s[10]我叫啾啾。\w8\0\s[0]\n請多多指 教。\e"<br />}</span><br />
這個部分在芽芽美人格範本bootend.dic的最開始的地方<br />
其中OnFirstBoot意思是人格首次啟動時要執行的事情<br />
首次啟動人格後,這些參數便會記錄到variable.cfg中<br />
未來都可以直接以bootend.dic中定義的名稱來呼叫變數<br />
可以注意範例程式碼裡面已經有"intimacy"(好感度)這個變數了<br />
並且初始設定為0<br />
須注意這裡所有變數都要給予初始值<br />
至於要怎麼控制這個intimacy變數呢<br />
先看看以下程式碼:<br />
<br />
<span style="color: #0b5394;">OnAiTalk</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> /*</span><br />
<span style="color: #0b5394;">其他資料</span><br />
<span style="color: #0b5394;">*/</span><br />
<span style="color: #0b5394;"></span><br />
<span style="color: #0b5394;">"\0\s[0]我也很喜歡%(username)喔\e:eval=(intimacy+=1)"</span><br />
<span style="color: #0b5394;">}</span><br />
在這個範例程式碼裡面,只要觸發了"我也很喜歡%(username)"這個對話<br />
就會執行"intimacy+=2"<br />
可以注意這裡使用的eval<br />
他會將輸入的字串當作AYA的單一指令執行<br />
也就是說,他不能執行複數個指令<br />
但對於這樣單一變數的操作<br />
使用eval是很方便且簡潔的方式<br />
另外,上面的寫法與下面兩種有一樣的效果:<br />
<span style="color: #0b5394;"></span><br />
<span style="color: #0b5394;">\e" + EVAL("intimacy+=1")</span><br />
<span style="color: #0b5394;">\e%(intimacy+=1)"</span><br />
<span style="color: #0b5394;"></span><br />
個人比較習慣第一種寫法(範例程式碼的)<br />
另外可以注意,第三種寫法是沒有用到EVAL的<br />
而是直接使用"%"呼叫參數,並對參數做+=2的運算<br />
最後,EVAL一定要使用在\e後面<br />
因為前面有提到,EVAL是將"字串"作為指令執行<br />
如果放在\e前面,因為對話方塊還沒消失<br />
便會把目前intimacy的值印出來<br />
<br />
<br />
<strong><span style="color: red;">###BUG###</span></strong><br />
<br />
近期發現切換人格的頻率太高的話<br />
容易觸發<a href="https://ukagaka-making.blogspot.tw/2016/09/002.html">製作日誌--002</a>中提到的BUG<br />
詳細原因依舊不明<br />
不過只要不一直切換人格<br />
是不會有問題的<br />
<br />
========================================================<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsm9y_DzZb1ZxxSTeT1LNy8Pzqh4mM-F01D6KcBmOq0U660YuLl2U7GQPRIl3a5xNHaf6r7CB27iXMPZ0d0rO0tc6uSuuZrm5uH3rkrvT-U_6qvn4pUKKv9mKgqJOmSZ3AVBpdlZ0eIzIF/s1600/0008.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsm9y_DzZb1ZxxSTeT1LNy8Pzqh4mM-F01D6KcBmOq0U660YuLl2U7GQPRIl3a5xNHaf6r7CB27iXMPZ0d0rO0tc6uSuuZrm5uH3rkrvT-U_6qvn4pUKKv9mKgqJOmSZ3AVBpdlZ0eIzIF/s320/0008.png" width="132" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbM-11xwCBoshRkyf6-fyrVKDTXKz3J0Lpp-I4XxX8EwBEQQLeo7vhf-o0dMxbih6gCLWTI1VHZVmOG0G3bkfkKSW0o0EU1yw-kbtV2EXHa4APXcYco5kjnYkCQclLNc6DzqriDprcURgB/s1600/0001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbM-11xwCBoshRkyf6-fyrVKDTXKz3J0Lpp-I4XxX8EwBEQQLeo7vhf-o0dMxbih6gCLWTI1VHZVmOG0G3bkfkKSW0o0EU1yw-kbtV2EXHa4APXcYco5kjnYkCQclLNc6DzqriDprcURgB/s320/0001.png" width="132" /></a><br />
<br />
苦笑和害羞的小鳥<br />
真可愛<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="//giphy.com/embed/l2Sq7lfVhVzdaqmGc" width="480"></iframe><br />
<a href="http://giphy.com/gifs/l2Sq7lfVhVzdaqmGc">via GIPHY</a><br />
只有錄了轉換成害羞的表情的gif<br />
因為苦笑是直接從一般的檔案修改來的<br />
<br />
下次應該會先把害羞表情的動畫做完<br />
<br />
2016/10/10嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-68095674036784619072016-09-26T02:22:00.000+08:002016-09-26T02:29:36.836+08:00製作日誌--003未來應該是確定每周更新一次了<br />
然後也有根據其他事情而拖延的可能Orz<br />
<br />
今天的進度都是改一些文件的資料而已<br />
只有一些些是跟編程有關,但也都很簡單<br />
以後文章會附上一些編程相關的資訊<br />
供同好參考、交流<br />
<br />
<strong><span style="color: red;">###AI對話###</span></strong><br />
<br />
今天又加入了一些AI對話<br />
同時也測試了一個連鎖對話<br />
沒什麼問題<br />
以後應該就會慢慢增加對話內容<br />
<br />
<strong><span style="color: orange;">**有關對話**</span></strong><br />
<br />
有些編輯的小技巧在文的範本內似乎沒有<br />
我是去別的人格翻來看的<br />
這裡整理了兩項覺得還蠻重要的小技巧<br />
<br />
<strong><span style="color: #38761d;">1. 輸出確定子在隨機對話內使用</span></strong><br />
不知道輸出確定子"--"的人可以去翻翻文的規格書<br />
因為Random Talk本身會是一個大括號<br />
如果在編輯對話內容時直接使用輸出確定子<br />
會導致輸出內容組合錯誤<br />
例如說:<br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "\0\s[0]今天天氣很好。"</span><br />
<span style="color: #0b5394;"> --</span><br />
<span style="color: #0b5394;"> "\w8\1\s[10]就是說啊。\e"</span><br />
<span style="color: #0b5394;"> "\w8\1\s[10]外頭不是在下雨嗎?\w8\0\s[0]\n\n咦咦!?\e"</span><br />
<span style="color: #0b5394;"> "\0\s[0]晚餐要吃什麼好呢?\w8\1\s[10]咖哩飯!\e"</span><br />
<span style="color: #0b5394;">}</span><br />
在上面的例子中,我們的原意是想要輸出:<br />
"今天天氣很好。就是說啊。"<br />
"今天天氣很好。外頭不是在下雨嗎?咦咦!?"<br />
"晚餐要吃什麼好呢?咖哩飯!"<br />
<br />
但第三句會被程式認定為是輸出確定子的候補之一,而變成:<br />
"今天天氣很好。就是說啊。"<br />
"今天天氣很好。外頭不是在下雨嗎?咦咦!?"<br />
"今天天氣很好。晚餐要吃什麼好呢?咖哩飯!"<br />
<br />
所以這裡我們需要再用一個縮排後的大括號把對話分組:<br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "\0\s[0]今天天氣很好。"</span><br />
<span style="color: #0b5394;"> --</span><br />
<span style="color: #0b5394;"> "\w8\1\s[10]就是說啊。\e"</span><br />
<span style="color: #0b5394;"> "\w8\1\s[10]外頭不是在下雨嗎?\w8\0\s[0]\n\n咦咦!?\e"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;"> "\0\s[0]晚餐要吃什麼好呢?\w8\1\s[10]咖哩飯!\e"</span><br />
<span style="color: #0b5394;">}</span><br />
這麼做就可以將最後一句話跟前面天氣的話題隔開<br />
同時不需要將天氣的話題拆成兩句<br />
增加程式的可閱讀性!<br />
<br />
<strong><span style="color: #38761d;">2. 連鎖對話</span></strong><br />
在設計連鎖對話的時候,最怕的就是不熟悉指令及其運作的效果<br />
例如說已經使用了"\e",在下一句對話時仍然加上了"\n"<br />
雖然是很好更正的錯誤<br />
但在編寫時就注意到這些事情可以節省很多修改與測試的時間<br />
這裡直接放上今天寫好的連鎖對話當例子:<br />
<span style="color: #0b5394;">"\0\s[0]啾啾有沒有想過以後要成為什麼?\w8\1\s[10]嗯?\w5怎麼突然問這個?\w8\0\s[0]\n\n突然想到而已~\e:chain=Chain1"</span><br />
<span style="color: #0b5394;">Chain1</span><br />
<span style="color: #0b5394;">{{CHAIN</span><br />
<span style="color: #0b5394;"> "\w8\1\s[10]也是呢~\w5成為第一隻上太空的鳥吧。\w5\n那小鳥呢?\w8\0\s[0]我想想喔…\w5\n嗯…\w5…\w5…\e"</span><br />
<span style="color: #0b5394;"> {</span><br />
<span style="color: #0b5394;"> "小鳥想要當"</span><br />
<span style="color: #0b5394;"> --</span><br />
<span style="color: #0b5394;"> "服裝設計師呢!\w8\1\s[10]很適合嘛~\w5而且你又有天分。\w8\0\s[0]\n\n嘿嘿,到時候小鳥會幫啾啾設計衣服喔!\w5\n啊!\w5也會幫%(username)設計喔!\w8\1\s[10]\n\n怎麼聽起來像是差點忘記%(username)一樣…\w8\0\s[0]\n\n沒,沒有這回事啦!\e:chain=end"</span><br />
<span style="color: #0b5394;"> "%(username)的新娘呢!\w8\1\s[10]像個小女孩會說的話呢,\w5\n不過也挺不錯的呀。\w8\0\s[0]\n\n那啾啾要來參加我們的婚禮喔!\w8\1\s[10]\n\n這是一定要的嘛!\e:chain=end"</span><br />
<span style="color: #0b5394;"> }</span><br />
<span style="color: #0b5394;">}}CHAIN</span><br />
<br />
第一個要注意的點就是:chain=Chain1要放在雙引號內<br />
個人對於冒號":"的解讀是:直接執行冒號後的函式<br />
所以冒號放的位置是很重要的<br />
如果把:chain=Chain1放到\e之前<br />
會發現開頭的對話是正常的<br />
但卻不會出現接下來的連鎖對話Chain1<br />
因為程式已經執行完chain=Chain1的指令了,之後才執行\e<br />
再來是:chain=end,這個指令會讓程式知道要跳出連鎖對話<br />
回到一般的隨機對話<br />
一般是用在規劃對話路徑用<br />
比如說如果選到這句話,那就不需要接下來的對話<br />
個人習慣是每個連鎖對話的結尾都加上該指令<br />
這麼做並不犯法<br />
因為在芽芽美的範本內是流程控制時在會用到:chain=end指令<br />
只是在我實作時會有問題而已Orz<br />
<br />
<span style="color: red;"><strong>###單語字典###</strong></span><br />
<br />
更動了一部份的單語內容,讓裡面記載的單語更符合角色<br />
<br />
<strong><span style="color: orange;">**單語編輯靈活化**</span></strong><br />
<br />
有的人可能會想說單語內容就是把想到的東西全部列舉出來<br />
但在範本中也有用到細層分類的方法<br />
讓同類的單語聚集在一些自定義分類中<br />
不只在單語文件中更容易維護<br />
也可以在其他地方直接呼叫自定義分類<br />
例如:<br />
<span style="color: #0b5394;">ms //----人名----</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> history</span><br />
<span style="color: #0b5394;"> "小明"</span><br />
<span style="color: #0b5394;"> "小華"</span><br />
<span style="color: #0b5394;">}</span><br />
<br />
<span style="color: #0b5394;">history //----歷史人物----</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "劉備"</span><br />
<span style="color: #0b5394;"> "關羽"</span><br />
<span style="color: #0b5394;">}</span><br />
在這裡history就是我們的自定義類別<br />
它同時是ms中的子類別,同時也是一個獨立類別<br />
可以直接用%(history)的方式被呼叫<br />
<br />
另外,在單語文件也可以用以下方法,造出較長的子句:<br />
<span style="color: #0b5394;">food</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;"> "加了%(ingredient)的%(method)%(me)"</span><br />
<span style="color: #0b5394;">}</span><br />
其中ingredient、method、me都是類別的名稱<br />
<br />
<strong><span style="color: red;">###滑鼠觸摸&雙擊反應###</span></strong><br />
<br />
把所有觸摸與雙擊反應都補齊了<br />
未來會增加根據好感度不同而產生的反應變化<br />
<br />
這裡就跟編輯AI對話差不多<br />
唯一要注意的是要在對的事件裡做對的事情<br />
並且注意流程控制(if、for、while)<br />
<br />
<strong><span style="color: red;">###動畫###</span></strong><br />
將小鳥說話時的動畫補上了<br />
接下來shell的部分就是把表情補齊<br />
<br />
<strong><span style="color: orange;">**動畫編輯**</span></strong><br />
目前所有網路上有找到的資料中<br />
對於動畫編輯的敘述都還稍嫌不足(個人看法)<br />
這裡放上一個再更詳細的版本<br />
<br />
<span style="color: #0b5394;">Surface0</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;">/*</span><br />
<span style="color: #0b5394;">其他圖檔資料</span><br />
<span style="color: #0b5394;">*/</span><br />
<span style="color: #0b5394;">//----眨眼----</span><br />
<span style="color: #0b5394;">0interval,rarely</span><br />
<span style="color: #0b5394;">0pattern0,1001,7,overlay,78,112</span><br />
<span style="color: #0b5394;">0pattern1,1002,7,overlay,78,112</span><br />
<span style="color: #0b5394;">0pattern2,1001,7,overlay,78,112</span><br />
<span style="color: #0b5394;">0pattern3,-1,7,overlay,78,112</span><br />
<span style="color: #0b5394;">}</span><br />
我們先看看這裡眨眼動畫的設定<br />
首先是"0interval",比較重要的是前面的序數<br />
這個序數就是該動畫的編號,因此同一個動畫前面的序數會相同<br />
否則會被認為是不同的動畫<br />
再來是interval後面的"rarely"<br />
這個是代表自然執行頻率,角色在所有時候都會不斷以該頻率執行這個動畫<br />
這裡提供所有可用的頻率關鍵詞:<br />
sometimes:每秒1/2的機率<br />
rarely:每秒1/4的機率<br />
random,數字:每秒(1/數字)的機率<br />
periodic,數字:每(數字)秒一次<br />
always:不斷循環<br />
runonce:切換到該surface的瞬間執行一次<br />
never:不自動執行,但可以由其他動畫呼叫(後面會說明)<br />
yen-e:在該surface下,遇到"\e"時執行<br />
注意"每...的機率"與"每...一次"的不同<br />
所以在上面的例子中,眨眼動作會每秒1/4的機率執行<br />
<br />
接下來是"0pattern*",*代表接下來的貼圖順序,最前面的0則是先前提到的動畫序數<br />
pattern後面的"1001"、"1002"等等是指圖片編號<br />
1001代表surface1001.png<br />
1002代表surface1002.png,以此類推<br />
下一個數字是指該圖片的持續時間,單位為ms<br />
因此上面例子每張圖片的持續時間都是7ms<br />
接著"overlay"是指貼圖方式<br />
而overlay的意思是直接覆蓋<br />
貼圖方式有非常多種,這裡就不一一介紹了<br />
有興趣的在網路上都可以找到資料<br />
最後的"78,112"分別是"X座標,Y座標"<br />
這個座標是以原本大圖的最左上角為準來測量<br />
用小畫家就可以量到正確的數據了<br />
因為用來做動畫的圖片尺寸不會太大,只有角色的局部而已<br />
所以貼圖位置會顯得相當重要<br />
一種很安全的方法是<br />
把畫好的半開眼、閉眼圖檔存成全身圖<br />
然後用小畫家選個合適的起始點(注意要是動畫用圖的左上角)<br />
在螢幕下方會出現該點的座標,記錄下來,同時裁切出動畫用圖<br />
<br />
接下來是說話動畫的製作,這裡程式碼會比較長:<br />
<span style="color: #0b5394;">Surface0</span><br />
<span style="color: #0b5394;">{</span><br />
<span style="color: #0b5394;">// ...</span><br />
<span style="color: #0b5394;">1interval,never</span><br />
<span style="color: #0b5394;">1pattern0,1003,5,overlay,118,177</span><br />
<span style="color: #0b5394;">1pattern1,1004,5,overlay,118,177</span><br />
<span style="color: #0b5394;">1pattern2,1003,5,overlay,118,177</span><br />
<span style="color: #0b5394;">1pattern3,-1,10,overlay,118,177</span><br />
<br />
<span style="color: #0b5394;">2interval1,never</span><br />
<span style="color: #0b5394;">2pattern0,1003,5,overlay,118,177</span><br />
<span style="color: #0b5394;">2pattern1,-1,10,overlay,118,177</span><br />
<br />
<span style="color: #0b5394;">3interval,talk,4</span><br />
<span style="color: #0b5394;">3pattern0,0,0,alternativestart,[1.2]</span><br />
<span style="color: #0b5394;">}</span><br />
其中interval的部分應該不用多作敘述,在上面就提過了<br />
另外1003是半開嘴的圖,1004則是全開<br />
我們直接看到3interval後面的"talk,4"<br />
其實這也算是一種頻率指令<br />
"talk"代表在Ballon中有文字出現時執行該動畫<br />
"4"則代表每出現4個字時執行一次<br />
再來看到interval裡面<br />
會發現對序數3中的pateern0來說,圖檔名稱為0,持續時間也為0<br />
這是因為之後要貼的圖片在序數1、2中都已經定義了<br />
也跟接下來的指令有關<br />
"alternativestart"意思是隨機執行中括號內的動畫<br />
而中括號內放的就是動畫的序數,注意序數之間是用點"."隔開,不是用逗號","<br />
另外當使用了alternativestart,程式會自動忽略它所在的pattern的Surface ID(最上面的Surface0)、持續時間、XY座標<br />
這也是為何我們沒有標上上述內容的原因<br />
<br />
基本上有上面兩個說明已經足以做出一個完整的shell了<br />
有些特殊的功能則要請有興趣的人自行上網搜尋<br />
<br />
<strong><span style="color: red;">###BUG###</span></strong><br />
同<a href="https://ukagaka-making.blogspot.tw/2016/09/002.html">製作日誌--002</a><br />
<br />
=============================================================<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxEU9coE2pEiNwYeKv8lnqiV_umVwrOAqUla21FBNRfZcP3kAce3Rmd4XPm16aUQUwPDnICtHmDPhULt3IKuPx_MM5MCYtFbH9YzBRZXGC88oon6B-Z2Mrtc78fucMZZ4Mv6eV4ASiOHeg/s1600/1003.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxEU9coE2pEiNwYeKv8lnqiV_umVwrOAqUla21FBNRfZcP3kAce3Rmd4XPm16aUQUwPDnICtHmDPhULt3IKuPx_MM5MCYtFbH9YzBRZXGC88oon6B-Z2Mrtc78fucMZZ4Mv6eV4ASiOHeg/s320/1003.png" width="132" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg78tdbvs_deU7Fnc3LT_c203b1EFHxZcXAK65AwrJMZnIizb9T-i01E1Y2UhQ7y-JNQQ0EX1PYdTmVp3bfZXOsagMoFWMak4vRykfl87HQIM-Uy30XFKDHTZhXHxa1MefPm4S5tox-L7x8/s1600/1004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg78tdbvs_deU7Fnc3LT_c203b1EFHxZcXAK65AwrJMZnIizb9T-i01E1Y2UhQ7y-JNQQ0EX1PYdTmVp3bfZXOsagMoFWMak4vRykfl87HQIM-Uy30XFKDHTZhXHxa1MefPm4S5tox-L7x8/s320/1004.png" width="132" /></a><br />
<br />
張嘴分解動作的小鳥<br />
個人一個動畫是閉→半張→張→半張→閉<br />
另一個是閉→半張→閉<br />
供讀者參考<br />
<br />
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="360" src="//giphy.com/embed/l2SqiP6cN3AeH93Z6" width="480"></iframe><br />
<a href="https://giphy.com/gifs/l2SqiP6cN3AeH93Z6">via GIPHY</a><br />
說話動畫,實際使用效果還不錯<br />
是說小鳥每次錄影時都會顯瘦@@<br />
<br />
2016/09/26嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-13482105358200846682016-09-19T00:10:00.001+08:002016-09-26T00:28:49.050+08:00製作日誌--002開學之後把電腦搬到了宿舍<br />
變成假日回家沒有電腦的狀態Orz<br />
以後可能一個星期才會更新一次<br />
看來進度會十分緩慢<br />
<br />
今天的進度不算少<br />
但也冒出了新的BUG<br />
下面會一一說明<br />
<br />
###報時功能###<br />
<br />
現在Ghost只要整點就會報時<br />
每個時間的內容都不一樣<br />
未來考慮會再增加對話<br />
讓報時功能更多樣化<br />
如果有成功追加好感度的話<br />
會考慮以好感度做判定<br />
而有不同的報時對話<br />
<br />
###初始參數###<br />
<br />
在序篇有提過<br />
這個偽春菜人格是個人使用的<br />
因此初始參數也調整成個人的資料<br />
目前也成功可以使用<br />
但還沒加入更改參數(ex.用戶名、生日)的功能<br />
<br />
###對話###<br />
<br />
對話已經被我刪到剩兩句<br />
一句是自己新增的<br />
另一句是AYA範本的連鎖對話<br />
<br />
###動畫###<br />
<br />
Sakura的預設表情已經有眨眼動畫了<br />
另外,Sakura和Kero的預設表情也已經完工了<br />
接下來計畫先做出Sakura的說話動畫<br />
再開始處理其他表情的圖片<br />
而Kero端是否要有動畫則還在考慮中<br />
<br />
###BUG###<br />
<br />
從其他人格切換到小鳥的時候<br />
Sakura端的Balloon不會正常顯示<br />
但程式依然會正常運作<br />
即使等到了下個AiTalk<br />
也只有Kero端的Balloon會顯示<br />
這個問題目前可以利用右鍵選單的"アイコン化"解決<br />
另外,如果是重啟人格便不會有以上BUG<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSjZhBrSxMSQIU3g3MmRGNBLqKZZFESfk-LJfPCu7iBYepBbvbW4XkhItZssCS7CioCH3aO0nx5P_qJ2HWo6M0gSRD8lZtZvUKXHwezhVQ9vtcAF7bLme8HdzgQdev8mSV91f9PtGQM5fn/s1600/0000.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSjZhBrSxMSQIU3g3MmRGNBLqKZZFESfk-LJfPCu7iBYepBbvbW4XkhItZssCS7CioCH3aO0nx5P_qJ2HWo6M0gSRD8lZtZvUKXHwezhVQ9vtcAF7bLme8HdzgQdev8mSV91f9PtGQM5fn/s320/0000.png" width="132" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7xKVLH3jo-UdAiioy4ywZg3KznCkU8biTmC24sR5W_gppu-oWSgtexS6tL_pX0rZjn5FCyd0ztk5RFxKU_EO5RZFRf-TBfwE_3oHvAMn7dupVOLKCBPmmOM5tfv7kmgRg3EY3eZcpy_6t/s1600/1001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7xKVLH3jo-UdAiioy4ywZg3KznCkU8biTmC24sR5W_gppu-oWSgtexS6tL_pX0rZjn5FCyd0ztk5RFxKU_EO5RZFRf-TBfwE_3oHvAMn7dupVOLKCBPmmOM5tfv7kmgRg3EY3eZcpy_6t/s320/1001.png" width="132" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoZr8r1ZQyLS_gIXrSKcPNAbmseDMVmet2Lw6jlyfCKZ8EELWANLZwVDZlb5eqCll5jKKpZtsyts3rwQEepqOqOwC9vdCMLMmouAxBhPS2FP8pHt8eHTURopNuQh2NOKbl-OIPDSJY3mDu/s1600/1002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoZr8r1ZQyLS_gIXrSKcPNAbmseDMVmet2Lw6jlyfCKZ8EELWANLZwVDZlb5eqCll5jKKpZtsyts3rwQEepqOqOwC9vdCMLMmouAxBhPS2FP8pHt8eHTURopNuQh2NOKbl-OIPDSJY3mDu/s320/1002.png" width="132" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
眨眼分解動作中的小鳥</div>
<br />
<iframe allowfullscreen="" class="giphy-embed" frameborder="0" height="270" src="//giphy.com/embed/26ufee9cb83c5Frq0" width="480"></iframe><br />
<a href="http://giphy.com/gifs/26ufee9cb83c5Frq0">via GIPHY</a><br />
自己錄的眨眼動畫,畫質不好請見諒<br />
<div class="separator" style="clear: both; text-align: left;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgISefjIYPBqjDHfL9gRpmYf7cEPMch0A0PT7Yg6jT_CDUlPyrmEFWIlAsx-pes14yze-EYy3wxWGrOxRhBsuBXuRL0Ba8odQ0yATOh4Sity4vT1Iaz864y7EOsHHBkDYSl2D9B56cR6c63/s1600/0010.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgISefjIYPBqjDHfL9gRpmYf7cEPMch0A0PT7Yg6jT_CDUlPyrmEFWIlAsx-pes14yze-EYy3wxWGrOxRhBsuBXuRL0Ba8odQ0yATOh4Sity4vT1Iaz864y7EOsHHBkDYSl2D9B56cR6c63/s1600/0010.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
目前實在還想不到這隻的名字<br />
暫且叫他啾啾<br />
2016/09/19嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-15456152771042663312016-09-11T18:38:00.001+08:002016-09-11T18:38:27.474+08:00製作日誌--001這幾天花了不少時間在看編成的文件<br />
中文的教程大約三年前就停止更新了<br />
不過找到了還存活著的日文文件<br />
只有這種時候才覺得會日文很好<br />
<br />
目前有完成的只有Sakura與Kero的預設表情<br />
而且只上了底色<br />
畫出來的圖比想像中的還大<br />
但還不考慮縮小<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifco4HwwJjzHdFelDiJeglJrXGG82dTuKiP-jzB0_n5EitE5lsikRl0cizahUhoQ1JfVMSiGAEq3dPzlix6Nt5-rPVrTyETlmxp6bpRsr2F6urD9yW1YY9nSD9Vq2ngLJF8-JDRFv0CH43/s1600/000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifco4HwwJjzHdFelDiJeglJrXGG82dTuKiP-jzB0_n5EitE5lsikRl0cizahUhoQ1JfVMSiGAEq3dPzlix6Nt5-rPVrTyETlmxp6bpRsr2F6urD9yW1YY9nSD9Vq2ngLJF8-JDRFv0CH43/s400/000.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
將紺野芽芽美的ghost整個複製一份</div>
<div class="separator" style="clear: both; text-align: left;">
目前只有把shell中descript.txt和profile以外的資料清空</div>
<div class="separator" style="clear: both; text-align: left;">
把surface.txt與圖檔換成小鳥的資料</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVwdBKsEPSK8XTeYydWd6fAtcVwzPT0W1vPQuj09aUsVW0Gz6nMqE8b4DKWc-pP4eAZk0tJu91gKNiEBMXARSs3He3fe08sZdBNwwJNCcAF3diRIhhB4dj1Bn_uZFf5nEcL4IEXdQkpYL/s1600/000.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVwdBKsEPSK8XTeYydWd6fAtcVwzPT0W1vPQuj09aUsVW0Gz6nMqE8b4DKWc-pP4eAZk0tJu91gKNiEBMXARSs3He3fe08sZdBNwwJNCcAF3diRIhhB4dj1Bn_uZFf5nEcL4IEXdQkpYL/s200/000.png" width="82" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
個人覺得還不錯</div>
<div class="separator" style="clear: both; text-align: left;">
短腿鳥</div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh13hPgbcVXTRqiIdrOPbPXGsdynx0iPb-THhBj9GKxC2ukjxk3EBwcXmjJa6azWeDuNtD8AGoayRVWyooVJ_qweKCBOjhk1yS0w5gdpGEZpPa6ID-H_6IDK5PUyHPLYsTdfGUuEv6iGsx_/s1600/010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh13hPgbcVXTRqiIdrOPbPXGsdynx0iPb-THhBj9GKxC2ukjxk3EBwcXmjJa6azWeDuNtD8AGoayRVWyooVJ_qweKCBOjhk1yS0w5gdpGEZpPa6ID-H_6IDK5PUyHPLYsTdfGUuEv6iGsx_/s200/010.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
恩...</div>
<div class="separator" style="clear: both; text-align: left;">
2016/09/11</div>
<div align="left">
</div>
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com0tag:blogger.com,1999:blog-8799913465390586593.post-72458572844818786692016-09-08T21:49:00.001+08:002016-09-08T21:49:10.813+08:00製作日誌--序第一次接觸偽春菜是在國中的時候<br />
當時沒有接觸過任何程式語言<br />
讀人格製作的教學文件變成一件很辛苦的事情<br />
只能做到修改AiTalk的程度<br />
<br />
前陣子突然想起偽春菜<br />
在網路上搜尋了一下<br />
以前的用過的人格、教學文件等等的資料依然還在<br />
加上對程式語言有一些基礎的了解<br />
重新有了要製作一個全新的人格的想法<br />
<br />
目前決定要製作一個LL小鳥的人格<br />
主要是私用,畢竟人物有版權問題<br />
如果有意外的話(?),可能會再製作另一種公開用的人格<br />
<br />
參考了一些教學文章,決定用AYA語法編寫Shiori<br />
架構會直接採用AYA的人格範本──紺野芽芽美<br />
不過整體的製作會從Surface開始<br />
<br />
##一定會搭載的功能##<br />
隨機對話<br />
報時<br />
鬧鐘<br />
使用者碰觸反應<br />
特殊節日、時間的起始對話<br />
記住使用者的名字、生日<br />
調整對話頻率<br />
<br />
##可能會搭載的功能##<br />
好感度<br />
重疊反應<br />
見切(人物圖像有一部份)被放置於螢幕外)<br />
雙擊菜單功能調整<br />
<br />
其餘的就是未知項目了' ')<br />
2016/09/08<br />
<br />
嗨!大家好,我是硯郎,我是軟體工作者,這個Blogger是用來記錄並分享我的各種學習經驗~http://www.blogger.com/profile/16721498134504491376noreply@blogger.com1