Board logo

標題: [求助] 設計人格時的問題... [打印本頁]

作者: 楓雨聆    時間: 2009-9-7 22:00     標題: 設計人格時的問題...

Q1:請教一下
如果想要讓人格記住使用者輸入的名字
該怎麼做呢?
在茶兔中的aya_bootend.dlc中
有一段\![open,inputbox,TeachUsernameFirst,-1]
聆將其複製到我要輸入使用者ID的對話時
人格還是一樣記不住名字
該怎麼解決呢?
-------------------------------------------------------------
感謝kit0072為聆解決Q1(撒花)
-------------------------------------------------------------
Q2:當聆功能選單越做越多時
(比如瀏覽器 日曆等)
若是我希望把一些相近用途的功能
集中在一起
(比如便利功能:RSS盒子 日曆 清理系統)
語法該如何寫呢?
不這麼做的話
到時候對話框會滿滿都是選項了(倒)
-------------------------------------------------------------
感謝茶兔&茶鹿人格的借鏡^^
-------------------------------------------------------------
Q3:請教一下
系統資訊這項功能
(IP 處理器 作業系統 CPU 人格啟動經過時間 )
以及
重新啟動電腦 關機 定時關機
這些語法該如何設計呢?
如果問題解決了
相信這個人格會更完美的^^
-------------------------------------------------------------
感謝佐倉冬鈴和ymc為聆解決^^
-------------------------------------------------------------
Q4:當新增人格時所輸入的user名稱時
該如何等待user輸入完畢後才顯示下一段對話?
並且進行復述確定user是否輸入正確?

例如
請問你的名字是什麼呢?
(彈出inputbox並且輸入"書宇君")
是書宇君嗎?
確定       重新輸入
好的 那麼以後就請書宇君多多指教囉^^


若要將以上效果以語法表示
該怎麼設計呢/w\?


-------------------------------------------------------------
Q5:如何在自己設計的人格
在別人使用安裝的時候順帶設定為想要的對話框呢0.0?
比如我設計了一個天空藍對話框
不希望安裝人格後再灌專屬對話框
該怎麼設定呢/w\...
-------------------------------------------------------------
感謝佐倉冬鈴和ymc為聆解決^^
-------------------------------------------------------------
Q6:不算問題的問題...
聆從其他人格擷取出SAORI資料夾中
裡面有相當多的dll和exe檔
不過聆不知道這些dll的功能不敢隨便呼叫
想請問有沒有中文的SAORI插件介紹
比如說介紹功能之類的...呣


-------------------------------------------------------------
Q7:想請教一下
當製作好人格準備發佈的時候
是以zip發布比較好還是以nar形式呢?
剛剛發現野菜園人格
會自動安裝並指定對話框
這功能我想了很久還是沒有弄出來...
-------------------------------------------------------------
感謝佐倉冬鈴和ymc為聆解決^^
-------------------------------------------------------------
Q8:
那個...聆想要設計一個簡單的骰子遊戲
放在menu.dlc中
我是以"roll"宣告變數
在word.dlc增加rl0 rl1變數為

rl0
{
        "1"
        "2"
        "3"
        "4"
        "5"
        "6"
}

rl1
{
        "1"
        "2"
        "3"
        "4"
        "5"
        "6"
}


於menu.dlc中加入

when "roll"
{
        "\0\s[5]您所擲出的點數為%rl0點。\w9\w9\1喵可所擲出的點數為%rl1點。\e"       
        }

這樣人格的確是會隨機唱出骰子號碼
不過 我希望能夠讓人格在唱完號碼後
能夠引發比較兩個變數rl0 rl1大小的事件
比如說
rl0 比rl1大
\0耶 我贏囉
rl0比rl1小
\0嗚 我輸了
else
\0 呵呵 是平手呢


這樣該如何寫語法呢?

=============================
佐倉冬玲提到的辦法
是將word.dlc的骰子宣告為

rl0
{
        RAND(6) +1
}

rl1
{
        RAND(6) +1
}

接著在menu.dlc

when "roll"
{
        "\0\s[5]您所擲出的點數為%rl0點。\w9\w9\1喵

可所擲出的點數為%rl1點。\w5"
         --
         if %rl0 > %rl1   
         {
                    "\0\s[5]贏了!!\1輸了\e"
         }
         elseif %rl0 < %rl1   
         {
                    "\0\s[5]輸了\1贏了!!\e"
         }
         elseif %rl0 == %rl1   
         {
                    "\0\s[5]平手\1平手\e"
         }


可是
這樣會發生
3>5
5<2
的詭異情形
不知道在判定變數rl0 rl1時
他是從word.dlc重新讀取數值
還是從剛剛已經亂數跑出來的值進行判定呢?
-------------------------------------------------------------
感謝kit0072與佐倉冬玲老師
-------------------------------------------------------------
Q9:
關於拖曳圖片檔案至人格
引發是否將圖片設為桌面的事件
聆一直無法正常執行
到最後直接將茶兔&茶鹿相關語法完整複製
還是會出錯...
想請教一下
完整流程以及語法範例

另外
關於pyg大大製作的許多小遊戲
在其他人格可以執行
不過在聆自製的人格卻都失敗
步驟完全一樣呢
將dic放入master下
yaya.txt加入dic, aya_xxxx.dic
menu.dic加入該事件選單
依然無解...
到底是哪邊出問題呢?

-------------------------------------------------------------
感謝forjanezz解決
-------------------------------------------------------------
Q10:想要製作線上更新人格功能
wiki有提到使用
\![updatebymyself]
不過
該怎麼指定路徑讓人格更新呢?
比如說
A與B都使用某人格
A使用的是1.6版
B使用的是1.3版
其人格作者更新到2.0版
該如何設計語法
讓A與B在執行更新後
無論是對話 功能 對話框都成為2.0版本?
-------------------------------------------------------------



其他問題同樣會放在這篇
麻煩大家了u.u

[ 本帖最後由 楓雨聆 於 2009-9-12 19:01 編輯 ]
作者: kit0072    時間: 2009-9-8 00:24

\![open,inputbox,TeachUsernameFirst,-1]
我不是很懂open,inputbox,
,我試過直接放變數,都不會變我輸入的

看上去,好像是輸入姓氏 =-=?

我用的範本 AYA
username 是放名字

我會這樣

"你叫什麼名字?"
\![open,inputbox,OnName]

OnName
{
      username = reference0
}

========
wiki
\0\s[0]\![open,inputbox,OnTestEvent]\e
開啟一個空的輸入框,輸入完成後直接發生OnTestEvent事件,且reference0為輸入的字串。
作者: 楓雨聆    時間: 2009-9-8 00:46

請問...
我試過還是不行耶
有規定指令要放哪個dlc嗎?


OnName
{
      username = reference0
}

這指令要放在哪呢?
辛苦了...

------------------------------------------------------------
哎呀!成功了^^
非常感謝妳的協助(鞠躬)
現在又有其他問題了(愣)
請看最上面的文章^^

[ 本帖最後由 楓雨聆 於 2009-9-8 01:50 編輯 ]
作者: 佐倉冬鈴    時間: 2009-9-8 10:27

To Q3
以下是以橘花的為範例

$Select.System
{
\0\s[0]\b[2]像這個樣子。\n\n\_q
{$year}年 {$month}月 {$day}日 ({$DayofWeek_w})\n
{$hour}點{$minute}分\n
\n[half]
CPU      :{$cpu_name={$saori("saori_cpuid.dll","cpu.name")}}{$cpu_name}\n
OS       :{$os_name={$saori("saori_cpuid.dll","os.name")}}{$os.name}\n
\n[half]
記憶體使用率   :{$mem_os={$saori("saori_cpuid.dll","mem.os")}}{$mem_os} %\n
物理記憶體 全體 :{$mem_phyt={$saori("saori_cpuid.dll","mem.phyt")}}{$mem_phyt} MB\n
物理記憶體 空閒 :{$mem_phya={$saori("saori_cpuid.dll","mem.phya")}}{$mem_phya} MB\n
\n[half]
OS起動時間   :{$elapsedhouros}小時 {$elapsedminuteos}分\n
\n[half]
平台       :{$Platform}\n
\n[half]
連續起動時間   :{$elapsedhour}小時 {$elapsedminute}分\n
總計起動時間   :{$elapsedhourtotal}小時 {$elapsedminutetotal}分
\_q\x\b[-1]\e
}

$DayofWeek_w
{
{$_dayofweek_w="日"}
{$if ({$dayofweek}=="1") { {$_dayofweek_w="一"} }}
{$if ({$dayofweek}=="2") { {$_dayofweek_w="二"} }}
{$if ({$dayofweek}=="3") { {$_dayofweek_w="三"} }}
{$if ({$dayofweek}=="4") { {$_dayofweek_w="四"} }}
{$if ({$dayofweek}=="5") { {$_dayofweek_w="五"} }}
{$if ({$dayofweek}=="6") { {$_dayofweek_w="六"} }}
{$_dayofweek_w}
}

$Platform
{
{$platform={$saori("saori_cpuid.dll","platform")}}
{$_platform="???"}
{$if ({$platform}=="materia.exe") { {$_platform="Materia"} }}
{$if ({$platform}=="crowsub.exe") { {$_platform="CROW"} }}
{$if ({$platform}=="ssp.exe") { {$_platform="SSP"} }}
{$_platform}
}

目前看過會給系統資訊的橘花而已 (或許是在下見識淺薄)
不過這與法似乎是 saori
而聆大的是 yaya
所以這個只能僅供參考
能不能運行我不能保證就是了.....
作者: ymc79106    時間: 2009-9-8 11:13

Select.System
{
"\0\s[0]\b[2]像這個樣子。\n\n\_q/
%(year)年 %(month)月 %(day)日 (%(DayofWeek_w))\n/
%(hour)點  %(minute)分\n/
\n[half]/
CPU      :%(SAORI('saori\saori_cpuid.dll','cpu.name'))\n/
OS       :%(SAORI('saori\saori_cpuid.dll','os.name'))\n/
\n[half]/
記憶體使用率   :%(memoryload) %\n/
物理記憶體 全體 :%(memorytotalphys/1048576) MB\n/
物理記憶體 空閒 :%(memoryavailphys/1048576) MB\n/
\n[half]/
OS起動時間   :%(systemuphour)小時 %(systemupminute)分\n/
\n[half]/
平台       :%(Platform)\n/
\n[half]/
連續起動時間   :%(ghostuptime/3600)小時 %(ghostuptime/60%60)分\n/
\_q\x\b[-1]\e"
}

DayofWeek_w
{
        ("日","一","二","三","四","五","六")[weekday];
}

Platform
{
        case basewarename {
                when "embryo" {
                        "Materia"
                }
                when "crow" {
                        "CROW"
                }
                when "SSP" {
                        "SSP"
                }
                others {
                        "???"
                }
        }
}

aya版本的系統資訊來了
上面的應該是橘花一美坂的系統資訊吧?
作者: 楓雨聆    時間: 2009-9-8 13:07

多謝佐倉和ymc
不過
使用ymc語法的時候
會和便利功能衝突
系統資訊也無法正常顯示
可以的話
能幫聆直接debug嗎?
另外還有便利功能也需要協助
真的麻煩妳了(鞠躬)

連結網頁在此
作者: ymc79106    時間: 2009-9-8 16:44

原來...
人格裡沒有相關的saori啊...
正確的說法是連saori都沒有啊...
作者: 楓雨聆    時間: 2009-9-8 17:25

那麼...saori要怎麼製作呢?
wiki的資料
對於新人來說有點困難
問題這麼多真不好意思...

另外關於初始化安裝時的使用者名稱記憶功能
能不能讓user輸入字串後
才顯示下一段對話?
詳細說明放在最上面的Q4...

[ 本帖最後由 楓雨聆 於 2009-9-8 17:36 編輯 ]
作者: ymc79106    時間: 2009-9-8 17:42

saori的話
我記得後援會wiki裡有相關的連結可以下載
或者就是去找其他的人格裡的使用
據我所知的aya橘花與貓魚大的察兔茶鹿裡也有
至於使用方法嘛.....
我只會從現有的東西裡去理解要怎麼用
所以就別問我這個剛上大學連VB都不會寫的混混資訊科學生了吧~
可以試著去找貓魚さん或時原砂さん請教會比較好
或者是在生命的殿堂裡找到相關的文章
作者: 佐倉冬鈴    時間: 2009-9-8 19:42

根據測試
問題在於資訊無法完整顯示
會隨機出現三種狀況


除了 %(DayofWeek_w) 跟 %(Platform) 所跑出的東西無法顯示外
其餘皆正常



只顯示 %(Platform)
以SSP為例




只顯示 %(DayofWeek_w)
以今天禮拜二為例





表面上看來似乎是
DayofWeek_w
{
        ("日","一","二","三","四","五","六")[weekday];
}

Platform
{
        case basewarename {
                when "embryo" {
                        "Materia"
                }
                when "crow" {
                        "CROW"
                }
                when "SSP" {
                        "SSP"
                }
                others {
                        "???"
                }
        }

這段語法與上面的互相衝突

以上純粹只是實驗結果及個人見解
希望能夠讓大家先簡單的了解情況
至於解決方法...
因在下能力不足,還沒想到
還有勞大家幫忙
作者: ymc79106    時間: 2009-9-8 21:38

我的測試是二與三兩種
前面一的部分我使用過他的人做過測試
卻不能夠顯示CPU與OS這兩個部份
而這兩個部份有SAORI
猜測是該人格沒有SAORI所造成的
當然...
是猜測啦...
作者: 佐倉冬鈴    時間: 2009-9-8 21:55

喔對,我忘了說我有把橘花那邊的saori丟過去
而且看到這串'saori\saori_cpuid.dll' 應該可以確定是缺那個saori沒錯

還有
select system 我有改成 when "System"

外加
連續起動時間一直都顯示0


唉...糊塗了,忘了的事還真多啊

[ 本帖最後由 佐倉冬鈴 於 2009-9-8 22:24 編輯 ]
作者: 楓雨聆    時間: 2009-9-9 00:25

刪除這段語法
DayofWeek_w
{
        ("日","一","二","三","四","五","六")[weekday];
}

Platform
{
        case basewarename {
                when "embryo" {
                        "Materia"
                }
                when "crow" {
                        "CROW"
                }
                when "SSP" {
                        "SSP"
                }
                others {
                        "???"
                }
        }


的確就能正常執行了
感覺好像是會進入隨機迴圈?

---------------------------------------------------

>w<
發現能夠成功執行的方法了
只要將

DayofWeek_w
{
        ("日","一","二","三","四","五","六")[weekday];
}


完全獨立在OnChoiceSelect事件之外就可以正常顯示了
不會再出現佐倉拍照的隨機3種樣子
(感謝佐倉熱心貼圖 ymc的熱心測試^^)

以下是聆正常顯示的照片





另外平台的顯示
聆以
%(basewarename)\n/
就能夠正常顯示囉


嗚嗚...為什麼只是把星期3改成星期三就讓我那麼感動呢
大概是花了十幾個小時的原因吧(倒)
從這裡看的出來
好的人格真的很需要作者的耐心與愛心

人格的製作到後面會越來越慢
學習越多後你會發現不會的更多


果然最上面又有新的問題了...

[ 本帖最後由 楓雨聆 於 2009-9-9 00:50 編輯 ]
作者: ymc79106    時間: 2009-9-9 01:22

Q4、Q5、Q7的話
利用野菜園借鏡應該可以
像是下面
稱呼參照野菜園的extension內

對話框位置調整();
_txt += "\![change,balloon,清白]";

是放在bootend內的
利用這個當作參考試試看

人格發佈方面
nar應該是最好的選擇
對於會使用的人就算格式是什麼都沒關係
但對於新手而言的話
他們可能只會一昧的拖曳下載下來的人格檔給SSP
若是發現不能下載的話又會出現兩種人
一種是自己爬文找解決辦法的
一種是直接發文求救的
所以還是製程nar會比較方便
作者: 楓雨聆    時間: 2009-9-9 19:52

嗯嗯
按照ymc的方法
的確能夠以nar形式發佈
並且在安裝人格時同時安裝並選擇對話框
不過
聆是直接採用野菜園的語法
雖然成功了
但是卻不明白原理


在install.txt中
改為

charset,UTF-8
type,ghost
name,小雨聆
directory,seraphim

balloon.directory,ClearWhite
balloon.source.directory,balloon

就能夠自動安裝對話框的樣子
但是

balloon.directory,ClearWhite
balloon.source.directory,balloon


是什麼意思呢0.0?


話說現在Q4仍然無解...

[ 本帖最後由 楓雨聆 於 2009-9-9 19:53 編輯 ]
作者: 楓雨聆    時間: 2009-9-10 15:43

再度增加一個類似邏輯語法的問題
想要讓兩變數比較大小
再各別引發相應事件
不知道該怎麼做
看來這就是沒有程式語言基礎的後果啊...
請看最上面的Q8(辛苦了)
作者: 楓雨聆    時間: 2009-9-10 21:15

嘗試自製簡單骰子小遊戲
的確是可以執行
不過
邏輯似乎會出現嚴重問題
比如
5<3
4<1
我想既然不會是ssp出問題的話
那就是對於變數的讀取
似乎重複執行亂數
這部份也需要各位幫忙debug(鞠躬)
如第一篇的Q8
有詳細說明...
作者: kit0072    時間: 2009-9-10 23:43

10
l0
11
l1     最好不要再用=0=

if  %()
正常應該沒有  %(),放變數就對




{

ra =  RAND(6) +1
rb =  RAND(6) +1
--

" %(ra) , %(rb)\n"
--

              if ra > rb   
         {
                    "\0\s[5]%(ra) > %(rb)\e"
         }
         elseif ra < rb   
         {
                    "\0\s[5]%(ra) < %(rb)\e"
         }
         elseif ra == rb   
         {
                    "\0\s[5]%(ra) = %(rb)\e"
         }

}

[ 本帖最後由 kit0072 於 2009-9-10 23:56 編輯 ]
作者: 楓雨聆    時間: 2009-9-11 00:15

聆將語法按照kit0072的建議
改成

when "roll"
{

ra =  RAND(6) +1
rb =  RAND(6) +1



        "\0\s[5]您所擲出的點數為%(ra)點。\w9\w9\1

喵可所擲出的點數為%(rb)點。\w5\n"


--



              if ra > rb   
         {
                    "\0\s[5]贏了!!\w9\1輸

了...\e"
         }
         elseif ra < rb   
         {
                    "\0\s[3]輸了...\w9\1贏了!!

\e"
         }
         elseif ra == rb   
         {
                    "\0\s[0]\_s平手。\_s\e"
         }

}




真的可以正常執行了^^(感謝kit0072)

另外聆想要知道
原本的語法錯誤的地方在哪裡呢?
測試了一下
發現若將語法位置稍作更改
會出現聆原本所說的可怕邏輯問題


when "roll"
{




        "\0\s[5]您所擲出的點數為%(ra)點。\w9\w9\1

喵可所擲出的點數為%(rb)點。\w5\n"


--

ra =  RAND(6) +1
rb =  RAND(6) +1


              if ra > rb   
         {
                    "\0\s[5]贏了!!\w9\1輸

了...\e"
         }
         elseif ra < rb   
         {
                    "\0\s[3]輸了...\w9\1贏了!!

\e"
         }
         elseif ra == rb   
         {
                    "\0\s[0]\_s平手。\_s\e"
         }

}




藍色部分的文字位置
對於語法最後得到的結果會有很大的差異
聆沒有程式語言的基礎
所以很納悶
語法位置怎麼會造成不同的結果?

最後還是感謝協助聆完成第一個自製小遊戲的佐倉冬玲以及kit0072(90度鞠躬)

另外
想請問--這有作用嗎?
似乎刪除也會出錯的樣子...


[ 本帖最後由 楓雨聆 於 2009-9-11 00:30 編輯 ]
作者: forjanezz    時間: 2009-9-11 13:49

“--”意思是把上下2個輸出候選語句連接起來傳遞給ssp執行,如果刪掉“--”,則上下2句話就是平行關系,函式會隨機選擇其中的一句作為輸出,有50%可能顯示上面的話,也有50%可能顯示下面的。
比如函式
foo {
“你好”
”初次見面,請多關照“
}
有50趴的機會輸出“你好”,50趴的機會輸出“初次見面,請多關照”

而函式
foo {
“你好”
--
”初次見面,請多關照“
}
只會輸出“你好初次見面,請多關照”

函式除了在輸出的時候會隨機選擇“”包住的輸出候選語句,其他時候都是按從上往下的順序執行的,所以位置很重要

[ 本帖最後由 forjanezz 於 2009-9-11 14:08 編輯 ]
作者: forjanezz    時間: 2009-9-11 14:42

關于Q4,可以這樣定義3個函式

Select.ChangeUserName
{
        "請問你的名字是什麼呢?\![open,inputbox,OnNameChanged,0,%(username)]"
}

OnNameChanged
{
        if reference0 == "" {
                username = "無名氏"
                "叫無名氏也可以嗎?"
        }
        elseif username == reference0 {
                "還是叫%(username)君不用改也可以嗎?"
        }
        else {
                username = reference0
                "是%(username)君嗎?"
        }
        --
        "\n[150]\_q\q[確定,OnNameConfirmed]      \q[重新輸入,ChangeUserName]\e"
}

OnNameConfirmed
{
        "好的,那麼以後就請%(username)君多多指教囉^^\e"
}

使用的時候請添加ChangeUserName到選單中

[ 本帖最後由 forjanezz 於 2009-9-11 14:46 編輯 ]
作者: 楓雨聆    時間: 2009-9-11 21:35

那個...關於更換桌布這項功能
聆是採用貓魚大的茶兔語法
不過
似乎會出現問題

聆在aya_etc.dic中
加入下面這段語法
不知道是哪裡出錯呢?




//---- 壁紙變換 -------------------------------------------------------------------





OnFileDrop2
{
                QQ
        {
        _filepath = SPLITPATH(reference0)
        _filename = _filepath[2]
        _fileext = TOLOWER(_filepath[3])
        case _fileext
        {
                when ".png", ".jpg", ".jpeg", ".bmp"
                {
                        Wallpaperfile = reference0
                        "\1\s[11]\0\b[2]\s[2]圖像文件\n\_q「%(_filename)%(_fileext)」\n\n[half]\_q要把這個設定為壁紙嗎?\n\n

[half]/
                        \!
  • \q[置中,SetWallpaper_0]\n/
                            \!
  • \q[並列,SetWallpaper_1]\n/
                            \!
  • \q[放大,SetWallpaper_2]\n\n[half]/
                            \_b[img/close.png,inline]\q[Cancel,SetWallpaper_Cancel]\e"
    }





                    others
                    {
                            "\1\s[11]未知文件\n\_q「%(_filename)%(_fileext)」\_q\0\s[3]…這是什麼?\e"
                    }

                    }

                    }





    --




    Choice.SetWallpaper_0
    {
            _tmp = CHARSETLIBEX("saori\proxy.dll", 127)
            _i = FUNCTIONEX("saori\proxy.dll", "set_wall_paper.exe", "%(ASC(34))%(Wallpaperfile)%(ASC(34))", "0")
            "\0\s[0]置中……\e"
    }
    Choice.SetWallpaper_1
    {
            _tmp = CHARSETLIBEX("saori\proxy.dll", 127)
            _i = FUNCTIONEX("saori\proxy.dll", "set_wall_paper.exe", "%(ASC(34))%(Wallpaperfile)%(ASC(34))", "1")
            "\0\s[0]並列……\e"
    }
    Choice.SetWallpaper_2
    {
            _tmp = CHARSETLIBEX("saori\proxy.dll", 127)
            _i = FUNCTIONEX("saori\proxy.dll", "set_wall_paper.exe", "%(ASC(34))%(Wallpaperfile)%(ASC(34))", "2")
            "\0\s[0]放大……\e"
    }
    Choice.SetWallpaper_Cancel
    {
            "\1\s[14]\0\s[30]……取消了。\e"
    }


    }




    將圖片檔拖曳到人格時
    會直接更換桌布
    選單雖然有出現 但是毫無作用 點下去會出錯

    forjanezz大大說過
    --這段語法可以讓上下兩函式從原本的隨機輸出
    變成按照順序皆輸出
    那麼
    聆這段語法到底是哪邊有問題呢?

    就算完全複製茶兔中的相關語法也是失敗

    另外 想問一下
    when "xxxx"與select.xxxx
    這兩段語法究竟各有何作用呢
    有時聆參考其他人格語法
    發現原版語法在聆的人格無法使用
    把when改成select
    或者select改成when就可以正常運作
    至今仍然不懂原因

    聆將人格測試檔放在附件
    請善心人士有時間幫聆測試debug(跪倒)

    [ 本帖最後由 楓雨聆 於 2009-9-11 21:41 編輯 ]

    附件: seraphim更換桌布測試.nar (2009-9-11 21:41, 2.26 MB) / 該附件被下載次數 498
    http://cuc.moe.hm/attachment.php?aid=1943&k=c1a28a0b56641baa0641d60d34a7fa0f&t=1555928344
    作者: forjanezz    時間: 2009-9-12 10:11

    首先 when “xxxx” 不是獨立的函式,而是函式體內控制流程的一句語法,跟if一樣用來根據條件選擇分支控制程序流程的,when后面{}包住的內容即是當case 后的變數值等于“xxxx”時選擇執行的程序塊,它不能作為獨立的函式寫在一個空辭書里供yaya執行,只能存在于某個具體函式的內部。

    而Select.xxxx還有你上面引用茶兔的Choice.xxxx都是獨立函式的名稱的一部分,Select.是aya默認的選單按鈕事件發生時他要尋找執行的函式的前綴,Choice.是茶兔自己宣告的,你看他的menu辭書有這個
    OnChoiceSelect
    {
       EVAL("Choice.%(reference0)")
    }
    意思是當發生OnChoiceSelect事件(按鈕被點下時),則去執行“Choice.選項按鈕名”這個獨立的函式。
    然后你可以在任意的辭書內宣告你自己的
    Choice.選項按鈕名
    {
        //函式內容
    }
    這樣就不用把所有選項按鈕的處理都寫在一個函式OnChoiceSelect里面了,畢竟你肯定有很多辭書,別的辭書上有涉及選單的處理,不能統統塞進menu辭書的OnChoiceSelect函式里,所以這里我比較推薦這種做法,你可以試試把when “xxxx”都改寫成獨立的函式放在別的任意辭書里看看

    --------------------------------語法介紹結束,回到你po的那段程式來看看-----------------------------

    首先函式里面不能再埋入別的函式的宣告喔
    你的最外層{}包住的都是OnFileDrop2的內容,不應該把Choice.SetWallpaper_0這些獨立的函式宣告在里面,寫在別的函式體內會被解釋成【執行】Choice.SetWallpaper_0 這個函式,然后aya會在所有的辭書里的尋找Choice.SetWallpaper_0宣告的主體部分。因為找不到函式主體,所以也不會出錯,僅僅是什么都不做。
    Choice.SetWallpaper_0下面的{}包住的程式段會被解釋成與Choice.SetWallpaper_0一點關系都沒有的,僅僅是OnFileDrop2的主體的一部分。所以呢,就像是Choice.SetWallpaper_0根本不存在一樣,于是當你點擊SetWallpaper_0這個按鈕的時候就會冒出找不到函式來執行的話。

    ------------------------    癥狀解釋完畢,下面是解決方法 -------------------------------------

    要想直接拿茶兔宣告的函式來用其實很簡單喔,只要在你menu辭書里的OnChoiceSelect函式的others選擇分支里再加一句處理"Choice.xxxx"函式的語句就行了。
                    others
                    {
                            if ISFUNC("Choice." + reference0[0,'(']) {             //如果Choice.XXXX函式宣告了,則執行它
                                    EVAL("Choice." + reference0);
                            }
                            elseif ISFUNC("Select." + reference0[0,'(']) {               //如果Select..XXXX函式宣告了,則執行它
                                    EVAL("Select." + reference0);
                            }
                            else {
                                    "\0\s[3]嗯?雨聆似乎還沒完成這個功能?\w9\w9\s[0]\e"
                            }
                    }

    對了上面這段不是一個獨立的函式喔,只是OnChoiceSelect函式里的一部分內容而已。

    現在你就可以新建一個你喜歡的名字的辭書,或者在任意辭書最后的空白處 添加從別的人格找來的選單按鈕處理函式了^^

    啰啰嗦嗦說了一大堆,其實還是建議你先研究一下wiki上的AYA Version5說明文書,上面都解釋得很詳細了。如果看不明白可以去看一下c語言的簡明教程。

    [ 本帖最後由 forjanezz 於 2009-9-12 11:07 編輯 ]
    作者: 楓雨聆    時間: 2009-9-12 13:29

    非常感謝forjanezz的解說
    嘗試了一下真的成功了
    不過
    為什麼聆聽不太懂XD
    看來為了偽春菜
    要去學習基本的C語言了
    如果聆只是要了解在偽春菜上的基本功能以及邏輯
    大致上要看C語言的哪幾個部份呢?
    聆現在念大學三年級且進入實驗室
    時間不是很充裕...

    PS:每日一問 XD
    wiki所提到
    \![updatebymyself]的更新功能
    該如何製作呢?
    詳細問題在頂樓Q10


    [ 本帖最後由 楓雨聆 於 2009-9-12 19:04 編輯 ]
    作者: forjanezz    時間: 2009-9-13 00:57

    在下的建議是重點了解一下程式的基礎結構,函式的宣告和使用部分,還有if,for,while等等選擇和迴圈的語句的使用方法。變數部分可以不用太仔細看,c跟aya區別還蠻大的,aya對變數類型的檢查沒那么嚴格,操縱字串的方式更像c++
    作者: 楓雨聆    時間: 2009-9-13 15:21

    為了初步了解C++
    聆下載了Dev C++進行學習
    可是...
    同樣是C++的語法
    似乎Dev C++編譯會出錯?
    那麼 如果想在偽春菜上設計語法
    到底要用什麼軟體呢?
    作者: kit0072    時間: 2009-9-14 00:34

    似乎 沒有一套 軟件  aya語法出錯 會有提示 = =

    用 wiki 介紹那個

    我用記事本 ,不用煩 = ="
    作者: 楓雨聆    時間: 2009-9-14 21:31

    噗 似乎是聆沒有說清楚
    讓kit誤會了

    聆的意思是
    關於aya的語法
    wiki說類似於C語言
    那麼
    若聆自己也想寫功能(比如定時關機 拼圖 其他小遊戲)
    該用什麼軟體寫呢?
    如果是用C++
    聆昨天有下載Visual C++ Express 2008以及Dev C++
    相同的程式碼
    有的可以跑 有的不能跑
    很詭異的情況
    因此
    聆才想問
    該學習什麼軟體
    又可以在aya使用呢?
    作者: forjanezz    時間: 2009-9-15 06:58

    畢竟aya和c或者c++還相差滿遠的,特別是輸出方式上。學習c/c++只是為了看懂aya語法的結構而以,不可能用c++的編譯器來編譯aya的腳本啦,如果說是為了試驗c++的程式玩的話vc++和devc++都是可以的喔。選用跟教程上推薦的一致的軟體會比較方便。

    寫aya腳本我用的是akelpad,很小巧的記事本軟體,支援多國語言編碼,支援plugin,我已經拿它徹底替代記事本了

    [ 本帖最後由 forjanezz 於 2009-9-15 07:00 編輯 ]




    歡迎光臨 中文偽春菜後援會論壇 (http://cuc.moe.hm/) Powered by Discuz! 6.1.0