|
这个只是很新手级别演示,主要是为了解决sc20同学提的这个问题。
http://bbs.islga.org/read-htm-tid-45288.html
这里用的主要是SC2的排行榜。这东西和大致相当于war3的排行榜+多面板的组合。
这里简单地就这位sc20同学说的显示所有玩家的采矿进度条的效果做个演示。(下载在最下面)
下面是核心部分的触发:
Board Int
Events
Game - Map initialization
Local Variables
i = 1 <Integer>
Conditions
Actions
Leaderboard - Create a leaderboard with 2 columns and 1 rows, with the name "Minerals", and using (100%, 100%, 100%) color. //(创建一个排行榜,标题为Minerals,晶矿。总共2列,1列用来显示玩家名,2列用来显示采矿进度条。)
Variable - Set LB = (Last created leaderboard)
Leaderboard - Set the automatic player column for LB to column 1 (Do group by teams) //(这个动作是用来和玩家插入排行榜一起用的。我们可以决定排行榜中的一列为玩家名,这样插入玩家的时候这一列就会自动显示玩家名。当然也可以直接用修改项目的动作来加入玩家名。这里只是演示一下这个动作的用途而已。)
Leaderboard - Sort LB by column 2, in Descending order, with priority 1// (这里做了个自动排序效果,排序基准为第二列。也就是水晶的采集量。这样,在游戏进行过程中,玩家排行榜中的玩家就会不断改变位置,晶矿最多的玩家会排在第一列,之后按照晶矿数量轮流排列。)
Leaderboard - Set width of 2 column in LB to 15.0 (% of the screen) //(我们将第二列的宽度写死为15%的屏幕宽度,为了更清晰地显示进度条。)
Player Group - Pick each player in (Active Players) and do (Actions)
Actions
Leaderboard - Add player (Picked player) to LB //(将每一个玩家都加入排行榜,由于上面我们定义了玩家名这列,所以这里插入的玩家会自动在第一列显示玩家名)
Variable - Modify i: + 1
Variable - Set RowID[(Picked player)] = i // (i用来记录新插入的玩家的行号。注意,这个行号不会因为排行榜的排序而改变。如果玩家2在第2行,但是由于拥有最多的钱所以升到了第一位,那么这一行的行号其实还是2。)
Leaderboard - Set LB item text color at column 1 and row i to (Color((Current player (Picked player) color))) //(为了视觉效果,这里将玩家涂上玩家所属的颜色。)
Leaderboard - Set LB item progress bar at column 2 and row i to range from 0.0 to 1000.0 //(我们将进度条上限设为1000。这个是随便你弄的。你动态更改也可以)
Leaderboard - Set LB item icon at column 2 and row i to Assets\Textures\icon-mineral.dds, placing it on the Left side of the text // (在每个玩家的进度条左边显示晶矿的图标,这样看起来很明确这个进度条是表示晶矿采集量)
Leaderboard - Set LB item progress bar color at column 2 and row i to (Color((Current player (Picked player) color))) for step 1 //(把进度条颜色改为玩家颜色,这个其实没什么必要,只是为了展示下这个修改进度条颜色动作的用法)
Leaderboard - Show progress bar for LB item at column 2 and row i //(为每一个玩家在第二列显示进度条,注意,如果没有这一条,进度条是不会显示出来的。)
Leaderboard - Enable Sorted state for LB for (Active Players) //(开启排行榜的排序状态。注意没有这一条动作的话,排行榜不会进行自动排序,就算你设定了排序依据列。)
[trigger]
Board Update
Events
Player - Player -1 Minerals changes // (注意这个事件,这里我们用任何玩家的晶矿数量变更来作为刷新排行榜的事件。在SC2的脚本事件中,大部分场合下可以用-1来代表“任何玩家”,这样可以省去注册多个事件的麻烦。)
Local Variables
Conditions
Actions
Leaderboard - Set LB item text at column 2 and row RowID[(Triggering player)] to (Text((Player (Triggering player) Minerals))) //(每次玩家的晶矿变更后,就更改这玩家所在行第二列的数字为该玩家当前的晶矿数量。注意这些字默认是显示在进度条的中间位置的。如果不写数字进度条也能显示,但是这样不直观,也失去排序依据了。注意这里的RowID之所以可以直接用是因为行号并不会因为排序变化而变更。)
Leaderboard - Set LB item progress value at column 2 and row RowID[(Triggering player)] to (Real((Player (Triggering player) Minerals))) //(一并更新进度条的进度)
[/trigger] |
|