- UID
- 9701
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
玩转游戏-制定你自己的游戏规则(外传:UI控制)
由于某些原因,已经很长一段时间没有更新游戏规则系列的教程了。
借FX1.8发布之前的机会更新一些比较浮云的教程。在FX1.8发布之后将会更新一些目前FXmod主流技术的教程。
这次我们要讲的是关于UI界面的控制。
user interface俗称游戏界面。游戏中的所有可视化界面都属于UI范畴。
同时,HW2的UI又可以细分成普通UI和InGameUI。
这次模仿国内某mod(不是FX,不是SEED,不是YY,不是UC,不是X,以上)的InGame统计界面。
目标:
在资源显示下方增加击毁敌人数量和损失数量的显示。
首先,我们必须对资源显示UI(Data\ui\newui\resource.lua)进行适当的重构。
界面的结构有那么一点点类似XML,元素通过类型以及部分具体的外观属性来区分其视觉效果。
Resource最外层是当前的界面Resource
内部由一个Frame构成背景色
Frame之上由一个较小的Frame显示图片,由两个TextLabel显示资源单位文本和资源数量文本。
大致结构为:
Resource{
Frame{
TextLabel{"资源单位"}
TextLabel{RUs}
Frame{Image}
}
}
我们所需要的是在这个基础之上建立一个自己的显示区域。
使其结构变为:
Resource{
Frame{
TextLabel{"资源单位"}
TextLabel{RUs}
Frame{Image}
}
Frame{
TextLabel{"击毁数量"}
TextLabel{kill}
TextLabel{"损失数量"}
TextLabel{lost}
}
}
在构建界面时一定要将需要进行动态数字显示的TextLabel进行唯一标识。
我们将击毁数量的显示TextLabel命名为lblKillUnits,将损失数量的显示TextLabel命名为lblLostUnits。
将一下界面构建加入合适的位置。
{ --自定义框架
type = "Frame",
position = {0,14,},
size = {214,26,},
backgroundColor = "IGColorBackground1",
;
{ --击毁数量标题文本
type = "TextLabel",
position = {0,0,},
size = {128,13,},
Text =
{
text = "击毁数量",
textStyle = "IGHeading2",
offset = {4,0,},
},
},
{ --击毁数量显示文本
type = "TextLabel",
position = {138 - 13,0,},
size = {74,13,},
name = "lblKillUnits",
Text =
{
textStyle = "IGHeading2",
hAlign = "Right",
offset = {- 2,0,},
color = "FEColorHeading3",
text = "0",
},
},
{ --损失数量标题文本
type = "TextLabel",
position = {0,13,},
size = {128,13,},
Text =
{
text = "损失数量",
textStyle = "IGHeading2",
offset = {4,0,},
},
},
{ --损失数量显示文本
type = "TextLabel",
position = {138 - 13,13,},
size = {74,13,},
name = "lblLostUnits",
Text =
{
textStyle = "IGHeading2",
hAlign = "Right",
offset = {- 2,0,},
color = "FEColorHeading3",
text = "0",
},
},
},
同时别忘了适当扩大主界面的显示区域,以让自定义的部分充分显示。
然后需要进行的就是TextLabel文本的填充规则书写了。具体书写原则就不多阐述了,有需要请查阅游戏规则中级教程。
这里使用“死亡竞赛”的规则脚本进行显示。
function UIStatsChange()
local playerIndex = 0 --定义玩家编号。
local playerCount = Universe_PlayerCount() --玩家总数。
while(playerIndex<playerCount)do
if (Player_IsAlive(playerIndex) == 1) then --玩家依然健在,则执行操作。
if (Universe_CurrentPlayer() == playerIndex) then --当前玩家编号与执行编号相符合,则执行操作。
UI_SetTextLabelText("ResourceMenu", "lblKillUnits", ""..Stats_TotalKills(playerIndex)) --设置界面ResourceMenu上的元素lblKillUnits的文本为击毁敌方单位的数量。
UI_SetTextLabelText("ResourceMenu", "lblLostUnits", ""..Stats_TotalLosses(playerIndex)) --设置界面ResourceMenu上的元素lblLostUnits的文本为损失单位的数量。
end
end
playerIndex = playerIndex + 1
end
end
最后通过Rule_Add("UIStatsChange")将函数加载为规则运行。
这样,一个完整的简单军事数据统计就完成了。
同时,有细心并按照流程进行的同学一定发现了一件事。
Resource界面有onUpdate属性。是用来刷新RU数值的。
那么我们为什么不把军事统计的数字也由Resource界面来完成呢?
那是因为Stats_函数无法在界面中被直接调用......
以上,今天的讲解到此。偶正思考下次拿些啥浮云来忽悠大家。哦活活活活活活~~~ |
评分
-
查看全部评分
|