2011年11月30日星期三

KAG教學---由音量到暫停都由你控制,播放背景音樂(2)

有沒有辨法在遊戲裡調整背景音樂的音量,有時候因為製造氣氛,想調整一下音量?>( ゚ω゚ s)

(k ゚∀゚)<吉里吉里是有這種東西的,而且還可以有淡入的效果,它們分別是[bgmopt]和[fadebgm]。

(k ゚∀゚)<先介紹[bgmopt],[bgmopt]有兩個屬性,分別是volume和gvolume,兩個都是調整背景音樂的音量百分率,數值為0至100,100是正常音量,如果忽略的話代表音量不變。

為什麼有兩個相同功能的屬性?>( ゚ω゚ s)

(k ゚∀゚)<volume是指個別的音量,而gvolume是全域音量,全域音量是遊戲裡的整體音量,不過由於背景音樂只有一個緩衝區,在背景音樂上其實分別不大,但是全域音量會記錄於系統變數裡,所以通常用於音量設定介面上的調整音量功能。

(k ゚∀゚)<而實際播放的音量是volume和gvolume兩個音量的百分率相乘,看看以下的範例。

[playbgm storage="bgm1"]
[bgmopt volume=50 gvolume=50]
播放BGM1,音量是原本的25%

(k ゚∀゚)<在上述的範例裡,實際播放的音量是0.5x0.5=0.25,音量是原本的25%。

(k ゚∀゚)<之後介紹[fadebgm],[fadebgm]有兩個屬性,分別是volume和time,time是設定淡入的所需時間,以微秒(ms)為單位,volume是調整背景音樂的音量百分率,數值為0至100,100是正常音量,如果忽略的話代表音量不變,要留意[fadebgm]是不能調整全域音量,想調整全域音量的話就要用[bgmopt]。

(k ゚∀゚)<看看以下的範例。

[bgmopt gvolume=100]
[playbgm storage="bgm1"]
播放BGM1[p][cm]
[fadebgm volume=50 time=3000]
音量是原本的50%[p][cm]
[fadebgm volume=100 time=3000]
返回原本的音量

我有另一個問題,每次停止背景音樂,就必須重新由頭開始播放,有沒有辦法只是暫停背景音樂?>( ゚ω゚ s)

(k ゚∀゚)<既然有停止,當然也會有暫停,如果要暫停背景音樂的話,可以用[pausebgm]來暫停,當想重新播放時,就使用[resumebgm]來播放,吉里吉里就會由原本暫停的位置重新播放,以下是範例。

[playbgm storage="bgm1"]
播放BGM1[p][cm]
[pausebgm]
暫停播放BGM1[p][cm]
[resumebgm]
重新播放BGM1

(k ゚∀゚)<不過只有WAVE類的背景音樂才能暫停背景音樂,如果大家用的是midi,就沒有效果。還有,當儲存記錄時,暫停的位置不會被記錄下來,這意味著當我們讀取記錄檔,背景音樂也是重新由頭開始播放。

既然停止背景音樂可以有淡入淡出的效果,那麼暫停背景音樂是不是也可以淡入淡出>( ゚ω゚ s)

(k ゚∀゚)<當然有啦,我們可以用[fadepausebgm]做出淡出效果,其屬性time是設定淡出的所需時間。

咦?淡入呢?>( ゚ω゚ s)

(k ゚∀゚)<根據吉里吉里的說明文件,它說用[resumebgm]重新播放,不過實際嘗試是沒有效果的,貌似是因為音量沒有被重新調整,必須用[fadebgm]或[bgmopt]等調整音量,以下是範例。

[playbgm storage="bgm1"]
播放BGM1[p][cm]
[fadepausebgm time=2000]
暫停播放BGM1[p][cm]
[resumebgm]
[fadebgm volume=100 time=2000]
重新播放BGM1

(k ゚∀゚)<今次也差不多了,下一次再見吧。

10 則留言:

  1. 有沒有一個代碼是讓音樂不會停止繼續播放?
    就好像first.ks裏用了bgm1,在那裏按了去向option.ks(但沒換bgm),然後按BACK回去first.ks(利用startanchor)這時候的歌會停下來,然後重播。
    有沒有是讓他別停下繼續播麽?[resumebgm]做不到那種。

    回覆刪除
    回覆
    1. 會重播的原因應該是再次執行了[playbgm],
      換句話說,我們只要回去first.ks時不再[playbgm]就行了。

      刪除
    2. 不過first.ks是已經執行了[playbgm]
      option.ks沒有執行任何bgm
      儅從option.ks 回去first.ks 是不能迴避[playbgm]
      該怎麽辦好呢?O.O

      刪除
    3. 當返回到first.ks,
      我們甚少要由first.ks一開始的部分執行,
      因為我們不想重複執行某些程式碼,
      例如遊戲一開始會播放OP,但總不可能每次回到標題畫面也播放OP吧,
      所以我們會返回到first.ks裡的某個label標籤,
      而不是first.ks一開始的部分。

      刪除
  2. 很可惜那樣做不到……
    [bgm省略]
    [各種代碼省略]
    *title1|[startanchor]
    [startanchor]
    就這樣從option返回這個地方,bgm依舊停止后再播

    回覆刪除
    回覆
    1. 對不起,原來我看漏了您使用的是[startanchor],
      其實解決方法十分簡單,
      就是不要使用[startanchor]來返回first.ks,
      [startanchor]實際上是利用存檔來儲存label位置,
      當執行[gotostart]時,吉里吉里其實是讀檔,
      這有別於[jump]、[call]等,
      由於是讀檔,背景音樂當然也重新播放。

      刪除
    2. 即使那樣也不行……
      [button 省略 call/jump=true storage=省略]
      jump只要一按回去就會卡在option的界面T_T
      如果是call反而出現return的錯誤……

      刪除
    3. [button]是沒有call或jump等屬性的……

      刪除
    4. 原來如此,謝謝你的解答^^
      之後我把[target=*]在first.ks后再[call]成功了~謝謝~~!

      刪除
  3. 請問音效(不是BGM)可以調整聲量嗎?
    我這樣試了不過失敗了:
    [playse storage="XXX"][bgmopt volume=50 gvolume=50]

    回覆刪除