中文偽春菜後援會論壇  

打印

[求助] 設計人格時的問題...

關于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 編輯 ]

TOP

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

聆在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 (2.26 MB)

    2009-9-11 21:41, 下載次數: 498

    葉經過的滋潤後 在樹蔭下聽心靈的歌聲

    TOP

    首先 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 編輯 ]

    TOP

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

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


    [ 本帖最後由 楓雨聆 於 2009-9-12 19:04 編輯 ]
    葉經過的滋潤後 在樹蔭下聽心靈的歌聲

    TOP

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

    TOP

    為了初步了解C++
    聆下載了Dev C++進行學習
    可是...
    同樣是C++的語法
    似乎Dev C++編譯會出錯?
    那麼 如果想在偽春菜上設計語法
    到底要用什麼軟體呢?
    葉經過的滋潤後 在樹蔭下聽心靈的歌聲

    TOP

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

    用 wiki 介紹那個

    我用記事本 ,不用煩 = ="

    TOP

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

    聆的意思是
    關於aya的語法
    wiki說類似於C語言
    那麼
    若聆自己也想寫功能(比如定時關機 拼圖 其他小遊戲)
    該用什麼軟體寫呢?
    如果是用C++
    聆昨天有下載Visual C++ Express 2008以及Dev C++
    相同的程式碼
    有的可以跑 有的不能跑
    很詭異的情況
    因此
    聆才想問
    該學習什麼軟體
    又可以在aya使用呢?
    葉經過的滋潤後 在樹蔭下聽心靈的歌聲

    TOP

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

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

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

    TOP



    當前時區 GMT+8, 現在時間是 2019-4-21 20:04

    Processed in 0.017955 second(s), 9 queries, Gzip enabled.

    清除 Cookies - 聯繫我們 - 中文偽春菜後援會 - Archiver - WAP - TOP - 界面風格