對部分玩者播放音效(本機玩者)

對指定玩者播放音效:

function PlaySoundForPlayer takes player whichPlayer, sound whichSound returns nothing
    if ( whichPlayer == GetLocalPlayer() ) then
        call StartSound( whichSound )
    endif
endfunction

這裡介紹一下GetLocalPlayer()這個函數。它的意思是「本機玩者」,也就是執行這條Trigger的電腦上的玩者。 在b.net連線時,各電腦間只傳遞一些指令,大部分的運算都是由每一台電腦自行運算,所以:

    if GetLocalPlayer() == Player(0) then
        call StartSound( whichSound )
    endif

假設此遊戲有十個人在玩,玩者一的電腦中,「本機玩家」是玩者一,符合條件,因此玩者一的電腦會播放音效; 玩者二的電腦中,「本機玩家」是玩者二,不符合條件,因此就不播放;其它玩者同理。 (特別注意遊戲中的玩者一在JASS裡是Player(0);玩者二是Player(1),依此類推)

使用本機玩家要注意哪些必須同步執行,哪些不能同步執行。 假設你只對玩者一和玩者二的電腦建立一個部隊,而其它玩者則沒有,那麼會發生伺服器分離,變成玩者一和玩者二一組,其它玩者一組。

此方法不能只讓部分電腦:

  • 建立新物件

  • 取隨機數

  • 設定重要必須同步的資料,例如部隊生命、法力、飛行高度

這個動作通常可以用在對部分玩者:

  • 播放音效

  • 建立特效

  • 設定部隊顏色(Change Unit Vertex Coloring)

  • 設定部隊外型大小

  • 進階電影濾鏡(Advanced Filter。不可用Fade Filter)

讀者會不會覺得整句用JASS寫實在太麻煩了?所以這裡介紹一個簡單的方法:

首先建立一個玩者變數LocalPlayer,然後對它初始化(日後不要隨便改變此變數的值):

Init
 Events
  Map initialization
 Conditions
 Actions
  Custom script: set udg_LocalPlayer = GetLocalPlayer()

現在LocalPlayer就代表本機玩家了,假設你要對玩者一播放某音效,就這樣寫:

If (LocalPlayer Equal to Player 1 (Red)) then do (Sound - Play BlizzardTarget1 <gen>) else do :return:
 (Do nothing)

要對玩者二的盟友播放就這樣寫:

If ((LocalPlayer is an ally of Player 2 (Blue)) Equal to True) then do :return:
 (Sound - Play BlizzardTarget1 <gen>) else do (Do nothing)

要對玩者二的盟友建立特效就這樣寫:

If ((LocalPlayer is an ally of Player 2 (Blue)) Equal to True) then do :return:
 (Set TempString = Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl) :return:
 else do (Set TempString = <Empty String>) Special Effect - Create a special effect at (Center of (Playable map area)) using TempString Special Effect - Destroy (Last created special effect)

但是不可以這樣寫:

If ((LocalPlayer is an ally of Player 2 (Blue)) Equal to True) then do :return:
 (Special Effect - Create a special effect at (Center of (Playable map area)) :return:
 using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl) else do (Do Nothing)

因為這樣就只給部分玩家創造物件(特效),會造成斷線。   此外,GUI有一個函數Current Camera運用了本機玩者的原理,但是因為B社的設計有瑕疵,這個函數在多人遊戲使用會造成分流。

綜合教學/jass入門教學/e2.部分玩者音效.txt · 上一次變更: 2007年11月11日 3:29 pm 來自 wasabi
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0