require("luaScript.Tools.Widgets.PressedEffect") cc.Button.ClassName = "Button" function cc.Button:saveToXmlNode(xmlNode) cc.Widget.saveToXmlNode(self , xmlNode); xmlNode.scale9Enable = self:isScale9Enabled(); xmlNode.NormalImage = getUITexture(self:getNormalFileName() , self:getNormalTexType()); xmlNode.PressedImage = getUITexture(self:getPressedFileName() , self:getPressedTexType()); xmlNode.DisabledImage = getUITexture(self:getDisabledFileName() , self:getDisabledTexType()); if xmlNode.scale9Enable then xmlNode.capInsets = self:getCapInsetsNormalRenderer(); end xmlNode.text = self:getTitleText(); xmlNode.TitleFontConfig = self:getFontConfig(); xmlNode.CharPadding = self:getCharPadding(); xmlNode.LinePadding = self:getLinePadding(); local pressedEffect = self:getPressedEffect(); if pressedEffect then xmlNode.PressedEffect = {}; pressedEffect:saveToXmlNode(xmlNode.PressedEffect); else xmlNode.PressedEffect = false; end end function cc.Button:loadFromXmlNode(xmlNode) cc.Widget.loadFromXmlNode(self , xmlNode); self:setScale9Enabled(xmlNode.scale9Enable); setUITexture(self.loadTextureNormal , self , xmlNode.NormalImage); setUITexture(self.loadTexturePressed , self , xmlNode.PressedImage); setUITexture(self.loadTextureDisabled , self , xmlNode.DisabledImage); local fontConfig = xmlNode.TitleFontConfig if not fontConfig then fontConfig = {} fontConfig.fontFilePath = "res/default/msyh.ttc" fontConfig.fontSize = xmlNode.TitleFontSize fontConfig.glyphs = cc.GLYPHCOLLECTION_DYNAMIC fontConfig.customGlyphs = nil fontConfig.distanceFieldEnabled = false fontConfig.outlineSize = 0 fontConfig.txtColor = xmlNode.TitleColor; end self:setFontConfig(fontConfig); if xmlNode.CharPadding then self:setCharPadding(xmlNode.CharPadding); self:setLinePadding(xmlNode.LinePadding); end self:setTitleText(xmlNode.text); if self:isScale9Enabled() then self:setCapInsets(xmlNode.capInsets); end local pressedEffect = xmlNode.PressedEffect; if pressedEffect ~= nil then if pressedEffect ~= false then local effect = cc[pressedEffect.ClassName]; if not effect then error("找不到类型:" .. pressedEffect.ClassName); end local instance = effect:create(); instance:loadFromXmlNode(pressedEffect); self:setPressedEffect(instance); end else -- 给个默认值,兼容老版本 self:setPressedEffect(cc.ScalePressedEffect:create()); end end function cc.Button:setFontConfig(ttfConfig) local label = self:getTitleRenderer(); label:setFontConfig(ttfConfig) end function cc.Button:getFontConfig() local label = self:getTitleRenderer(); local config = label:getFontConfig() return config; end -- 收集ui的文本,返回文本table function cc.Button:collectText() return {TextTranslator:collect(self:getTitleText())}; end -- 翻译xmlNode里的文本,dict是字典表 function cc.Button:applyDict(dict) local translated = dict[TextTranslator:collect(self:getTitleText())]; if translated then self:setTitleText(TextTranslator:translate(self:getTitleText() , translated)); end end function cc.Button:setCharPadding(padding) local label = self:getTitleRenderer(); label:setCharPadding(padding) end function cc.Button:getCharPadding() local label = self:getTitleRenderer(); return label:getCharPadding() end function cc.Button:setLinePadding(padding) local label = self:getTitleRenderer(); label:setLinePadding(padding) end function cc.Button:getLinePadding() local label = self:getTitleRenderer(); return label:getLinePadding() end function cc.Button:setPadding(x , y) local label = self:getTitleRenderer(); label:setPadding(x , y) end function cc.Button:extend(node) cc.Widget:extend(node); node:setName("Button") end function cc.Button:copyProperties(source) cc.Widget.copyProperties(self , source); self:setFontConfig(source:getFontConfig()); end function cc.Button:createNode() local layer = cc.Button:create(); cc.Button:extend(layer); return layer; end function cc.Button:setText(str) self:setTitleText(str); end -- 设置默认值 function cc.Button:setDefaults() local ttfConfig = {} ttfConfig.fontFilePath = "res/default/msyh.ttc" ttfConfig.fontSize = 30 ttfConfig.glyphs = cc.GLYPHCOLLECTION_DYNAMIC ttfConfig.customGlyphs = nil ttfConfig.distanceFieldEnabled = false ttfConfig.outlineSize = 0 self:setFontConfig(ttfConfig); self:setTitleText("确定"); self:loadTextureNormal("res/default/button.png"); self:setCapInsets(cc.rect(0,0,0,0)); -- 默认带一个缩放效果 self:setPressedEffect(cc.ScalePressedEffect:create()); -- 默认需要响应touch事件 self:setTouchEnabled(true) end -- 重新加载这个控件的所有图片 function cc.Button:postloadImage() local isScale9 = self:isScale9Enabled(); self:setScale9Enabled(not isScale9); self:setScale9Enabled(isScale9); end -- 收集这个控件用到了哪些PList文件 function cc.Button:collectPListFiles() local files = {}; collectPListFile(files , self:getNormalFileName() , self:getNormalTexType()); collectPListFile(files , self:getPressedFileName() , self:getPressedTexType()); collectPListFile(files , self:getDisabledFileName() , self:getDisabledTexType()); function getParent(node, path) local parent = node:getParent() if parent then local nameParent = parent:getName() path = nameParent.. "\\"..path return getParent(parent, path) else return path end end local nodePath = getParent(self, self:getName()); for k,v in pairs(files) do print("plist = " .. v .. ", nodePath = ".. nodePath) end return files; end function cc.Button:loadTextureFromPlist(filename) self:loadTextureNormal(filename, cc.TextureResType.plistType); end