ptouch 发表于 2011-3-25 11:35:41

面向对象方式封装myStatusWindow

前几天研究了 kudo 的myStatusWindow
现在使用面向对象技术重新封装myStatusWindow,做成window类,方便大家使用mini_Window只要写很少代码就能实现mini_window
require "sj_mini_win"--下载的 lua引用
local win=window.new() --监控窗体实例化
win.name="status_window"--名称属性 设置
win.font_height=8 --字体高度属性 设置 默认是18
win.font_name="幼圆" --默认是新宋体
win:addText("label1","my_status_window") --标签创建
win:addGauge ("jingsheng","精神: ", 100, "darkgreen", "mediumblue", "darkred", "50".."/".."100", 0) --创建进度条
win:addGauge ("qixue","气血: ", 50, "darkgreen", "mediumblue", "darkred", "50".."/".."100", 0)
win:addGauge ("jingli","精力: ", 50, "darkgreen", "mediumblue", "darkred", "50".."/".."70", 0)
win:addGauge("neili","内力: ", 100, "darkgreen", "mediumblue", "darkred", "200".."/".."100", 0)
win:addGauge("food","食物: ", 400, "darkgreen", "mediumblue", "darkred", "80".."/".."100", 0)
win:addGauge("drink","饮水: ", 500, "darkgreen", "mediumblue", "darkred", "100".."/".."100", 0)
win:addGauge("pot","潜能: ", 100, "darkgreen", "mediumblue", "darkred", "100", 1)
win:refresh() --刷新
--实现原来代码功能
--------------------
窗体内容更新
function test()
local win=window.new() --监控窗体实例化
win.name="status_window"--名称属性 设置
win.font_height=10 --字体高度属性 设置 默认是18
win.font_name="幼圆" --默认是新宋体
win:addText("label1","更新窗体") --标签创建
win:addGauge("pot","潜能: ", 100, "darkgreen", "mediumblue", "darkred", "200", 1)--利用第一个id参数更新状态条信息 潜能从100-200
win:refresh()
end

我对原来代码简单的修改了下,可能还会有bug欢迎大家对代码修改更新!

zgbl 发表于 2011-3-25 12:18:38

ttk_00 好东西

inspector 发表于 2011-3-25 12:41:36

我想弱弱的问句,面向对象封装…具体是个什么概念,有什么好处?不要见笑哈,门外汉的问题

ptouch 发表于 2011-3-25 14:44:11

原帖由 inspector 于 2011-3-25 12:41 PM 发表 http://pkuxkx.net/forum/images/common/back.gif
我想弱弱的问句,面向对象封装…具体是个什么概念,有什么好处?不要见笑哈,门外汉的问题
面向对象核心思想就是 “代码重用”
拿这个mini_window 举例

看下 kudo 原来写的
前面一部分代码是创建mini_window 窗体颜色,窗体大小,字体大小 ,背影颜色
在--Triggers 分割线后面内容是创建窗体中的内容
AddTriggerEx(
            "hp_get_info",
            "(【 精神 】[\ ]+(+)[\ ]+/[\ ]+(+)[\ ]+.*【|【 气血 】[\ ]+(+)[\ ]+/[\ ]+(+)[\ ]+.*【|【 食物 】[\ ]+(+)[\ ]+/[\ ]+(+)[\ ]+.*【|【 饮水 】[\ ]+(+)[\ ]+/[\ ]+(+)[\ ]+.*【)",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "hp_get_info",
            0,
            90)
AddTriggerEx(
            "hp_get_info1",
            "(【 精力 】[\ ]+(+)[\ ]+/[\ ]+(+)[\ ]+.*|【 内力 】[\ ]+(+)[\ ]+/[\ ]+(+)[\ ]+.*|【 潜能 】 (+).*|【 经验 】 (+).*)",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "hp_get_info1",
            0,
            91)
AddTriggerEx(
            "hp_get_info3",
            "≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "",
            12,
            90)
AddTriggerEx(
            "hp_get_info4",
            "≡━━━━━━━━━━━━━━━━━━━━━━━◎北大侠客行◎━━≡",
            "",
            trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OmitFromOutput + trigger_flag.KeepEvaluating ,
            -1,
            0,
            "",
            "",
            12,
            90)
好!!! 理解这些以后,你想下如果我要创建一个status_window 来显示你的技能等级你会怎么改代码。
前面代码不用修改,后面trigger 代码都需要修改。

我现在换个思维模式(面向对象)写代码,我需要重用代码
这个好比 我先把格式合同都写好,里面留几个空格
你自己填上名字,这个合同就生效了。
local win=window.new() --监控窗体实例化就是告诉程序 这个是哪个格式合同
win.name="status_window"--空格填写不填会有默认名字填进去
win.font_height=8 --其他一些 合同明细 字体是8号高度
win.font_name="幼圆" --默认是新宋体
win:addText("label1","my_status_window") --标签创建
win:addGauge ("jingsheng","精神: ", 100, "darkgreen", "mediumblue", "darkred", "50".."/".."100", 0) --创建进度条
win:refresh() --生效
------------
这样你不用重头到尾写代码,只要把细节填写一些。写代码量就会少很多,而且代码质量会提高很多,bug也会少很多。
我现在需要一个显示技能等级status_win
local skillwin=window.new() --监控窗体实例化
skillwin.name="skill_window"--空格填写
skillwin.font_height=8 --
skillwin.font_name="宋体" --
skillwin:addGauge ("skill1","寒冰真气 : ", 83, "darkgreen", "mediumblue", "darkred", "4500".."/".."6889", 0) --创建进度条
skillwin:refresh() --
面向对象好处就是 不再需要在修改别人写的源代码,只需要在你自己代码中引用,调用对象就能实现这个功能了。

[ 本帖最后由 ptouch 于 2011-3-25 02:58 PM 编辑 ]

inspector 发表于 2011-3-25 17:33:50

支持!学习下先ttk_05

littleknife 发表于 2011-3-28 19:22:28

yct23

xspe 发表于 2012-3-24 22:03:09

留贴仔细研究一下

atester 发表于 2012-12-30 13:55:28

这个要好好研究一下

mianwo 发表于 2013-6-21 07:13:49

好东西,必须顶的。。。。。。
页: [1]
查看完整版本: 面向对象方式封装myStatusWindow