cc.CheckBox.ClassName = "CheckBox" function cc.CheckBox:saveToXmlNode(xmlNode) cc.Widget.saveToXmlNode(self , xmlNode); xmlNode.BackGround = getUITexture(self:getBackGroundFileName() , self:getBackGroundTexType()); xmlNode.BackGroundSelected = getUITexture(self:getBackGroundSelectedFileName() , self:getBackGroundSelectedTexType()); xmlNode.FrontCross = getUITexture(self:getFrontCrossFileName() , self:getFrontCrossTexType()); xmlNode.BackGroundDisabled = getUITexture(self:getBackGroundDisabledFileName() , self:getBackGroundDisabledTexType()); xmlNode.FrontCrossDisabled = getUITexture(self:getFrontCrossDisabledFileName() , self:getFrontCrossDisabledTexType()); end function cc.CheckBox:loadFromXmlNode(xmlNode) cc.Widget.loadFromXmlNode(self , xmlNode); -- 底图资源 setUITexture(self.loadTextureBackGround , self , xmlNode.BackGround); -- 按下底图 setUITexture(self.loadTextureBackGroundSelected , self , xmlNode.BackGroundSelected); -- 禁用底图 setUITexture(self.loadTextureBackGroundDisabled , self , xmlNode.BackGroundDisabled); -- 标识图选中 setUITexture(self.loadTextureFrontCross , self , xmlNode.FrontCross); -- 标识图未选中 setUITexture(self.loadTextureFrontCrossDisabled , self , xmlNode.FrontCrossDisabled); end function cc.CheckBox:extend(node) cc.Widget:extend(node); node:setName("CheckBox") end function cc.CheckBox:createNode() local layer = cc.CheckBox:create(); cc.CheckBox:extend(layer); return layer; end -- 设置默认值 function cc.CheckBox:setDefaults() self:loadTextureBackGround("res/default/selected01.png"); self:loadTextureFrontCross("res/default/selected02.png"); self:setSelectedState(true); -- 默认需要响应touch事件 self:setTouchEnabled(true) end local function resetSprite(sprite) sprite:setTexture(nil); sprite:setTextureRect(cc.rect(0,0,0,0)); end -- 重新加载这个控件的所有图片 function cc.CheckBox:postloadImage() resetSprite(self:getBackGroundRenderer()); self:loadTextureBackGround(self:getBackGroundFileName()); resetSprite(self:getBackGroundSelectedRenderer()); self:loadTextureBackGroundSelected(self:getBackGroundSelectedFileName()); resetSprite(self:getBackGroundDisabledRenderer()); self:loadTextureBackGroundDisabled(self:getBackGroundDisabledFileName()); resetSprite(self:getFrontCrossRenderer()); self:loadTextureFrontCross(self:getFrontCrossFileName()); resetSprite(self:getFrontCrossDisabledRenderer()); self:loadTextureFrontCrossDisabled(self:getFrontCrossDisabledFileName()); end -- 收集这个控件用到了哪些PList文件 function cc.CheckBox:collectPListFiles() local files = {}; collectPListFile(files , self:getBackGroundFileName() , self:getBackGroundTexType()); collectPListFile(files , self:getBackGroundSelectedFileName() , self:getBackGroundSelectedTexType()); collectPListFile(files , self:getFrontCrossFileName() , self:getFrontCrossTexType()); collectPListFile(files , self:getBackGroundDisabledFileName() , self:getBackGroundDisabledTexType()); collectPListFile(files , self:getFrontCrossDisabledFileName() , self:getFrontCrossDisabledTexType()); 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.CheckBox:setSelectedNode(nodeSelected, nodeUnSelected) self.nodeSelected = nodeSelected self.nodeUnSelected = nodeUnSelected end function cc.CheckBox:updateSelectedNode() local isSelected = self:getSelectedState() if self.nodeSelected then self.nodeSelected:setVisible(isSelected) end if self.nodeUnSelected then self.nodeUnSelected:setVisible( not isSelected) end end -- 重写手动设置选中状态的接口:选中或取消选中之后更新选中图片 local old_setSelectedState = cc.CheckBox.setSelectedState; function cc.CheckBox:setSelectedState(isSelected, skipUpdateNode) old_setSelectedState(self, isSelected); if not skipUpdateNode then self:updateSelectedNode(); end end