summaryrefslogtreecommitdiffstats
path: root/docs/pmore_movie.txt
blob: 886f9d5bffa2ca16a606a0b2e640c4f86075b211 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707

=============================================================================

        pmore 2007 互動式動畫系統技術手冊

        VERSION 1.6
        最後更新: 2009/05/24 13:00

        本文為推廣用說明文件 歡迎自由轉錄
        不需另行通知作者

=============================================================================

0. 序

        2005 年的夏天,一個劃時代的 BBS 文章瀏覽程式 pmore 誕生了。
        它所內建的簡易文字動畫播放功能,更是讓在 BBS 上觀看文字動畫
        成為全新的體驗。  雖然原始的 pmore 動畫只是單純的時間軸系統,
        但在眾家高手的巧思下也有不少實驗性互動作品的出現 (見 PTT
        BBSMovie 板);創意十足,只可惜受限於舊系統,操作上總是不太方便,
        問題也很多。

        2007 年冬,根據這兩年來所收集到的成果與意見, pmore 的動畫系統
        進行了一連串的改進與新增,加進了大量的播放控制與互動能力。
        迷宮、RPG、太鼓達人、多重結局動畫,這些都不再是夢想。


        這篇文件是寫給有志利用新系統「製作」動畫的,
        所以裡面會有不少技術性的東西;請多多諒解。
        如果你只是喜歡「看」動畫,後面講的東西不需要懂、直接左鍵跳出
        也是完全沒問題的!


        本文定位是技術手冊而非動畫入門,假設你已對文字形動畫有一定程度的
        理解、最好自己作個簡單的作品、也大概見過 pmore 傳統動畫。
        如果你是剛接觸 ASCII Art 的新手,建議你先觀摩一下其它高手前輩的作品
        (ex, AsciiArt, BBSMovie) 可能會更容易理解這篇在談的東西。

        PS: 由於 2007 新增的內容實在太多,這次的技術手冊本身不使用動畫格式寫
        不過有另一篇「pmore 2007 互動功能簡介」
        本身就是用新互動語法寫成的介紹,可以方便你體驗互動式的樂趣。

=============================================================================

1. 一般動畫

        除了加入少量控制指令,傳統動畫部份沒有什麼大改變,
        不過為了方便後面說明,還是重新簡單介紹一下吧:

        先來定義一些名詞

        Frame                畫面

        一個動畫,其實就是一連串的畫面,在連續的時間內交換顯示。
        BBS 的文字動畫本質上也是如此。 我們把每次顯示、使用者所看
        到的單頁稱之為一個畫面 (英文為 Frame)。
        這份文件有時也會用「頁」來描述。

        Escape Code         控制碼

        由於我們的動畫是用純文字寫成的,所以要一些特別的符號
        來指示系統該怎麼處理播放時間的變化,或是畫面的開始。
        這種東西被通稱為控制碼。  pmore 的控制碼是寫成 ^L
        注意這是分別打入「^」 (Shift-6) 與大寫「L」兩個符號的結果。
        在 BBS 的編輯器中壓著 Ctrl 再按 L 只會重新顯示,不會
        跑出這個符號。

        註: 在 PTT 新版的編輯器中,當你正確的打入 ^L 後該行
        會變色。 如果沒有變色,代表你的輸入方式有誤。

        註: 對於許多人問「按 Ctrl 再按 L 沒反應」這點深感抱歉,實際上
        pmore 真的接受 Ctrl-L 為控制碼,只是大部份的 BBS 編輯器按
        Ctrl-L 都是重繪螢幕指令而非輸入 Ctrl-L,所以現在都以輸入
        Shift-6 (^) 再按 L 比較方便。

        Time (Duration)     播放時間

        每張畫面從出現到消失(被下張取代)的時間就是所謂的播放時間。
        在 pmore 的系統中,這個時間是有下限的: 最短不能少於 0.1 秒。
        這個數字是參考到網路延遲、系統效能、還有使用者反應時間所
        定出來的。

        Timeline            時間軸

        整個動畫在播放時的時間與順序變化可稱之為時間軸系統。
        傳統 BBS 動畫等於沒有時間軸,完全靠使用者手動翻頁。
        pmore 動畫的時間軸是靠指令設定的。

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

1.1 畫面開始

        ^L

        FRAME START     畫面開始

        pmore 動畫的每張畫面,都是從以 ^L 開頭的一行開始的。
        這行不會顯示在螢幕上,而且螢幕只會顯示到下個 ^L 出現的那行。

        所以你可以不用在意每張畫面有沒有對齊 22 行,
        也可以一路畫到第 23 行。

        另外每個 ^L 後面可以帶一個時間參數,單位為秒。
        若沒寫時間,則此畫面的播放時間與上一張相同。
        最開始預設的時間是 1 秒。

        範例:
                ^L      (播放 1.0 秒)
                ^L0.5   (播放 0.5 秒)
                ^L      (與上張同 - 播放 0.5 秒)
                ^L10    (播放 10  秒)
                ^L0     (少於最短播放時間的一律會變為 0.1 秒)

        註: 每個 ^L 一定要對齊該行開頭。
            另外,由於系統效能考量,第一個 ^L 一定要出現在文章開始顯示的
            第一頁範圍內,否則不會被視為動畫檔。
            在 BBS 編輯器中觀看時,它的前面應該沒有任何空白,
            也沒有 ANSI 控制碼 (某些特殊碼例外)
            詳情見參見 1.5 隱藏控制碼

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

1.2 基本播放控制: 暫停  (2007 新增)

        ^LP

        PAUSE           暫停播放

        以往想讓使用者看仔細一點的畫面,
        常常有人寫成  ^L99999
        然後畫面指示「看完請看任意鍵後再按 p (繼續播放)」
        秒數寫少看不清楚,寫太多操作又複雜

        ^LP 就是為了解決這個問題而誕生的。
        ^LP 會讓該頁提示使用者按下任意鍵後再繼續。

        範例:
                ^LP

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

1.3 基本播放控制: 停止  (2007 新增)

        ^LE

        END             結束播放

        舊版 pmore 動畫結束後會一路跳到文章最底下
        很難在文章結尾放些說明文字或感言
        所以也有人常在想結束的地方寫 ^L99999

        現在不用這麼麻煩了,
        ^LE 會直接在該頁停下來。

        範例:
                ^LE

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

1.4 時間同步

        ^LS

        SYNC            同步播放

        這是為 KTV 系列動畫而生的指令。 此類需要與現實世界對時
        (電腦一面播歌,一面放動畫) 的動畫會受到網路的影響使得
        動畫產生延遲,播久一點後畫面跟聲音就對不起來了。

        ^LS 會使時間計算忽略網路延遲,不過實際播放效果仍可能
        受到網路影響,端看使用者的網路連線品質有多好。

        範例:

                ^LS0.8          (此頁會不計網路延遲的播放 0.8 秒)

        註:     非同步播放的計時是由「本張畫面顯示完」開始計時,每張獨立;
                同步播放的計時則是由「上張畫面顯示完」開始,每張相關。


                ^L0.5 跟 ^LS0.5 的差別用圖來解說: (若延遲 0.1s)

        時間軸: 0       0.5   0.6      1.0   1.1   1.2
                |--------|-----|--------|-----|-----|------->
     ^L 非同步: |<-0.5s->|<0.1>|<----0.5----->|<0.1>|<--0.5-->
                   畫面1            畫面2             畫面3
     ^LS  同步: |<-0.5s->|<0.1>|<--0.4->|<0.1>|<---0.4--->
                  畫面1          畫面2          畫面3

                由上圖可得知, ^LS 可以讓設計者直接對時,不需要考慮延遲時間。

        如果你還是不懂 ^LS 在幹麼,沒關係...
        ^LS 跟互動式無關,使用上也不用特別設定
        只要記得

        「如果你的動畫會要求使用者開別的程式同時運作,
          就把第一個 ^L 改成 ^LS 」

        例如叫使用者開著 mp3 在旁邊播歌之類的
        基本上 ^LS 就只有這種時候才好用。

        另外要注意是,正確的用法是只在同步開始點使用 ^LS。
        (一般動畫只要在開始的第一個使用就夠了) 後面應該使用 ^L
        而非 ^LS。這是因為一連串的 ^LS 就跟沒有用 ^LS 是一樣的。

        也就是:
                ^LS0.5                  (同步開始)
                ^L0.1                   (這裡不該用 ^LS)
                ^L0.3
                ...

        如果你寫成
                ^LS0.1
                ^LS0.2
                ^LS
        那多半是錯誤的,這跟完全沒有 ^LS 的效果一致。
-----------------------------------------------------------------------------

1.5 隱藏控制碼          (2007 新增)

        *[30;40m^L

        INVISIBLE ESCAPE 隱藏控制碼

        做好的動畫檔出現一堆 ^L 顯示在螢幕上總是討厭的事。
        想把它放在第二頁又不行,因為只有第一頁有出現 ^L 才能播放。

        pmore 2007 有稍微修正這個問題,不再顯示第一頁的控制碼;
        但若想轉到其它 BBS 時,又會冒出一堆 ^L

        於是,pmore 2007 支援前有 *[30;40m ANSI 碼的 ^L,
        (30;40 為黑底黑字)。

        控制碼後面有沒有 *[m 不影響,不過多數人為了把顏色設回來
        應該都會加吧。

        範例:
                *[30;40m^L2.5*[m
                *[30;40m^LP

                (上面的 * 都是在 BBS 打入 ESC 控制碼的特殊字元)

        另外為了與傳統 24 行動畫對齊開頭,最前面還可以再加個 ==

        範例:
                ==*[30;40m^L2.5
                ==*[30;40m^LP*[m


        註: 為了效能考量,目前只開放與上面一字不差的寫法。
        也就是說, 下列寫法都是錯誤的:
                *[0;30;40m^L            (前面多了 0;)
                *[30;40m ^L             (中間多了空白)
                *[37;47m^L              (37 47 不行)
                *[m*[30;40m^L           (前面多了 *[m)
                --*[30;40m^L            (目前只接受 == 不接受 --)
                =*[30;40m^L             (少一個 = 也不行)
                ==^L                    (很抱歉目前也不接受這種)

        在實裝 pmore 2007 的系統上,編輯器通常會幫 ^L 行變色。
        如果你的 ^L 沒有變色,請檢查是不是多了還少了什麼。

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

1.6 與傳統動畫相容      (2007 新增)

        ^LO=

        OLDMODE         傳統動畫

        pmore 動畫系統目前仍然只有使用 pmore 的 BBS 站支援,
        也就是說當你選擇了這種動畫後,也暗示著動畫的不易流通。

        為了解決這種遺憾,pmore 加入了隱藏控制碼 (見前章),
        這樣只要你在傳統動畫的23行分隔線處加入 pmore 控制碼,
        就可得到「有 pmore 會自動播放、非 pmore 仍可手動翻頁」
        的結果。

        不幸的是,除非你每頁都加,不然 pmore 會直接跳到檔尾 -
        因為它找不到後面的 ^L。

        ^LO= 就是解決這個問題的。 (是英文的大寫 O 而非數字 0)
        加了這行後等於幫使用者按了小寫 p (播放動畫),而且可指定時間。
        適用於不想全篇改寫的舊動畫。

        範例:
                ^LO=0.5
                以傳統模式播放,速度為每張 0.5 秒

        與隱藏控制碼可混用,如:

                ==*[30;40m^LO=0.5*[m

        假設你已經作好了一個傳統的 24 行動畫,
        只要在第一行加入上面的碼, (後面全部一行都不用改!)
        它就會在 pmore 系統上有自動播放的效果
        (詢問使用者要不要播放、且會自動對齊第一行後再播放)
        在非 pmore 的外站上則與一般傳統動畫無異。

=============================================================================

2. 互動式動畫

        pmore 2007 最大的特色就是加入了大量互動的指令,
        使得遊戲、多重結局的動畫都不再是夢想。
        某種程度而言,它也可以當成一個迷你的 BBS 程式發展平台。

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

2.1 動畫編號方式

        要談互動式的動畫製作前,有些觀念要先理解。
        一個互動式的動畫不外乎兩大重點:

          1. 取得使用者的輸入
          2. 根據輸入作出不同反應。

        取得輸入會在後面的章節介紹,現在先來談談怎樣作出「反應」。

        目前的動畫系統,唯一的反應其實就是換畫面,也可說是「跳頁」。
        例如使用者按 1 就跳第 1 頁,按 2 就跳第二頁。

        在 pmore 要換畫面,先要知道每一張畫面是怎麼編號的,還有怎麼指定
        跳頁的目標。

        前面提過, pmore 動畫的每一張畫面都是從 ^L 開始的;

        ^L
                畫面一
        ^L
                畫面二
        ^L
                畫面三

        從檔案開始,第一個出現的 ^L 編號為 1, 可稱之為「畫面1」 (frame 1)
        要指定一個畫面,在 pmore 的語法簡寫中稱之為「cmd」 (command)
        一個 cmd 實際是由兩個部份構成的:

                TypeOffset

        Type 可以想成「單位」,Offset 可以想成「編號」。

        Type (單位) 可直接指定畫面(frame),或是頁數(page)、行數(line)
        、別名 (named,詳見 3.4 畫面命名)。
        每種單位的編號都是從 1 開始計算。
        Type 的語法就是各單位的英文縮寫: f, p, l。 (named 格式 為 :xxx:)

        Offset 通常是一個數字。有正負號時代表它是「相對」的單位,
        無正負號時則是「絕對」的單位。

        有點複雜嗎? 直接來看例子吧:

                f1      => frame 1   (第 1 張畫面)
                p+2     => page +2   (往後 2 頁)
                l-100   => line -100 (往前 100 行)
                :named: => named     (尋找叫作 named 的畫面, 詳見 3.4)

        註: 由於播放時在跳頁後每頁還是會從 ^L 開始顯示 (新頁在 ^L 出現之前的
        內容不會顯示),加上 page(頁)會受不同連線程式視窗大小的影響,所以一般
        還是建議以 frame 或 name 為單位。

        常見錯誤:
                5       => 沒 type, 系統不知你是要指定哪種格式
                f0      => 0 沒有東西,編號由 1 開始。

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

2.2 跳頁

        ^LGcmd

        GOTO            跳頁

        最自然的練習,就是由直接跳頁開始了。
        跳頁(畫面)的指令叫 ^LG, 後面接個 cmd (參見 2.1 動畫編號方式)
        實際效果就是直接跳到該頁後繼續播放。

        常見的應用是無限重播的區段。
        注意有跳頁指令時該頁本身不會顯示出來。

        範例:
                ^LGf1           (跳到第一張畫面)
                ^LGf+3          (往後跳三張畫面)

        實例:
                ^L0.5
                        畫面一
                ^L
                        畫面二
                ^LGf-2
                        畫面三

                上面的指令會造成畫面不停的加互顯示「畫面一」「畫面二」
                但「畫面三」字樣不會出現。

        註:     跳頁另外有些限制:
                - 無法跳到第一張畫面之前 (例: 在第 2 張畫面打 ^LGf-2 無效)
                - 無法跳到自己本身       (例: 在第 2 張畫面打 ^LGf2  無效)
                - 跳頁本身會花費一張畫面的最短播放時間 (目前為 0.1 秒)
                - 跳頁失敗時會視情況變成改顯示下張畫面或是停止播放
                - 跳頁失敗時請檢查 cmd 的 type 是否忘了寫,如 ^LG2

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

2.3 互動選項

        ^L#key,cmd,text#

        OPTION          互動選項

        互動式選項 ^L# 可說是是 pmore 2007 動畫系統最主要的核心了。
        它讓你的動畫可依使用者的輸入(key)進行不同的反應。

        ^L# 的基本形可以拿來作 RPG-Like 的互動遊戲。

        初看有點複雜,其實只要掌握兩個原則就好了:

        1. 每一個選項用 # 包起來,也就是 ^L#選項1#選項2#選項3#
        2. 每個選項內的設定用逗號 (,) 分開,也就是 #設定1,設定2,設定3#

        那麼,再來細看語法吧:
        ^L#key,cmd,text#

        key:    使用者可按下的快捷鍵 (只能單鍵,如 1 2 3 a b A B ...)
        cmd:    被選取後要執行的動作 (就是跳頁,見 2.1 動畫編號方式)
        text:   顯示在螢幕上的說明   (可省略)

        範例:
                ^L#a,f1,首頁#
                按下 a 時會跳到第一張畫面

                ^L#b,f-1,前面#c,f+2,結束#
                按下 b 會跳往前一張畫面,按 c 則會往後兩張畫面

        標準形式在螢幕的下方會照你的順序顯示一排選項列。
        這些選項可用方向鍵移動選取,也可用你指定的 key 當熱鍵按。

        key, cmd, text 這三個要素,基本上只有 cmd 是必需的。
        (當然, key 跟 cmd 中間的分隔逗號也不能少)

        key 省略時,系統會由前一個 key 來產生下個 key。

                ^L#a,f1,這是a#,f2,這是b#1,f1,這是1#,f2,這是2#
                這例子中,省略的兩個分別會變成 b 跟 2。

        text 省略時,系統不會出現選項列。請記得在你的動畫中提示
        使用者現在該作什麼事。

                ^L#a,f1#,f2#,f3#,f4#
                按 a 跳第一張, b 跳 2, c 跳 3, d 跳 4
                而且沒有選項列

        註: 選項列會不會出現實際上是看「第一個選項的 text」有沒有被省略。
            也就是說,

            ^L#a,f1#,f2,看不到#    <- 這行一樣沒選項列。
            ^L#a,f1,有文字#,f2#    <- 這個有選項列,第 2 個選項會顯示熱鍵

        註: ^L## 結尾要有對應的 # 包起來才行!
            常見錯誤:

            ^L#a,f1,選項一#b,f2,選項二 <- 選項二無作用

        註: ^L# 在執行時會依順序判斷按鍵是否符合條件。也就是說,
            若有熱鍵重複出現則是前面的會被執行。 適當排列並與特殊按鍵 (見 3.1)
            如 @a 合用則可作出「按 XX 鍵執行 YY,其它所有鍵都執行 ZZ」的效果。

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

2.4 引用 (*** 2009 新增 ***)

        ^LIcmd_from,cmd_to

        INCLUDE         引用    (or INTERRUPT)

        有些動畫會想重複使用某些片段、並且在片段結束時跳回原處;
        這個指令就是為此設計的。
        cmd_from 與 cmd_to 的語法請參見 2.1 動畫編號方式。
        實際執行效果是: 
          (1) 假設這個指令出現在第 n 張 frame
          (2) 第 n 張不會顯示,並跳到 cmd_from 處播放 (效果同 GOTO)
          (3) 一直播放到 cmd_to 時(該張不顯示),會再跳回 n+1 處播放。

        注意目前的「引用」只有一層,若在 ^LI 執行中再使用 ^LI ,
        則只有最後一次出現的 ^LI 能有效跳回原處。

        範例:
                ^LI:my_start:,:my_end: (引用播放 :mystart: 到 :myend: 的部份)

                ^LIf100,f200       (引用播放從第100張到第200張的內容後再回來)

        註: 跳到 cmd_from 後一樣可以使用其它所有指令再進行跳頁,
            若一直執行不到 cmd_to 則永遠不會跳回來。

=============================================================================

3. 即時互動與進階

        下面講的是更高級的特殊指令及應用,
        主要是讓互動更進一步變為即時性的互動,
        例如「在某時使用者按下某鍵才會有反應」的效果。

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

3.1 特殊按鍵與預設選項

        @

        NAMED KEY       特殊按鍵

        有些鍵無法用標準的語法表示出來,所以 pmore 提供了一些特殊的名字。
        此類按鍵表示法一律以 @ 開頭,後面接單一個字元,大小寫有別。

        @u      UP      方向鍵(↑)
        @d      DOWN    方向鍵(↓)
        @l      LEFT    方向鍵(←)
        @r      RIGHT   方向鍵(→)

        @b      BS      倒退鍵

        @H      HOME    Home
        @E      END     End
        @P      PGUP    PageUp
        @N      PGDN    PageDown
        @I      INS     Ins
        @D      DEL     Del

        另外還有一個特別的叫

        @a      ALL/ANY 任意鍵

        範例
                ^L#@u,f1#               按↑時跳到第1張畫面

                ^L#@d,f2#@a,f-3#        按↓時跳到第2張畫面,
                                        其它任何鍵都往前跳3張畫面

        注意即使是 @a 也無法蓋掉系統的中斷鍵 (目前為 q, Q, Ctrl-C)

        選取鍵 (空白鍵與 ENTER) 的功能也無法改變,但有別的技巧
        可以「使用」這兩個鍵。

        對於每個 ^L# 指令來說,預設的選項就是第一個選項。
        按下空白或 ENTER 就是「選擇目前選項」。

        所以,只要在編輯指令時把 ENTER/空白 想讓它們做的事放在第一個選項即可

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

3.2 即時互動

        ^L#time#key,cmd,text#

        TIMED OPTION    計時互動選項

        「計時互動是為了即時互動而產生的指令」。
        簡單的說,標準形的 ^L# 會停在那裡等使用者輸入。
        可是如果我想要作出使用者在不同時間按會有不同反應的效果呢?
        (ex, 太鼓達人、大家來找碴類)

        只要在 ^L# 各選項前先放個時間單位就好了

        範例:
                ^L#0.5#a,f1,首頁#b,f10,結束#
                0.5 秒內使用者按 a 則跳第一張畫面,按 b 跳第 10 張
                什麼都沒按則播放下張畫面。

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

3.3 保留按鍵

        ^LK##

        PRESERVE KEY    保留互動按鍵

        當你開始製作即時性動畫時常會遇到一個問題 -
        使用者在沒有互動的頁按了鍵使得動畫中斷。

        一個解決方法是把全部的畫面都變成計時互動,不過這樣修改實在工程浩大
        所以有個特別的指令叫 ^LK, 保留按鍵 (也就是說,使用者按下這些鍵時
        什麼事都別作。)


        ^LK 目前只支援保留按鍵給互動式選項 (^L#) 使用,所以語法就是
        ^LK#keys#       keys 為你要保留的鍵。

        範例:

                ^LK#abc123#     保留 a b c 1 2 3 為互動所需要的鍵
                ^L2.5           (此時使用者按 abc 123 都不會停下來)
                ^L#a,f1#
                ...

        當然, ^LK## 可以使用所有的 @ 特殊按鍵 (包括 @a),所以即時互動
        的動畫開頭最常寫的就是:

                ^LK#@a#

        這樣除非使用者按下系統中斷鍵 (q,Q,Ctrl-C) ,不然什麼鍵都不會打斷你的
        播放。

        另外,由於 ^LK 只是設定系統而非動畫控制指令,所以你可以在它後面
        再接上標準的控制語法。

        範例:   下面兩個為常見開場法

                ^LK#@a#2.5
                   停留2.5秒的首頁,設定本動畫不被任何鍵中斷

                ^LK#@a#P
                   互動方法說明的首頁,設定本動畫不被任何鍵中斷

        設定一次 ^LK 後會一直有效,直到下次再指定。
        ^LK## 等於放棄所有指定的保留效果。

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

3.4 畫面命名

        ^L:name:

        NAMED FRAME     畫面別名

        互動式動畫有個特色 - 很快你就會發現畫面數量成長的速度大幅增加,
        要管理各畫面的關係是個大問題。
        相對編號 (f-2, f+10) 小動畫勉強可用,但是當你有一連串互動指令
        都要跑到相同的結尾時,只要中間增減一張畫面就要到處改編號 -
        非常的麻煩。

        最簡單的方法,就是為畫面命名。
        語法為用 :: 包起來的字串,只可使用英文字母及數字 (大小寫有別)。

        範例:
                ^L:end:         本畫面的名字為 end

        另外,由於 ^L:name: 只是設定名稱而非動畫控制指令,所以可以在它後面
        再接上標準的控制語法。

                ^L:home:P
                設定此頁名為 home, 並在顯示內容後暫停。

        若想跟其它非控制命令如 K## 合用,則 :name: 要在最前面

                ^L:home:K#@a#P
                設定此頁名為 home 、保留全部按鍵供互動使用、
                並在顯示內容後暫停。

        要使用有名字的 frame, 只要一樣用 :name: 來指定就好了。 :name:
        格式屬於正常 cmd (見 2.1 動畫編號方式) 之一,所以可以
        在 ^LG 跟 ^L# 中使用。

                ^LG:end:
                跳至叫 end 的畫面

                ^L#1,:opt1:#,:opt2:#,:opt3:#
                按下 1 時跳至叫 opt1 的畫面
                按下 2 時跳至叫 opt2 的畫面
                按下 3 時跳至叫 opt3 的畫面

        使用命名方式,則不管你中間增減多少頁,系統都能正確的跳頁。

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

3.5 亂數跳頁

        ^LGcmd,cmd,cmd,cmd

        GOTO(RANDOM)    跳頁(亂數)

        有一種應用是,例如在設計 RPG 時想讓敵人的反應每次都不固定,
        但又不希望是寫死靠使用者按鍵的時機決定的,
        此類可以利用亂數跳頁的功能。

        語法上與跳頁一模一樣,只是跳頁變成一排由逗號 (,) 分隔的列表。

        範例:

                ^LG:scn1:,:scn2:,:scn3:
                隨意跳到 scn1, scn2, scn3 中的任一個

        其中每一項被選中的機率是相等的,所以若要製造出不等的比例,
        把某項重複即可:

                ^LGf+1,f-1,f-1,:end:,f+1,f+1

        有 3/6 的機率前往下一頁
        有 2/6 的機率前往前一頁
        有 1/6 的機率前往名為 :end: 的頁面

=============================================================================

4. 感謝

pmore 2007 的互動式功能在開發期間受到許多位動畫高手的協助測試並給予建議,
特別感謝下面幾位的大力支持,在系統未成熟時就開始試作動畫,使得系統的開發
能進行的更加順利:

ForSinSoKing    solusmilk       Vorukrus        yoway945
Kinra           john112136      janetangel      slowcloud



                                                        pmore 2007, by piaip

=============================================================================

// vim:expandtab