|
欢迎来看这篇教程!本教程讲解内容为为每个玩家创建不同的多面板。
废话不说,下面我们就开始...
需要:
1. World Editor 魔兽争霸编辑器
2. 基础JASS知识
变量:
假设地图中有10个玩家,那么我们就需要10个不同的多面板变量, 设置为Multiboard[ARRAY]. ARRAY是玩家数量,例如玩家1就是Multiboard[1], 玩家2就是Multiboard[2],以此类推。
定义i为一个整数变量。
现在新建一个触发器,把触发转化为自定义文本. 这样GUI就转换为JASS格式。
现在把下面的代码写入JASS触发:
[jass]function *TRIGGERNAME* takes nothing returns nothing
local integer i = 1
call TriggerSleepAction( 0.00 )
loop
exitwhen i > 12
set udg_Multiboard = CreateMultiboardBJ( ROWS, COLUMNS, "TITLE" )
call MultiboardDisplayBJ( false, udg_Multiboard )
set i = i + 1
endloop
set i = 1
loop
exitwhen i > 12
if ConvertedPlayer(i) == GetLocalPlayer() then
call MultiboardDisplayBJ( true, udg_Multiboard )
endif
set i = i + 1
endloop
endfunction[/jass]
现在JASS触发的函数名为*TRIGGERNAME* 类型,假如这个函数不存在,这个触发就不会运行。
想要借测函数是否存在,只要右击触发,取消选择允许触发 , 再选择允许触发,假如函数存在,不会有任何提示, 假如函数不存在, 编辑器会显示错误提示.
现在每个玩家都有一个单独的多面板显示.这是如何运行的呢?在每个玩家的电脑里有创建了12个多面板,但是这些多面板都隐藏起来了,然后使用GetLocalPlayer()(本地玩家)使玩家各自的电脑显示玩家自己的多面板。
提示:假如游戏中玩家人数少于12个, 改变下面代码中的***为玩家数量就可以了.
[jass]function *TRIGGERNAME* takes nothing returns nothing
local integer i = 1
call TriggerSleepAction( 0.00 )
loop
exitwhen i > ***
set udg_Multiboard = CreateMultiboardBJ( 3, 5, "Title" )
call MultiboardDisplayBJ( false, udg_Multiboard )
set i = i + 1
endloop
set i = 1
loop
exitwhen i > ***
if ConvertedPlayer(i) == GetLocalPlayer() then
call MultiboardDisplayBJ( true, udg_Multiboard )
endif
set i = i + 1
endloop
endfunction[/jass]
接着我们创建一个新的触发器来设置玩家的多面板内容.
这里是设定在RPG地图中,所以使用这个多面板系统来显示技能等级。
下面是触发:
[trigger]
设置玩家1
事件
时间 - 游戏开始0.05秒
条件
动作
多面板 - Set the text for Multiboard[1] item in column 1, row 1 to Cooking
多面板 - Set the text for Multiboard[1] item in column 1, row 2 to Fishing
多面板- Set the text for Multiboard[1] item in column 1, row 3 to Fletching
多面板- Set the text for Multiboard[1] item in column 1, row 4 to Herblaw
多面板 - Set the text for Multiboard[1] item in column 1, row 5 to Mining
多面板 - Set the text for Multiboard[1] item in column 1, row 6 to Smithing
多面板 - Set the width for Multiboard[1] item in column 0, row 0 to 5.50% of the total screen width
多面板 - Set the display style for Multiboard[1] item in column 0, row 0 to Show text and Hide icons
多面板 - Set the text for Multiboard[1] item in column 2, row 1 to (String(Cooking[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 2 to (String(Fishing[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 3 to (String(Fletching[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 4 to (String(Herblaw[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 5 to (String(Mining[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 6 to (String(Smithing[1]))[/trigger]
现在已经为玩家1设置好了多面版的行和列,假如其他玩家也要有同样设置,把触发复制一下 ,然后把Multiboard[1]改为 Multiboard[PlayerNumber]。
上面GUI触发的JASS模板:
[jass]function CreateMultiboardEx_ColumnCount takes nothing returns integer
return 4 //多面板的列数
endfunction
function CreateMultiboardEx_RowCount takes nothing returns integer
return 4 //多面板的行数
endfunction
function CreateMultiboardEx_Width takes integer row,integer column returns real
return 0.06 //单项的宽度
endfunction
function CreateMultiboardEx_Val takes integer row,integer column returns string
return "" //显示的字符串
endfunction
function CreateMultiboardEx_Icon takes integer row,integer column returns string
return "" //显示的图标
endfunction
function UpdateMultiboardEx takes multiboard mb,integer row,integer column,string val,string icon,real width returns nothing
local multiboarditem mbi=MultiboardGetItem(mb,row,column)
call MultiboardSetItemStyle(mbi,val!="",icon!="")
if val!="" then
call MultiboardSetItemValue(mbi,val)
endif
if icon!="" then
call MultiboardSetItemIcon(mbi,icon)
endif
call MultiboardSetItemWidth(mbi,width)
call MultiboardReleaseItem(mbi)
set mbi=null
endfunction
//假如想为所有玩家创意同一个多面板,设置p==null
function CreateMultiboardEx takes player p returns multiboard
local multiboard mb=CreateMultiboard()
local multiboarditem mbi
local string val
local string icon
local integer column=0
local integer row=0
if p==null then
call MultiboardDisplay(mb,true)
else
call MultiboardDisplay(mb,GetLocalPlayer()==p)
endif
loop
exitwhen row>CreateMultiboardEx_RowCount()
set column=0
loop
exitwhen column>CreateMultiboardEx_columnCount()
set val=CreateMultiboardEx_Val(row,column)
set icon=CreateMultiboardEx_Icon(row,column)
set mbi=MultiboardGetItem(mb,row,column)
call MultiboardSetItemStyle(mbi,val!="",icon!="")
if val!="" then
call MultiboardSetItemValue(mbi,val)
endif
if icon!="" then
call MultiboardSetItemIcon(mbi,icon)
endif
call MultiboardSetItemWidth(mbi,CreateMultiboardEx_Width(row,column))
call MultiboardReleaseItem(mbi)
set column=column+1
endloop
set row=row+1
endloop
set mbi=null
set bj_lastCreatedMultiboard=mb
set mb=null
return bj_lastCreatedMultiboard
endfunction[/jass] |
评分
-
查看全部评分
|