找回密码
 加入帝国

QQ登录

只需一步,快速开始

查看: 3167|回复: 2

[教程文章] [高阶]玩转游戏-制定你自己的游戏规则(外传:UI控制)

[复制链接]
发表于 2009-8-16 19:32:45 | 显示全部楼层 |阅读模式
[高阶]玩转游戏-制定你自己的游戏规则(外传:UI控制)

玩转游戏-制定你自己的游戏规则(外传: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_函数无法在界面中被直接调用......

以上,今天的讲解到此。偶正思考下次拿些啥浮云来忽悠大家。哦活活活活活活~~~
a.jpg

Data.rar

2.07 KB, 下载次数: 1397

回复

使用道具 举报

发表于 2009-11-22 07:42:28 | 显示全部楼层
感謝分享~拜領學習了!!
回复

使用道具 举报

发表于 2010-8-12 17:33:23 | 显示全部楼层
辛苦了。。回头试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入帝国

本版积分规则

Archiver|手机版|小黑屋|泰坦帝国

GMT+8, 2024-3-28 23:48 , Processed in 0.117153 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表