功能要求:显示当前游戏所占的物理内存
UI编辑器中添加PhyRam按钮,并添加容器组件:Handle_,然后在容器里面添加文字组件:Text_PhyRam,
Text_PhyRam里面的文本属性可以设置按钮上的文字,将文本属性的文字内容设置成:PhyRam,显示如图:
整体的窗口按钮界面如图:
对应的UI编辑器里面的控件类型是:
功能具体的实现就是:当你点击FPS的时候,柱状图显示当前帧率,点击Ping的时候,显示当前延迟。
具体的实现逻辑:
function PerformanceTip.OnFrameBreathe()
self.m_nCounter = self.m_nCounter + 1
if self.m_nCounter >= 15 then
if self.m_nLastState == STATE_FPS then
self.UpdateFPSData(this)
elseif self.m_nLastState == STATE_PING then
self.UpdatePingData(this)
elseif self.m_nLastState == STATE_Ram then
self.UpdateRamData(this)
end
self.m_nCounter = 0
end
end
当这个窗体创建好的时候,就立即进入循环,判断当前self.m_nLastState是什么,因为初始化的时候,将self.m_nLastState初始化成STATE_FPS,所以当窗口创建的时候,默认的是去更新FPS的数据。也就是执行:UpdateFPSData()
接着是一个按钮的点击,当你点击FPS,Ping或者PhyRam按钮的时候,就会根据你点击的按钮来做出相应的判断。
local szName = this:GetName() -- 通过GetName来获取所点击按钮的名称
local frame = this:GetRoot() --在UI编辑器里面每一个容器都被一个Handl控制,相当于Windows里面的句柄,根据这个句柄我们可以更新这个控件里面的数据
print("button on ", szName)
--现在开始判断所获取的按钮的名称,也就是说现在所点击的是哪个按钮
if szName == "Btn_FPS" then
--判断好点击的是哪个按钮之后,再判断当前显示的数据是不是这个按钮的,如果是,则更新,否则利用else语句来初始化所点击按钮里面的数据
if self.m_nLastState == STATE_FPS then
self.UpdateFPSData(frame)
else
print("turn to fps")
self.InitFPSData(frame)
self.m_nLastState = STATE_FPS
end
elseif szName == "Btn_Ping" then
...
...
...
那么当总体的窗口逻辑完成之后,我们可以就可以进行PhyRam按钮的实现:
库里面有两个接口函数实现了(EnventLog.lua):对当前物理内存进行计算采样和更新采样数据,这两个功能。
接口里面有计算出:虚拟内存,物理内存等,我们将其计算物理内存的部分移植到我们的显示数据的文件(PerformanceTip)中,成为自己的函数:SamplePhyData()和UpdatePhyLogData()。
初始化PhyRam部分:
PhyRam更新部分: