作为一个java出身的程序媛,长时间作Lua,重复一些工做后,特别想用继承。其实很简单。由于我有一大部分的场景,背景长的都同样,因此打算作一个父类。java
须要注意的是,若是子类有和父类的同名函数,就会被覆盖,除非手动的调用.super.方法。app
关键的代码就两个地方,都在子类中。函数
1 建立场景时:ui
local SceneBase = import("app.scenes.SceneBase") local ActivityScene = class("ActivityScene", SceneBase)
2 子类的构造函数中,需调用父类spa
ActivityScene.super.ctor(self) -- 这是关键
超级简单,为何之前没人用呢,用了多省事啊,便于维护,省了不少人力呢。下面是两个文件的完整代码。code
父类:blog
local commImgPath = "#images/common/ui/" local SceneBase = class("SceneBase", function() return display.newScene("SceneBase") end) function SceneBase:ctor() print("SceneBase:ctor") self:addSprite() end function SceneBase:addSprite() print("SceneBase:addSprite") self.menuBgHeight = ZySize.scale * 98 self.menuBgWidth = display.width - ZySize.scalew * 85 --背景 cc.ui.UIImage.new(commImgPath.."beijing.jpg") :setLayoutSize(display.width + ZySize.scalew*20, display.height + ZySize.scale*20) :align(display.CENTER, display.cx, display.cy) :addTo(self) cc.ui.UIImage.new(commImgPath.."tongyongmianban3.png", {scale9 = true}) :setLayoutSize(display.width - ZySize.scalew* 10, display.size.height - self.menuBgHeight - ZySize.scale * 10) :pos(ZySize.scalew * 5, self.menuBgHeight + ZySize.scale * 3) :addTo(self) cc.ui.UIImage.new(commImgPath.."diban2.np.png", {scale9 = true}) :setLayoutSize(display.width, self.menuBgHeight) :addTo(self) end return SceneBase
子类:继承
local SceneBase = import("app.scenes.SceneBase") local ActivityScene = class("ActivityScene", SceneBase) function ActivityScene:ctor() ActivityScene.super.ctor(self) -- 这是关键 end return ActivityScene