尝试着开发一个显示物理内存占用比的柱状图———自用

功能要求:显示当前游戏所占的物理内存

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更新部分:

猜你喜欢

转载自blog.csdn.net/dy_1024/article/details/81077411
今日推荐