請注意這是NVL 3.55繁體中文」的修改方式
文字都嵌在底圖中,並且修改離開遊戲返回主選單存檔讀檔四個地方的詢問視窗
其他版本的寫法可能略有不同,以下教學僅供參考
之所以將文字都嵌在圖中是因為改字型很麻煩的關係~"~
(我改了幾次都不成功,不喜歡系統預設的字型啊~!索性將字都嵌進圖裡...XD

個人程式底子也沒有說很好,以下修改方式僅供參考XDDDD
另外3.07版可以參考翔嵐的的分享與教學XDDD

 


修改確認視窗方法(YesNoDialog)需要改幾個檔案&準備一些png圖檔
(圖檔檔名僅供參考,可以隨自己高興命名,不過程式裡要統一名稱喔~)

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

nvl資料夾內的MySaveLoadFunction.tjs
system資料夾內的YesNoDialog.tjs
另外準備幾張確認視窗(YesNoDialog)的底圖
由於這版不支援透明度設定,所以不要拿半透明的底圖過來喔~!
check_BG_exit詢問是否要離開遊戲)
check_BG_title(詢問是否要返回主選單)
check_BG_load(詢問是否要讀檔)
check_BG_save(詢問是否要存檔)
check_BG(一般泛用底圖,上頭沒有字)
check_b_y-1check_b_y-2check_b_y-3yes按鈕,點選前、點選中、點選後)
check_b_n-1check_b_n-2check_b_n-3no按鈕,點選前、點選中、點選後)
按鈕你共用同一張,或是三張都不同,看個人需求

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

 

●步驟一,修改nvl資料夾內的MySaveLoadFunction.tjs

搜尋「詢問文字」,可以找到四個地方
保存詢問文字、讀取詢問文字、返回標題詢問文字、退出詢問文字
前兩個和存檔相關的,預設是讀取檔名變數,再顯示在詢問視窗上
因為我不想讓它顯示檔名(有時檔名太長會超出我的底圖框...
所以全部註解掉,只保留prompt的內容

《存檔部分》

//if(num < numBookMarks) prompt += (num + 1);

//if(bookMarkDates[num] != "") // bookMarkDates 空文字場合存在

//prompt += "\n將「" + bookMarkNames[num] + "";

//prompt += "\n保存為「"+ pcflags.currentPageName + "」嗎?";

prompt += "請問確定要存檔嗎?";

askYesNo(prompt, "確認", saveBookMark, kag.process(,"*刷新畫面"), num, SaveUpDate);

《讀檔部分》

//if(num < numBookMarks) prompt += (num + 1);

//prompt += "\n讀取存檔「"+ bookMarkNames[num] + "」嗎?";

prompt += "請問確定要讀檔嗎?";

askYesNo(prompt, "確認", loadBookMark, void, num, kag.process(,"*刷新畫面"));

《返回標題部分》

askYesNo("確定要返回主選單嗎?", "確認", goToStart); 

《關閉遊戲部分》

if (currentDialog === void) {

askYesNo("確定要離開遊戲嗎?", "確認", onCloseYes);

 

改完了!主要就是改成底下這四句XDDDD
----------------------------------------
請問確定要存檔嗎?
請問確定要讀檔嗎?
確定要返回主選單嗎?
確定要離開遊戲嗎?
----------------------------------------
設定用程式顯示詢問文字的情況下,想修改詢問文字的話,主要也是改這裡
不過記得之後YesNoDialog.tjs裡的句子也要跟著一起改才對應得到喔~!

 

 

●步驟二,修改system資料夾內的YesNoDialog.tjs
將以下代碼剪下然後整個蓋過YesNoDialog.tjs的內容XD
可修改處我用顏色標起來了,紅色字是我這個版本要修改的地方
藍色字是如果你想用系統顯示字的話再寫就好了

 

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

// YesNoDialog.tjs - はい/いいえを選択するダイアログボックス

// Copyright (C)2001-2006, W.Dee and contributors  改変&#12539;配布は自由です

 

class YesNoDialogWindow extends Window

{

        var yesButton; // [はい] ボタン

        var noButton; // [いいえ] ボタン

        var result = false; // no:false yes:true

       

        //添加臨時層

              var tempLayer;       

        property temporaryLayer

        {

                // ワークエリアとして一時的に使用できるレイヤを返す

                getter()

                {

                        if(tempLayer === void)

                        {

                                tempLayer = new KAGLayer(this, primaryLayer);

                                tempLayer.name = "一時ワークレイヤ";

                        }

                        return tempLayer;

                }

        }

 

        function YesNoDialogWindow(message, cap)

        {

                super.Window();

 

                // メインウィンドウから cursor**** の情報をとってくる

                if(global.Window.mainWindow !== null &&

                        typeof global.Window.mainWindow.cursorDefault != "undefined")

                        this.cursorDefault = global.Window.mainWindow.cursorDefault;

                if(global.Window.mainWindow !== null &&

                        typeof global.Window.mainWindow.cursorPointed != "undefined")

                        this.cursorPointed = global.Window.mainWindow.cursorPointed;

 

                // 外見の調整

                borderStyle = bsNone;

                innerSunken = false;

                caption = cap;

 

                // プライマリレイヤの作成

                add(new Layer(this, null));

 

                // プライマリのマウスカーソルを設定

                if(typeof this.cursorDefault !== "undefined")

                    primaryLayer.cursor = cursorDefault;

                   

                    //不同詢問窗口的底圖,底下這幾句要和MySaveLoadFunction.tjs改的內容相同才對應得到喔!

                    if (message=="確定要離開遊戲嗎?")

                            primaryLayer.loadImages("check_BG_exit");  // 詢問離開遊戲的底圖

                    else if (message=="確定要返回主選單嗎?")

                            primaryLayer.loadImages("check_BG_title");  // 詢問回主選單的底圖

                    else if (message=="請問確定要讀檔嗎?")

                            primaryLayer.loadImages("check_BG_load");  // 詢問讀檔的底圖

                    else if (message=="請問確定要存檔嗎?")

                            primaryLayer.loadImages("check_BG_save");  // 詢問存檔的底圖

                    else

                            primaryLayer.loadImages("check_BG");       // 其他泛用底圖(無字)

                           

                    primaryLayer.setSizeToImageSize();

 

                // 文字樣式設定               

                primaryLayer.font.face="微軟正黑體";    //文字字型,如果有要用程式顯示詢問文字可修改這裡

                primaryLayer.font.height=22;            //文字大小,如果有要用程式顯示詢問文字可修改這裡

       

                var tw = primaryLayer.font.getTextWidth(message);

                var th = primaryLayer.font.getTextHeight(message);

 

                // サイズを決定

              var max_tw = 0;

              var sum_th = 0;

              var messages = message.split('\n');

              for (var i=0; i < messages.count; i++)

              {

                      var lw = primaryLayer.font.getTextWidth(messages[i]);

                      var lh = primaryLayer.font.getTextHeight(messages[i]);

                      if (lw > max_tw)

                      max_tw = tw;

                      sum_th += lh + 0; // 行間が必要なら+0より大きくする

              }

              tw = max_tw;

              th = sum_th;

 

                var w =primaryLayer.width;

                var h = primaryLayer.height;

 

                setInnerSize(w, h);

 

                primaryLayer.width = w;

                primaryLayer.height = h;

 

                // ウィンドウ位置の調整(視窗位置調整,預設是自動置中,想自己設定也可以XD

                if(global.Window.mainWindow !== null && global.Window.mainWindow isvalid)

                {

                        var win = global.Window.mainWindow;

                        var l, t;

                        l = ((win.width - width)>>1) + win.left;

                        t = ((win.height - height)>>1) + win.top;

                        if(l < 0) l = 0;

                        if(t < 0) t = 0;

                        if(l + width > System.screenWidth) l = System.screenWidth - width;

                        if(t + height > System.screenHeight) t = System.screenHeight - height;

                        setPos(l, t);

                }

                else

                {

                        setPos((System.screenWidth - width)>>1, (System.screenHeight - height)>>1);

                }

 

 

                // message文字的描繪

                //(以下這段由於我沒有讓系統顯示詢問文字,所以全部註解掉了)

                //如果要使用的話把前面的「//」給拿掉就好

                //另外這版本是只讓離開遊戲&返回主選單「之外」的詢問文字用程式顯示喔

                //連這兩個視窗都要用程式顯示詢問文字的話請自行將if判斷式拿掉0.0/

                //另外message要和之前MySaveLoadFunction.tjs改的文字內容相同才對應的到喔

 

              //var msgpos_y = 60;

             

              //if (message!="確定要離開遊戲嗎?" && message!="確定要返回主選單嗎?")

              //{

              //        for (var i=0; i < messages.count; i++)

              //        {

              //                 var lw = primaryLayer.font.getTextWidth(messages[i]);

              //                 var lh = primaryLayer.font.getTextHeight(messages[i]);

              //                 var msgpos_x = (w - lw)\2;

                              

              //                 primaryLayer.drawText(msgpos_x, msgpos_y+50, messages[i],0xFFFFFF);  //文字位置調整

                              

              //                 msgpos_y += lh + 10; // 調整行間距

              //        }

              //}

 

                // Yes按鈕的設定

                add(yesButton = new ButtonLayer(this, primaryLayer));

                yesButton.loadButtons("check_b_y-1.png","check_b_y-2.png","check_b_y-3.png");   //確認按鈕的圖片

                yesButton.top = 170;  //調整按鈕顯示位置(X軸)

                yesButton.left = 95;   //調整按鈕顯示位置(Y軸)

                yesButton.visible = true;

 

 

                // Noボタン

                add(noButton = new ButtonLayer(this, primaryLayer));

                noButton.loadButtons("check_b_n-1.png","check_b_n-2.png","check_b_n-3.png");   //取消按鈕的圖片

                noButton.top = 170;    //調整按鈕顯示位置(X軸)

                noButton.left = 205 ;   //調整按鈕顯示位置(Y軸)

                noButton.visible = true;

 

 

        }

 

        function finalize()

        {

                super.finalize(...);

        }

 

        function action(ev)

        {

                // action

                if(ev.type == "onClick")

                {

                        if(ev.target == yesButton)

                        {

                                result = true;

                                close();

                        }

                        else if(ev.target == noButton)

                        {

                                result = false;

                                close();

                        }

                }

                else if(ev.type == "onKeyDown" && ev.target === this)

                {

                        // パッド入力に対応する処理

                        switch(ev.key)

                        {

                        case VK_PADLEFT:

                                yesButton.focus();

                                break;

                        case VK_PADRIGHT:

                                noButton.focus();

                                break;

                        case VK_PAD1:

                                if(focusedLayer == yesButton)

                                {

                                        result = true;

                                        close();

                                }

                                else if(focusedLayer == noButton)

                                {

                                        result = false;

                                        close();

                                }

                                break;

                        case VK_PAD2:

                                result = false;

                                close();

                                break;

                        }

                }

        }

 

        function onKeyDown(key, shift)

        {

                super.onKeyDown(...);

                if(key == VK_ESCAPE)

                {

                        // ESC キーが押された

                        // 「いいえ」として処理

                        result = false;

                        close();

                }

        }

}

 

// Yes No かはっきりさせる関數

function askYesNo(message, caption = "確認", yesFunc=void, noFunc=void, param=void, doneFunc=void)

{

    var win = new YesNoDialogWindow(message, caption);

        win.showModal();

    var res = win.result;

    invalidate win;

 

    if (res) {

        if (yesFunc !== void) {

            yesFunc(param);

        }

    } else {

        if (noFunc !== void) {

            noFunc(param);

        }

    }

 

    if (doneFunc !== void) {

        doneFunc(param);

    }

}

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

 

 

●其他補充,關於以程式顯示詢問文字

補充一下,關於以程式顯示詢問文字
主要是system資料夾內的YesNoDialog.tjs裡底下這一段(剛剛上面被我註解掉的)
if (message!="確定要離開遊戲嗎?"   && message!="確定要返回主選單嗎?")
這句話代表『當訊息"確定要離開遊戲嗎?"以及"確定要返回主選單嗎?"時,執行以下語法』
翻得更白話一點,也就是說「離開遊戲&返回主選單之外的詢問視窗都用程式顯示詢問文字」

如果要取消掉返回主選單的限制條件,改成也用程式顯示訊息文字
只要改成把它的判斷式拿掉就好了,也就是以下這條
if (message!="確定要離開遊戲嗎?")

相反的如果要增加判斷式,就是在括號裡再多加個&& message!="詢問文字內容"
存檔訊息和讀檔訊息有檔名變數的,可能不能直接填入"詢問文字內容"中,詳細的這裡暫且不提
當然像我寫的那樣整個註解掉的話,所有詢問視窗就不會顯示任何訊息文字,全都要嵌在圖裡了

底圖部分就看上面那段「//不同詢問窗口的底圖」底下那幾行嘍
改的方法很類似,自己研究吧XDD
沒有對應到+也不去特別設定的話,一律都是用「primaryLayer.loadImages("check_BG");       // 其他泛用底圖(無字)」這個來顯示

 

其他像是『是否要覆蓋檔案』、『是否要XXX』其他的詢問視窗,由於這版的NVL沒有特別設定的樣子,也不會顯示詢問視窗
這裡就不多提了XDDDDDDD
請自己去試吧XDDDD

創作者介紹

✦觀象草圖✦

日津樹伶 發表在 痞客邦 PIXNET 留言(0) 人氣()