注册 | 登录

游侠NETSHOW论坛





游侠NETSHOW论坛 游侠NETSHOW论坛 太阁立志传5·绯红之章·人间五十年 【光荣工作组】銀鳥的TK5剧本初級教程——5.29更新 ...
查看: 19974|回复: 28
打印 上一主题 下一主题

[教程] 【光荣工作组】銀鳥的TK5剧本初級教程——5.29更新 [复制链接]

游侠光荣游戏工作组【剧本】
斋藤家当主 军师
冥界引路人·馬爾基諾

帖子
1156
精华
0
积分
1014
金钱
7125
荣誉
43
人气
55
评议
0

跳转到指定楼层
楼主
发表于 2009-5-23 15:35:07 |只看该作者 |倒序浏览
考虑到目前本教程的人气与反响均不佳的现实,本鸟觉得有重新调整內容的必要……
因此日後教程重點將會从最基础的开始并逐渐加深!

另附:容器使用教程。
一楼:剧本编辑的基础知识讲解。————5.29更新:場合別基礎知識
二楼:暫空……
六楼:进阶知识及实例演示(上)。

   进阶知识及实例演示(下)。————5.29新加入



本人近日較為繁忙!更新進度日後一定補上!


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++







“文字列”的基礎知識



问:什么是文字列?
答:在TK5中,所謂的文字列也就是事先將所要表示文字腳本進行預處理。待使用時再進行導入,
它不僅僅可以用於各種人物會話,也可以寫入選擇菜單之中,是一種使用較為廣泛文字腳本處理方式。

文字列的變量一共有6個分別爲:
文字列A”、“文字列B”、“文字列C”、“文字列D”、“文字列E”、“Empty
基本格式為:文字列設定:(文字列A)[[需要表達的文字腳本]]
例:
調査:(人物::主人公.性別)==(男)
分岐:(真){
    文字列設定:(文字列A)[[大爺您請]]
}
分岐:(偽){
    文字列設定:(文字列A)[[小姐請留步]]
}//事先先根據主角性別的不同,將不同的文字腳本保存到<文字列A>
会話:(宿屋の女将,主人公)[[您是?您難道就是(主人公)!<文字列A>!]]
//調出實現保存的<文字列A>,這樣一來同一句會話根據主角不同的性別就會出現不同的對白。
//當然,這只是最簡單的用法。






+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


“代入運算”的基礎知識



问:如何進行屬性等數值的計算?
答:在tk5劇本編輯中,小寫“a~z”26個字符通常用於數值變量的計算
且每次只能進行雙項式的單次運算。如果想要進行較為發雜的運算,那就必須拆分運算……

【這部分相對簡單,大家可以參考已發布的源文件中的計算,這裡就不詳細說了。】

例:需要計算“a”的80%就只能這么寫
代入a:()*(8)//將:原數(a)乘以(8),保存到(a)并覆蓋
代入a:()/(10)//將:原數(a)除以(10),保存到(a)并覆蓋
即完成了“a”80%的計算



運算時所使用的運算符號除了眾所周知的“+”、“-”、“*”、“/“之外
還有一個"%",它的主要作用除了取餘數計算之外還可以配合“Rnd”、“Rnd100”隨機數語句控制隨機數的範圍
在TK5中“Rnd”與“Rnd100”隨即範圍分別為:0~655350~99


如:隨即數1~5該怎么寫?
代入a:(Rnd)%(5)//“%(5)”的作用是將a的隨即範圍控制在0~4,這5個數以內
代入a:()+(1)//在原數“(a)”的基礎上“+1”,隨即的範圍也就變為“1~5”。




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



“循環”的基礎知識

【這部分知識在後面的內容中會多次講到,這裡暫時先簡單略過。】


问:为什么我写循环总是出现莫名其妙的错误,譬如死循环、无法脱出等問題?
答:循环的写法在TK5的剧本编辑中分为两类,你在写的时候可以根据自己的实际情况选择较为适合的写法。



1.條件循環:單一脫出條件的簡單循環,只需要滿足循環條件即可實現循環,當條件不符時自動脫出,無需另寫脫出條件,優點是使用方便出錯幾率低,較為容易掌握。
条件ループ:(條件)>(對應值){//滿足條件時候循環開始
    XXXXXXXXXXXXXXX//循環的內容
}//循环结束

  
  
  
  
2.一般循環:自動執行的腳本循環,需要使用脫出種類、脫出調查。是一種可以書寫多條件及多種脫出種類的循環,優點是使用範圍廣。由於需要在結束標記前加入相關的調查語句和脫出語句因此較為複雜。
ループ:{//循环开始
    XXXXXXXXXXXXXXX//循環的內容
脫出種類//
}//循环结束

脫出種類:
ブロック脱出://無條件脫出
ブロック脱出:(真)//結果為真脫出
ブロック脱出:(偽)//結果為偽脫出



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


“場合別”的基礎知識

问:什么是場合別?
答:与“調査”語句不同,“场合别”是一种并不形成进行真伪判断的“多結果处理”的“特殊调查”语句,雖然不會形成真伪判断,因此并不適合作為“発生条件”來使用但却可以处理更多的“并列结果”。事實上场合别能夠处理的种类相当之广泛几乎与普通的調査語句无异,且使用方便。因此是一种使用较为常用的语句。
利用場合別來判斷主人公的騎馬技能!
比通常使用“調査:(人物::主人公.騎馬技能)==(5)”能同时处理更多的结果。

[quote]
場合別:(人物::主人公.騎馬技能){
    場合分岐:(5){//主人公騎馬技能為5級時!
        
    }
    場合分岐:(4){//主人公騎馬技能為4級時!
        
    }
    場合分岐:(3){//主人公騎馬技能為3級時!
        
    }
    場合分岐:(2){//主人公騎馬技能為2級時!
        
    }
    場合分岐:{//其他分歧,這裡是指以上未被列出的主人公騎馬技能為2、1、0時!
        
    }
}

  
利用場合別來判斷主人公劍術流派!
場合別:(人物::主人公.剣術流派){
    場合分岐:(流派::香取神道){
        
    }
    場合分岐:(流派::新陰){
        
    }
    場合分岐:{//其他分歧
        
    }
}


利用場合別來判斷主人公部下的身份,并根據功勛來升職……
            コンテナ設定:(人物,所属大名家,主人公大名家)
            コンテナ除外:(人物,人物番号,主人公)
            コンテナソート:(人物,武士勲功,昇順)
            条件ループ:(コンテナカウンタ)>(0){
                コンテナ選択:(人物B,先頭)
                代入a:(人物B.武士勲功)
                //---------------
                場合別:(人物B.身分){
                    場合分岐:(身分::足軽組頭){
                        調査:(人物::人物B.武士勲功)>=(201)
                        分岐:(真){
                            更新:(人物::人物B.身分)(足軽大将)
                        }
                    }
                    場合分岐:(身分::足軽大将){
                        調査:(人物::人物B.武士勲功)>=(601)
                        分岐:(真){
                            更新:(人物::人物B.身分)(侍大将)
                        }
                    }
                    場合分岐:(身分::侍大将){
                        調査:(人物::人物B.武士勲功)>=(1401)
                        分岐:(真){
                            更新:(人物::人物B.身分)(部将)
                        }
                    }
                    場合分岐:(身分::部将){
                        調査:(人物::人物B.武士勲功)>=(3001)
                        分岐:(真){
                            更新:(人物::人物B.身分)(家老)
                        }
                    }
                }
                コンテナ選抜:(削る,1)
            }
[/quote]

  


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



[ 本帖最后由 two001 于 2009-7-6 02:21 编辑 ]
已有 1 人评分金钱 收起 理由
Sare + 50 + 2 文章不错,继续努力!

总评分: 金钱 + 50  + 2   查看全部评分

使用道具 举报

游侠光荣游戏工作组【剧本】
斋藤家当主 军师
冥界引路人·馬爾基諾

帖子
1156
精华
0
积分
1014
金钱
7125
荣誉
43
人气
55
评议
0

沙发
发表于 2009-5-23 15:35:39 |只看该作者
最後感謝Julian1212【光榮組】 各位朋友對我幫助,謝謝
包括那個总爱挖鼻孔的桥段

[ 本帖最后由 two001 于 2009-6-1 20:57 编辑 ]

使用道具 举报

游侠剑阁工作组 副组长
源氏长者 從一位 左大臣

精华勋章写手之证剑阁工作组资深组员勋章

帖子
2399
精华
13
积分
6154
金钱
25902
荣誉
235
人气
32
评议
0

板凳
发表于 2009-5-23 16:18:19 |只看该作者
占领沙发。桥墩的挖鼻孔和偶学的。

东西不错,希望对大家有帮助。

使用道具 举报

正六位上 弹正大忠

帖子
979
精华
1
积分
856
金钱
6774
荣誉
16
人气
63
评议
0
地板
发表于 2009-5-23 16:56:20 |只看该作者
话说,沙发下面是什么来着?
不管了!占了再说!
以后又有一个参考教材了!
LZ辛苦了!
The people who get on in this world are the people who get up and look for circumstances they want,
and if they cannot find them,
make them.

使用道具 举报

游侠剑阁工作组【制作】

剑阁工作组资深组员勋章

帖子
436
精华
2
积分
920
金钱
4225
荣誉
30
人气
23
评议
0
5#
发表于 2009-5-23 18:30:39 |只看该作者
顶一顶

大家都这么热心,搞得我也想写教程了。。。

使用道具 举报

游侠光荣游戏工作组【剧本】
斋藤家当主 军师
冥界引路人·馬爾基諾

帖子
1156
精华
0
积分
1014
金钱
7125
荣誉
43
人气
55
评议
0

6#
发表于 2009-5-23 18:53:31 |只看该作者

※※※※※※※※※範例一※※※※※※※※※


代入z:(人物::主人公.体力)-(35)
更新:(人物::主人公.体力)(z)//


這一段是使用較為廣泛的人物屬性調用—計算—覆蓋的代碼。
相信很多人都能看的懂,(不明白的話也沒多大關係,一會我會詳細說明。)
在遊戲中的效果也就是主角的體力一下子減少35


但……其實只要稍加改造就可以模擬出遊戲中“體力緩慢降低”的效果。
方法也相當簡單——

首先由我來說明設計思路
利用循環來重複執行範例一中“體力-1"代碼以求模擬出“體力緩慢降低”的效果。
並當循環次數到達規定值時,自動終止循環。


代入a:(0)//將循環用標記"a"清零。重要
//這不僅僅是爲了避免出現BUG,同時也是給自己和其他讀者(如果存在的話)一個提醒,
//標示出到底用到了哪些計算符,以免使用混亂出現不必要的麻煩。
ループ:{//循环开始

    代入a:(a)+(1)//重要循環次數的標記,腳本每運行一次"a"自動+1以用做循環記錄
    代入z:(人物::主人公.体力)-(1)//循環腳本的主要內容,以"z"為標記讀取主角當前體力并減去1,
    更新:(人物::主人公.体力)(z)//將"z"運算的結果覆蓋為主角的體力,這裡的效果也就是"先前體力-1"。
    ウェイト:(0.1)//設定腳本的停頓時間,通過控制腳本的停頓時間長短可以改變體力減少的速度。
    //這裡為0.1秒。這樣一來每執行完一次上面的腳本后,必須停頓0.1秒后才允許繼續執行。


    調査:(a)>=(35)//調查腳本運行標記""是否大於“35",也就是調查腳本是否執行了35次以上。
    ブロック脱出:(真)//結果為真時脫出,這裡的結果也就是之前調查"a"是否大於“35"的結果。
    //若結果不為真,暨""小於“35",則自動返回循环开始處,再次執行循環內的腳本。
}//循环结束

在循環代碼的幫助下,玩家的體力每隔0.1秒就會減少1,直到減少了35次后即告停止。
這樣一來“體力緩慢降低”的效果就初步完成了。

為什麽說初步呢?不知您有沒有想到,如果玩家體力一開始就在35以下。那……會出現什麽效果呢?
沒錯!就是玩家的體力已經到了1但循環腳本仍在繼續執行……

那……有沒有辦法彌補呢?
回答當然是有!

修改思路
在之的退出條件""大於“35"的基礎上
加入另一條退出條件“當主角體力為1時也可終止循環”。

代入a:(0)
ループ:{//循环开始

    代入a:(a)+(1)
    代入z:(人物::主人公.体力)-(1)
    更新:(人物::主人公.体力)(z)//
    ウェイト:(0.1)

    OR調査:{//OR調查內的并列語句,只要滿足其中一條,結果就為
        調査:(人物::主人公.体力)<=(1)//調查主角體力是否小於等於1
        調査:(a)>=(35)
    }
    ブロック脱出:(真)
}//循环结束

這樣一來就完成了,只需要在之前的基礎上添加“OR調査
以及新的脫出調查:“調査:(人物::主人公.体力)<=(1)
也就是說,如果主角體力為1即使沒有循環滿35次調查的結果也可以“”,終止并脫出循環。



恩!這樣一來完成了!但,似乎還是不太完美……
還是讓偶稍作修改……


代入a:(0)
ループ:{//循环开始
    代入a:(a)+(1)
    代入z:(人物::主人公.体力)-(1)
    更新:(人物::主人公.体力)(z)//

    AND調査:{//AND調查內的并列語句,必須全部滿足,結果才為真。即使只有一條不符,也會被判定為
        調査:(主人公.病気フラグ)==(健康)//調查主角當前身體狀況為健康
        調査:(人物::主人公.体力)<=(35)//調查主角體力是否小於35
    }
    分岐:(真){
        ひとりごと:[[恩~,\n身體狀況好像有點不對勁。]]//自言會話
        ナレーション:[[(主人公)生病了。\n將無法發揮出平時的能力。]]//旁白會話
        更新:(人物::主人公.病気フラグ)(病気)//更新主角健康狀況為:生病
        メッセージ閉じる://關閉之前顯示的對話。
    }
    ウェイト:(0.1)
    OR調査:{
        調査:(人物::主人公.体力)<=(1)
        調査:(a)>=(35)
    }
    ブロック脱出:(真)
}//循环结束


不知道大家看懂沒有?我來解釋一下吧!
當玩家身體狀況為健康且體力低於35以下時,出現提示并自動更新身體狀況為生病
這樣一來,就可以模擬出遊戲中體力較低時自動生病的效果了。



是不是覺得很有趣呢?一個簡單代碼也可以演化出這么多東西?通過以上的範例,相信大家對:
循環計算OR調査AND調査的使用有了初步的认识与了解了吧?不知道你有沒有看懂呢?



如果您看懂了的話,那就讓我们继续吧……




※※※※※※範例二(範例一的演化)※※※※※※





明白了“體力緩慢降低”效果的製作方式,那…我們就來嘗試將它改變一下吧!



成品一:以體力的恢復量來做條件循環的循環條件,製作出一個“體力緩慢恢復”的腳本,並且當體力超過65以上則自動恢復健康。


代入a:(100)-(人物::主人公.体力)//計算“a”的值為,最大體力減去當前體力。(也就是需要恢復的體力)
SEループ:(休養)//循環播放音效:休息
条件ループ:()!=(0){//當“”不等於0時執行條件循環。若“”為0時則自動脫出。
    代入a:(a)-(1)//重要 每執行一次腳本“a”就減去1
    代入z:(人物::主人公.体力)+(1)//
    更新:(人物::主人公.体力)(z)//與之前不同,這裡的運算結果是主角先前體力+1
    AND調査:{
        調査:(主人公.病気フラグ)==(病気)//調查主角身體狀況為:生病
        調査:(人物::主人公.体力)>=(65)//調查主角當前體力在65以上
    }
    分岐:(真){
        ひとりごと:[[嗯!身體狀況已經恢復的差不多了。]]
        ナレーション:[[(主人公)的身體已經恢復健康。]]
        更新:(人物::主人公.病気フラグ)(健康)//將主角的身體狀況更新為:健康
        メッセージ閉じる:
    }
    ウェイト:(0.1)
}
SEストップ:(休養)//停止循環音效



怎么樣?是不是看懂了呢?使用條件循環來製作的循環腳本是不是比之前的循環方式較為簡便呢?
不過一定要主意這個循環的重點是:每執行一次循環,主角體力+1,且循環標記-1

但很明顯……
不用測試也知道以體力的恢復量來做條件循環的循環條件顯然不是一個主意!

问:爲什麽這么說呢?
答:很簡單,這種寫法存在一個先天缺陷。就是製作的時候想當然的認為玩家的體力不會超過100。正是由於這個原因,腳本開始時候的運算“代入a:(100)-(人物::主人公.体力)”可能在由於玩家使用修改器將體力設定為100以上,時導致計算結果出現負數。從而出現不必要的BUG。


……明白了這點以後,還是讓我們繼續吧!


更新:(イベントフラグ::體力用循環·開)(成立)//設定事件標記“體力用循環·開”為"成立"狀態
SEループ:(休養)
条件ループ:(イベントフラグ::體力用循環·開)==(成立){//當事件標記“體力用循環·開”為"成立"狀態時執行以下循環
    代入z:(人物::主人公.体力)+(1)
    更新:(人物::主人公.体力)(z)//
    AND調査:{
        調査:(主人公.病気フラグ)==(病気)
        調査:(人物::主人公.体力)>=(65)
    }
    分岐:(真){
        ひとりごと:[[嗯!身體狀況已經恢復的差不多了。]]
        ナレーション:[[(主人公)的身體已經恢復健康。]]
        更新:(人物::主人公.病気フラグ)(健康)
        メッセージ閉じる:
    }
    ウェイト:(0.1)
    調査:(人物::主人公.体力)>=(100)//調查玩家體力是否為100以上。
   //(之所以要設定超過100的假設狀況,是爲了避免 玩家使用修改器造成不必要的BUG
    分岐:(真){//當之前的調查結果為“”時,執行以下腳本。
        更新:(イベントフラグ::體力用循環·開)(不成立)//設定事件標記“體力用循環·開”為"不成立"狀態
    }//這樣一來就完成了一個退出標記,當玩家體力恢復完畢時自動將事件標記關閉,這樣一來循環條件也就不符了,自然無法繼續執行循環腳本。
}
SEストップ:(休養)





※※※範例三怎樣製作一個較為實用的選擇菜單※※※





先還是讓我們從最簡單的“選擇菜單”開始……
選択:[[功能一:]][[功能二:]][[功能三:]][[關閉]]
分岐:(0){//對應功能一。【標誌的寫法應該是“分岐:([[功能一:]])”】
    選択:[[功能一A:]][[功能一B:]][[功能一C:]][[取消]]
    分岐:(0){
        ナレーション:[[功能一A:]]//內容主體
    }
    分岐:(1){
        ナレーション:[[功能一B:]]//內容主體
    }
    分岐:(2){
        ナレーション:[[功能一C:]]//內容主體
    }
    分岐:(3){//取消
    }
}
分岐:(1){//對應功能二
    選択:[[功能二A:]][[功能二B:]][[功能二C:]][[取消]]
    分岐:(0){
        ナレーション:[[功能二A:]]
    }
    分岐:(1){
        ナレーション:[[功能二B:]]
    }
    分岐:(2){
        ナレーション:[[功能二C:]]
    }
    分岐:(3){
    }
}
分岐:(2){//對應功能三
    選択:[[功能三A:]][[功能三B:]][[功能三C:]][[取消]]
    分岐:(0){
        ナレーション:[[功能三A:]]
    }
    分岐:(1){
        ナレーション:[[功能三B:]]
    }
    分岐:(2){
        ナレーション:[[功能三C:]]
    }
    分岐:(3){
    }
}
分岐:(3){//關閉
}
上就是大家比較常用的雙層選擇菜單,即點開第一層菜單時即可彈出第二層菜單。
但……爲了使用的方便,我們通常會加上多層循環——如下:
  
代入z:(0)//循環標記初始化
ループ:{//循环开始
    ナレーション:[[第一層]]
    選択:[[功能一:]][[功能二:]][[功能三:]][[關閉]]
    分岐:(0){//對應功能一
        代入x:(0)//子循環標記初始化
        ループ:{//子循环开始

            ナレーション:[[第二層]]
            選択:[[功能一A:]][[功能一B:]][[功能一C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能一A:]]
            }
            分岐:(1){
                ナレーション:[[功能一B:]]
            }
            分岐:(2){
                ナレーション:[[功能一C:]]
            }
            分岐:(3){
                代入x:(1)//子循環退出標記
            }
            調査:(x)==(1)//校驗退出標記
            ブロック脱出:(真)//退出標記符合時

        }//子循环结束
    }
    分岐:(1){//對應功能二
        代入x:(0)//子循環標記初始化
        ループ:{//子循环开始

            ナレーション:[[第二層]]
            選択:[[功能二A:]][[功能二B:]][[功能二C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能二A:]]
            }
            分岐:(1){
                ナレーション:[[功能二B:]]
            }
            分岐:(2){
                ナレーション:[[功能二C:]]
            }
            分岐:(3){
                代入x:(1)//子循環退出標記
            }
            調査:(x)==(1)
            ブロック脱出:(真)

        }//子循环结束
    }
    分岐:(2){//對應功能三
        代入x:(0)//子循環標記初始化
        ループ:{
//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能三A:]][[功能三B:]][[功能三C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能三A:]]
            }
            分岐:(1){
                ナレーション:[[功能三B:]]
            }
            分岐:(2){
                ナレーション:[[功能三C:]]
            }
            分岐:(3){
                代入x:(1)//子循環退出標記
            }
            調査:(x)==(1)
            ブロック脱出:(真)

        }//子循环结束
    }
    分岐:(3){//關閉
        代入z:(1)//循環退出標記
    }
    調査:(z)==(1)
    ブロック脱出:(真)

}//循环结束

需要在每層選擇之上加入對應的循環標記應即可大大提高它的實用性……
不過……這樣做的話,有的時候如果層次太多或者菜單內容過多,很有肯能造成計算符的使用混亂

實際上通無論多複雜的選擇菜單循環標記只需要一個變量就可以完全全部控制了!
那應該如何做呢?
代入z:(0)//循環標記初始化
ループ:{//循环开始
    ナレーション:[[第一層]]
    選択:[[功能一:]][[功能二:]][[功能三:]][[關閉]]
    分岐:(0){//對應功能一
        代入z:(0)//子循環標記初始化
        ループ:{//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能一A:]][[功能一B:]][[功能一C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能一A:]]
            }
            分岐:(1){
                ナレーション:[[功能一B:]]
            }
            分岐:(2){
                ナレーション:[[功能一C:]]
            }
            分岐:(3){
                代入z:(111)//子循環退出標記
            }
            調査:(z)==(111)
            ブロック脱出:(真)
        }//子循环结束
    }
    分岐:(1){//對應功能二
        代入z:(0)//子循環標記初始化
        ループ:{//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能二A:]][[功能二B:]][[功能二C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能二A:]]
            }
            分岐:(1){
                ナレーション:[[功能二B:]]
            }
            分岐:(2){
                ナレーション:[[功能二C:]]
            }
            分岐:(3){
                代入z:(111)//子循環退出標記
            }
            調査:(z)==(111)
            ブロック脱出:(真)
        }//子循环结束
        
    }
    分岐:(2){//對應功能三
        代入z:(0)//子循環標記初始化
        ループ:{//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能三A:]][[功能三B:]][[功能三C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能三A:]]
            }
            分岐:(1){
                ナレーション:[[功能三B:]]
            }
            分岐:(2){
                ナレーション:[[功能三C:]]
            }
            分岐:(3){
                代入z:(111)//子循環退出標記
            }
            調査:(z)==(111)
            ブロック脱出:(真)
        }//子循环结束        
    }
    分岐:(3){//關閉
        代入z:(999)//循環退出標記
    }
    調査:(z)>=(999)
    ブロック脱出:(真)
}//循环结束

  
於“”每次只進行不累加的變更,因此無需擔心出錯等問題!
111來做子循環標記,999來做外層標記。即可實現單字符控制的多層循環。
這樣一來無論是多少層次的選擇菜單,都可以輕鬆應對了。

此一個較為實用的選擇菜單的選擇菜單就完成了。如果你覺得這樣還是容器出錯,用事件標記來做循環標記,似乎也是個不錯的主意。
更新:(イベントフラグ::銀鳥·示範用·循環標記一)(成立)
ループ:{//循环开始
    ナレーション:[[第一層]]
    選択:[[功能一:]][[功能二:]][[功能三:]][[關閉]]
    分岐:(0){//對應功能一
       更新:(イベントフラグ::銀鳥·示範用·循環標記二)(成立)
        ループ:{//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能一A:]][[功能一B:]][[功能一C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能一A:]]
            }
            分岐:(1){
                ナレーション:[[功能一B:]]
            }
            分岐:(2){
                ナレーション:[[功能一C:]]
            }
            分岐:(3){
                更新:(イベントフラグ::銀鳥·示範用·循環標記二)(不成立)
            }
            調査:(イベントフラグ::銀鳥·示範用·循環標記二)==(不成立)
            ブロック脱出:(真)
        }//子循环结束
    }
    分岐:(1){//對應功能二
        更新:(イベントフラグ::銀鳥·示範用·循環標記二)(成立)
        ループ:{//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能二A:]][[功能二B:]][[功能二C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能二A:]]
            }
            分岐:(1){
                ナレーション:[[功能二B:]]
            }
            分岐:(2){
                ナレーション:[[功能二C:]]
            }
            分岐:(3){
                更新:(イベントフラグ::銀鳥·示範用·循環標記二)(不成立)
            }
            調査:(イベントフラグ::銀鳥·示範用·循環標記二)==(不成立)
            ブロック脱出:(真)
        }//子循环结束
    }
    分岐:(2){//對應功能三
       更新:(イベントフラグ::銀鳥·示範用·循環標記二)(成立)
        ループ:{//子循环开始
            ナレーション:[[第二層]]
            選択:[[功能三A:]][[功能三B:]][[功能三C:]][[取消]]
            分岐:(0){
                ナレーション:[[功能三A:]]
            }
            分岐:(1){
                ナレーション:[[功能三B:]]
            }
            分岐:(2){
                ナレーション:[[功能三C:]]
            }
            分岐:(3){
                更新:(イベントフラグ::銀鳥·示範用·循環標記二)(不成立)
            }
            調査:(イベントフラグ::銀鳥·示範用·循環標記二)==(不成立)
            ブロック脱出:(真)
        }//子循环结束
    }
    分岐:(3){//關閉
        更新:(イベントフラグ::銀鳥·示範用·循環標記一)(不成立)
    }
    調査:(イベントフラグ::銀鳥·示範用·循環標記一)==(不成立)
    ブロック脱出:(真)
}//循环结束

  

※※※※※※範例三(演化範例)※※※※※※

果你已近掌握以上的知識,那就讓我們繼續吧……
接下去我將會教你怎么將“场合别”、“文字列”、“事件標誌”加入進來製作出一個功能強大的選擇菜單吧!
·製作思路:
  • 在不減少功能的前提下,利用“场合别”與“文字列”將原版的多層菜單改變為單層菜單
  • 添加專屬的切換功能,方便在個個頁面中切換。
  • 利用事件標誌在每次執行開始以及退出時候記錄瀏覽的頁面。

·功能概要:
1.腳本運行之初首先判斷三個“事件標誌”以讀取玩家上次所瀏覽的界面,并將結果保存到""即所在界面。
2.在使用者執行相應功能時,預先利用“场合别”對所屬界面進行判斷(即值),并疏導到相應功能。
    藍色表示的部分皆為功能一的部分 ,值1
    紫色表示的部分皆為功能二的部分,值2
    紅色表示的部分皆為功能三的部分 ,值3
3.退出時讀取所在界面(即值),并打開相對應的“事件標誌”。
·代碼:
代入z:(1)//循環標記初始化
//——讀取上次退出時的狀態開始——
調査:(イベントフラグ::a==0)==(成立)
分岐:(真){
    代入:(1)
    更新:(イベントフラグ::a==0)(不成立)
}

調査:(イベントフラグ::a==1)==(成立)
分岐:(真){
    代入:(2)
    更新:(イベントフラグ::a==1)(不成立)
}

調査:(イベントフラグ::a==2)==(成立)
分岐:(真){
    代入:(3)
    更新:(イベントフラグ::a==2)(不成立)
}
//——讀取完畢——
ループ:{//循环开始
    場合別:(){//——標題文字設定開始——
        場合分岐:(1){
            ナレーション:[[功能一:]]
            文字列設定:(文字列A)[[功能一A:]]
            文字列設定:(文字列B)[[功能一B:]]
            文字列設定:(文字列C)[[功能一C:]]
        }

        場合分岐:(2){
            ナレーション:[[功能二:]]
            文字列設定:(文字列A)[[功能二A:]]
            文字列設定:(文字列B)[[功能二B:]]
            文字列設定:(文字列C)[[功能二C:]]
        }

        場合分岐:(3){
            ナレーション:[[功能三:]]
            文字列設定:(文字列A)[[功能三A:]]
            文字列設定:(文字列B)[[功能三B:]]
            文字列設定:(文字列C)[[功能三C:]]
        }

    }//——設定完畢——
    選択:[[<文字列A>]][[<文字列B>]][[<文字列C>]][[切換]][[關閉]]
    分岐:(0){
        場合別:(z){
            場合分岐:(1){
                ナレーション:[[功能一A:]]
            }

            場合分岐:(2){
                ナレーション:[[功能二A:]]
            }

            場合分岐:(3){
                ナレーション:[[功能三A:]]
            }

        }
    }
    分岐:(1){
        場合別:(z){
            場合分岐:(1){
                ナレーション:[[功能一B:]]
            }

            場合分岐:(2){
                ナレーション:[[功能二B:]]
            }
            場合分岐:(3){
                ナレーション:[[功能三B:]]
            }

        }
    }
    分岐:(2){
        場合別:(z){
            場合分岐:(1){
                ナレーション:[[功能一C:]]
            }

            場合分岐:(2){
                ナレーション:[[功能二C:]]
            }
            場合分岐:(3){
                ナレーション:[[功能三C:]]
            }

        }
    }
    分岐:(3){//切換界面
        場合別:(z){
            場合分岐:(1){
                選択:[[功能二]][[功能三]][[取消]]
                分岐:(0){
                    代入z:(2)
                }
                分岐:(1){
                    代入z:(3)
                }
            }
            場合分岐:(2){
                選択:[[功能一]][[功能三]][[取消]]
                分岐:(0){
                    代入z:(1)
                }
                分岐:(1){
                    代入z:(3)
                }
            }

            場合分岐:(3){
                選択:[[功能一]][[功能二]][[取消]]
                分岐:(0){
                    代入z:(1)
                }
                分岐:(1){
                    代入z:(2)
                }
            }

        }
    }
    分岐:(4){
        場合別:(z){//——保存退出時的狀態——
            場合分岐:(1){
                更新:(イベントフラグ::a==0)(成立)
            }

            場合分岐:(2){
                更新:(イベントフラグ::a==1)(成立)
            }
            場合分岐:(3){
                更新:(イベントフラグ::a==2)(成立)

            }
        }//——保存完畢——
        代入z:(999)//循環退出標記
    }
    調査:(z)>=(999)
    ブロック脱出:(真)
}//循环结束

[ 本帖最后由 two001 于 2009-6-1 20:58 编辑 ]

使用道具 举报

~§出羽の妖狐§~
游侠光荣游戏工作组【问答】
巫女 剑美玉・百合 修罗

活跃勋章荣誉勋章白金会员勋章

帖子
12053
精华
1
积分
8059
金钱
1695
荣誉
181
人气
223
评议
0

7#
发表于 2009-5-23 19:21:26 |只看该作者
哇,银银的沙发么了,板凳么了,地板么了,地下室也么了 .... ....


睡马路桠子支持之 .... .... [哇哈哈]

FORZA MILAN !!!

使用道具 举报

帖子
3975
精华
0
积分
2039
金钱
4336
荣誉
5
人气
0
评议
0
8#
发表于 2009-5-23 19:43:55 |只看该作者
很好

支持銀的講座

使用道具 举报

GTA☆MafiaメGodfather
Crysis☆至尊無上の沙漠之鷹

白金会员勋章活跃勋章荣誉勋章高级荣誉勋章

帖子
51593
精华
0
积分
32083
金钱
1310
荣誉
624
人气
465
评议
0
9#
发表于 2009-5-23 19:45:34 |只看该作者
這個很實用,支持一下,很經典。

使用道具 举报

游侠剑阁工作组【制作】

剑阁工作组资深组员勋章

帖子
2695
精华
4
积分
3816
金钱
10551
荣誉
166
人气
77
评议
0

10#
发表于 2009-5-23 21:03:05 |只看该作者
银鸟老大为我解释下下面这个吧,看过很多高人的代码里会这么写,想知道下
場合別 的代入值是怎么确定的,数值的大小有要求吗?还是可以随意的代入,随即按自己的要求确定出一个分歧的范围?

代入a:(10)
場合別:(a){
         場合分岐:(1){
         }
         場合分岐:(その他){
        }
}

能帮忙为我这样的初级者解答一下吗?

使用道具 举报

游侠剑阁工作组【制作】

帖子
789
精华
2
积分
1418
金钱
5826
荣誉
62
人气
32
评议
0

11#
发表于 2009-5-24 04:06:11 |只看该作者
首先,顶一下银鸟兄的教学贴,
嗯,其次,有个地方不太理解,那个“メッセージ閉じる://關閉之前顯示的對話。”起什么作用呢?对话在事件结束后,不是会自己关闭么?
最后,帮zhuoludian 兄解释一下“場合別”,说的不对的地方,请银鸟兄指正:

场合别的a的代入值,没有任何限制,可以随意代入,只要在下面的場合分岐中写上相应的值,就会执行对应的部分代码,而“その他”表示如果a的代入值不是以上的情况,就执行这段代码,举例,如果有段代码需要在1、4、9月发生不同的事件、其他月份做另外的处理,可以这样写:
  1. 代入a:(状況::月)
  2. 場合別:(a){
  3.     場合分岐:(1){
  4.         //这段代码处理1月份的情况
  5.     }
  6.     場合分岐:(4){
  7.         //这段代码处理4月份的情况
  8.     }
  9.     場合分岐:(9){
  10.         //这段代码处理9月份的情况
  11.     }
  12.     場合分岐:(その他){
  13.         //这段代码处理2、3、5、6、7、8、10、11、12月份的情况
  14.     }
  15. }
复制代码

使用道具 举报

游侠光荣游戏工作组【剧本】
斋藤家当主 军师
冥界引路人·馬爾基諾

帖子
1156
精华
0
积分
1014
金钱
7125
荣誉
43
人气
55
评议
0

12#
发表于 2009-5-24 07:29:22 |只看该作者
回复 #10 zhuoludian 的帖子
下一講我就會說到場合別在 “選擇菜單中的使用”
感興趣的話你可以先去看下……
http://game.ali213.net/thread-2710583-1-1.html

場合別的標記其實使用并不是很嚴格,像是人物屬性,計算數值、發生標記(發生據點、發生人物等)都可以!
用一句某人很喜歡說的話就是:“萬物皆可場合別……”
舉個例子:
            場合別:(発生拠点){
                場合分岐:(拠点::軒猿の里){
                    AND調査:{
                        調査:(イベントフラグ::軒猿の里)!=(成立)
                        OR調査:{
                            調査:(カード::傀儡の術.所持フラグ)==(0)
                            調査:(カード::幻惑の術.所持フラグ)==(0)
                            調査:(カード::暗示.所持フラグ)==(0)
                        }
                    }
                    分岐:(真){
                        更新:(イベントフラグ::軒猿の里)(成立)
                    }
                }
                場合分岐:(拠点::山くぐりの里){
                    AND調査:{
                        調査:(イベントフラグ::山くぐりの里)!=(成立)
                        OR調査:{
                            調査:(カード::鬼脚の術.所持フラグ)==(0)
                            調査:(カード::偽情報.所持フラグ)==(0)
                            調査:(カード::木の葉隠れの術.所持フラグ)==(0)
                        }
                    }
                    分岐:(真){
                        更新:(イベントフラグ::山くぐりの里)(成立)
                    }
                }
                //這裡不詳細列出了……
            }




回复 #11 rockymei2k 的帖子
メッセージ閉じる://的作用是手工關閉會話框,在製作長篇劇情的時候,許多時候上一個場景的會話內容如果不及時清楚的話就會對下一個場景將要出現的效果造成不必要的影響。
簡單的舉個例子!
                BGM変更:(BGMなし)
                ナレーション:[[片刻之後]]
                ウェイト:(2.0)
                ひとりごと:[[走吧……去,將一切的阻攔者毫不留情的殺死!]]
                会話:(人物A,主人公)[[是……]]
                メッセージ閉じる:
                SEスタート:(忍者報告)//人物A離開的音效
                ウェイト:(1.0)
                ひとりごと:[[……\n(無論結果如何,這都是最後一戰了!終於到了要做一個了結的時刻了……)]]
               メッセージ閉じる:
                画面効果:(円ワイプアウト)//黑屏
                BGM変更:(野戦)//放音樂
                スチル消去:(フェード)//消除黑屏
                スチル表示:(イベントスチル,エンディング剣豪2,無効,無効,円形ワイプ)//平安界背景
                ナレーション:[[『平安界』]]
                ナレーション:[[「內城」]]

第一個“メッセージ閉じる:”作用:模擬出當“人物A”回答完主角的命令后離去的效果,因此如果出現音效忍者報告時,“人物A”的回答任然顯示在哪裡的話…顯然不夠合適。
第二個“メッセージ閉じる:”作用:這裡的作用是在切換效果開始之前就先將會話內容消除。不要等到留到切換背景時一起消除。

[ 本帖最后由 two001 于 2009-5-24 10:20 编辑 ]

使用道具 举报

帖子
3975
精华
0
积分
2039
金钱
4336
荣誉
5
人气
0
评议
0
13#
发表于 2009-5-24 07:42:25 |只看该作者
期待下一講

使用道具 举报

游侠剑阁工作组【制作】

帖子
789
精华
2
积分
1418
金钱
5826
荣誉
62
人气
32
评议
0

14#
发表于 2009-5-24 10:53:55 |只看该作者

回复 #12 two001 的帖子

嗯,知道了,拜谢银鸟兄,期待下一讲!

使用道具 举报

游侠剑阁工作组【制作】

剑阁工作组资深组员勋章

帖子
2695
精华
4
积分
3816
金钱
10551
荣誉
166
人气
77
评议
0

15#
发表于 2009-5-24 19:27:22 |只看该作者
萬物皆可場合別……
真伟大,我喜欢!
强力支持!

使用道具 举报

帖子
64
精华
0
积分
32
金钱
370
荣誉
0
人气
0
评议
0
16#
发表于 2009-5-24 19:54:30 |只看该作者
感谢感谢 从零学起中~~~~~~~~~~~~~~~~

使用道具 举报

游侠剑阁工作组【制作】

剑阁工作组资深组员勋章

帖子
436
精华
2
积分
920
金钱
4225
荣誉
30
人气
23
评议
0
17#
发表于 2009-5-25 17:11:26 |只看该作者

回复 #6 two001 的帖子

突然想到了,干脆我接你的容器教程,把它补完吧。详细说下容器的检索、指针和存取:)

使用道具 举报

游侠光荣游戏工作组【剧本】
斋藤家当主 军师
冥界引路人·馬爾基諾

帖子
1156
精华
0
积分
1014
金钱
7125
荣誉
43
人气
55
评议
0

18#
发表于 2009-5-29 17:41:27 |只看该作者
5.29跟新
接上次講的內容,並且稍微介紹了下場合別!

使用道具 举报

游侠剑阁工作组【制作】

剑阁工作组资深组员勋章

帖子
2695
精华
4
积分
3816
金钱
10551
荣誉
166
人气
77
评议
0

19#
发表于 2009-5-29 19:24:59 |只看该作者
叫好又叫座,普及科学教化世人的路途任重而道远。

等候下一周的新课程。

[ 本帖最后由 zhuoludian 于 2009-5-29 21:09 编辑 ]

使用道具 举报

☆才华横溢之极限☆
游侠元老版主
游侠剑阁工作组【翻译】
GBC☆口袋妖怪 梦幻
魏 吏部尚书

★★★★★

元老版主勋章版主勋章资深版主勋章大头像勋章《三国志12》汉化贡献勋章特色头衔勋章勤劳之证剑阁工作组资深组员勋章

帖子
4634
精华
2
积分
4178
金钱
16096
荣誉
144
人气
202
评议
2

20#
发表于 2009-5-29 19:31:37 |只看该作者
    支持银老师 !

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2024-4-24 03:27 , Processed in 0.343749 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到