请教lua中用cc.CSLoader.create读取csb文件后返回nil会是什么原因

主题 : 【小技巧】导出lua文件的回调函数小技巧
级别: 天使
UID: 432850
发帖: 34758
可可豆: 335461 CB
威望: 335459 点
在线时间: 1063(时)
发自: Web Page
【小技巧】导出lua文件的回调函数小技巧&&&
本帖被 DDDigua 执行提前操作()
对于导出lua的这个插件来说,还是有不少用处的。比如按钮过多的时候,使用lua特性以及导出的lua文件可以快速的解决这个问题。lua插件下载方法:可以在cocos商店中下载,然后在“下载”中点击“打开”,然后重新打开,就可以在“项目-项目设置-发布”中看见多了一个”lua文件”选项“的 设置了。勾选lua文件后,会弹出一个窗口,不要紧,正常现象,关闭它就OK了。截图:  
环境:framework3.6+ide1.2.0.0下面是代码部分1.src\packages\mvc\ViewBase.lua 文件中修改如下:self.resourceNode_= cc.CSLoader:createNode(resourceFilename)修改为localscene=require(resourceFilename)localgameScene=scene.create(nil)self.resourceNode_=gameScene.root即:把原来的由 CSLoader 从 csb 文件中加载节点,变为从 Lua 文件中加载节点。2.src\app\views\MainScene.lua文件中修改如下:MainScene.RESOURCE_FILENAME= &MainScene.csb& 修改为MainScene.RESOURCE_FILENAME= &MainScene.lua& --注:这里 MainScene.lua 为发布出来的 Lua 代码文件。您可以在发布工程目录的 res 子目录中找到它。3.src\app\view\MainScene.lua文件 onCreate()函数中增加以下代码
3.src\app\view\MainScene.lua文件的onCreate() 函数上方增加如下代码:
ps:我在studio编辑器中仅仅拖动了两个button并在属性-高级属性-回调特性-回调方法(click)后方分别加入“bt1”和“bt2”字符串如图:
其实还有更省事的方法,仅仅根据按钮的名字就可以实现上面的回调。步骤:1、在高级属性的回调特性中,勾选click或者touch2、按钮的名字格式,另外因为是根据按钮名字来实现回调,所以按钮名字不能一样。3、代码的区别
ps:利用导出lua这个插件的小技巧,你还可以额外定制自己需要的功能,文档链接如下:[ 此帖被DDDigua在 17:25重新编辑 ]
论坛关注较少,若还有后续疑问请去提问
级别: 新手上路
可可豆: 44 CB
威望: 44 点
在线时间: 16(时)
发自: Web Page
顶, 太方便了, 节省了很多时间
级别: 风云使者
UID: 183396
发帖: 4879
可可豆: 5740 CB
威望: 5903 点
在线时间: 1806(时)
发自: Web Page
级别: 新手上路
UID: 313113
可可豆: 218 CB
威望: 195 点
在线时间: 243(时)
发自: Web Page
HI,为什么我按例子会报错local gameScene=scene.create(nil) 报create 是nil value
级别: 新手上路
UID: 313113
可可豆: 218 CB
威望: 195 点
在线时间: 243(时)
发自: Web Page
回 楼主(DDDigua) 的帖子
大神求解答
级别: 天使
UID: 432850
发帖: 34758
可可豆: 335461 CB
威望: 335459 点
在线时间: 1063(时)
发自: Web Page
回 4楼(feijing566) 的帖子
你没有定义那个函数,viewbase里面加上这一句local function callBackProvider(luaFileName, node, callbackName)&&&&if node:getName() == &MainScene.lua& then&&&&&&&&release_print(&asdfasdfa1111111&)&&&&&&&&return ContinueCallback&&&&endend
论坛关注较少,若还有后续疑问请去提问
级别: 新手上路
UID: 479569
可可豆: 40 CB
威望: 23 点
在线时间: 3(时)
发自: Web Page
可以自己写成lua脚本这样子吧?
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版一,创建基类
弹出框是平时比较常用的一类,如二次确认,或者消息提示,物品展示等,在此我特意封装了下载lua中的弹出框处理,方便以后使用
local PopBase= cc.LayerColor:create(cc.c4b(0, 0, 0, 200))
PopBase:setPosition(cc.p(0, 0))
function PopBase:CreatePopBase(csb)
if csb then
local size= cc.Director:getInstance():getVisibleSize();
self.resourceNode_ = cc.CSLoader:createNode(csb)
self:addChild(self.resourceNode_)
self.resourceNode_:setPosition(cc.p(size.width/2,size.heigh/2))
self.resourceNode_:setAnchorPoint(cc.p(0.5,0.5))
self.isEndedRemove=
self:initPopBase()
self:onT()
return self
function PopBase:initPopBase()
print(&PopBase init&)
function PopBase:onT()
local function onTouchBegan(touch,event)
return self:onTBegan(touch,event)
local function onTouchMoved(touch,event)
self:onTMoved(touch,event)
local function onTouchEnded(touch,event)
self:onTEnded(touch,event)
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(true)
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
function PopBase:onTBegan(touch,event)
return true
function PopBase:onTMoved(touch,event)
function PopBase:onTEnded(touch,event)
if self.isEndedRemove then
self:removeFromParent(true)
print(&PopBase onTouchEnded&)
return PopBase2.自己调用的子类需要继承自基类,如下:
local Popceshi =require(&app.views.popup.PopBase&)
function Popceshi:initPopBase()
print(&Popceshi init&)
--修改层颜色
-- self:initWithColor(cc.c4b(255, 0, 0, 200))
--设置是否点击屏幕关闭(关闭:true,不关闭:false 默认:关闭)
-- self.isEndedRemove=true
--当前的csd节点
--self.resourceNode_
return Popceshi3.创建一个管理类,方便调用时添加
使用方法:
1.注册:在新场景中注册,传入弹出层(如:popupLayer)
PopManager:getInstance():initPopContainer(popupLayer)
2.使用:在需要引用的位置调用该方法,传入要调用的弹出层的键值(如:&ceshi&)
PopManager:getInstance():createPop(&ceshi&)
3.新增:新增新的弹出层时,参见Popceshi.lua并且在Pop_tabel中添加键值对,[键值]={poplayer=&类名&,popcsd=&csd文件&}
(如:[&ceshi&]={poplayer=&Popceshi&,popcsd=&ceshi.csd&}),无csd文件时,popcsd=nil
cc.exports.PopManager = class(&PopManager&)
local Pop_tabel={
[&base&]={poplayer=&PopBase&,popcsd=nil},
[&ceshi&]={poplayer=&Popceshi&,popcsd=nil},
local Pop_layer_
function PopManager:new(o)
o = o or {}
setmetatable(o,self)
self.__index = self
function PopManager:getInstance()
if self.instance == nil then
self.instance = self:new()
return self.instance
function PopManager:initPopContainer(PopContianer)
printf(&initSceneContainer starting!!!!!&)
Pop_layer_ = PopContianer
if nil ~= Pop_layer_ then
printf(&initPopContainer success!&)
function PopManager:createPop(PopId)
if nil ==Pop_tabel[PopId] then
print(&Pop_tabel[&..PopId..&] is nil&)
package.loaded[&app.views.popup.&..Pop_tabel[PopId].poplayer] = nil
package.loaded[&app.views.popup.PopBase&] = nil
local pop_l
if nil~=Pop_tabel[PopId].popcsd then
pop_l=require(&app.views.popup.&..Pop_tabel[PopId].poplayer):CreatePopBase(Pop_tabel[PopId].popcsd)
pop_l=require(&app.views.popup.&..Pop_tabel[PopId].poplayer):CreatePopBase()
Pop_layer_:addChild(pop_l,100)
return pop_l
4.代码中引用
(1)在场景中传入“弹出层”,即该弹出框添加到的界面
(2)在调用处传入自己创建的新的子类名称即可(该名称在管理器中已经注册过)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3320次
排名:千里之外
原创:11篇
(1)(1)(2)(1)(2)(6)cocos2dx + lua 中实现
创建两个类,,CGMainSceneManager是单例,用于MC,CGMainScene 用于V。实现方式类似c++的类
local CGMainScene = class("CGMainScene",function()
return ZnBaseScene:create()
function CGMainScene.create()
local scene = CGMainScene.new()
scene:init()
scene:registerScriptHandler(function(event)
if "enter" == event then
scene:enter()
elseif "exit" == event then
scene:exit()
return scene
function CGMainScene:ctor()
self._visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.schedulerID = nil
function CGMainScene:init()
CGMainManager:instance():init()
CGMainManager:instance():createBgScrollView()
self:addChild(CGMainManager:instance()._scrollView)
CGMainManager:instance():addCheckPoint(CGMainManager:instance()._bgTableName)
local pointTable = {}
pointTable["level"] = 6
pointTable["state"] = 2
pointTable["starnum"] = 2
CGMainManager:instance():setStarandState(pointTable)
local buttonnode = cc.CSLoader:createNode("ButtonLayer.csb")
buttonnode:setPosition(VisibleRect.worldSpace(cc.p(self._visibleSize.width / 2 ,
self._visibleSize.height)))
self:addChild(buttonnode,CGMainManager:instance()._panelZorder.kButtonZorder)
local function ButtonTouchEvent(sender,eventType)
if eventType == ccui.TouchEventType.began then
elseif eventType == ccui.TouchEventType.ended then
if sender:getTag() == 1 then
print("-----------shopButton----============")
elseif sender:getTag() ==2 then
print("-----------RoleButton----============")
elseif sender:getTag() == 3 then
print("-----------incubatorButton----============")
elseif sender:getTag() == 4 then
print("-----------lotteryButton----============")
elseif sender:getTag() == 5 then
print("-----------signButton----============")
elseif sender:getTag() == 6 then
print("-----------TaskButton----============")
elseif sender:getTag() == 7 then
print("-----------BagButton----============")
elseif sender:getTag() == 8 then
print("-----------button8----============")
elseif sender:getTag() == 9 then
print("-----------button9----============")
elseif sender:getTag() == 10 then
print("-----------button10----============")
local children = buttonnode:getChildren()
local len = table.getn(children)
for i=1,len do
children[i]:addTouchEventListener(ButtonTouchEvent)
-- CGMainManager:instance():setOffset()
--关于体力,金币,银币图
CGMainManager:instance():setPanelEvent()
local function IconTouchEvent(sender,eventType)
if eventType == ccui.TouchEventType.began then
elseif eventType == ccui.TouchEventType.ended then
if sender:getTag() == 1
print("icon energy button
is touch ")
elseif sender:getTag() == 2 then
print("icon silver button is touch")
elseif sender:getTag() == 3 then
print("icon golden button is touch")
CGMainManager:instance()._energyIcon:addTouchEventListener(IconTouchEvent)
CGMainManager:instance()._goldenIcon:addTouchEventListener(IconTouchEvent)
CGMainManager:instance()._silverIcon:addTouchEventListener(IconTouchEvent)
CGMainManager:instance()._panelinfo:setPosition(VisibleRect.worldSpace(cc.p(self._visibleSize.width * 0.15 , 0.1 * self._visibleSize.height)))
self:addChild(CGMainManager:instance()._panelinfo,CGMainManager:instance()._panelZorder.kPanelZorder)
CGMainManager:instance():setPanelInfo()
--CGMainManager:instance():playEffect()
function CGMainScene:enter()
--print("CGMainScene:enter")
function CGMainScene:exit()
--print("CGMainScene:exit")
return CGMainScene
local instance = nil
require("CGMainScene")
CGMainManager = class("CGMainManager",function()
return ZnBaseHandler:create()
function CGMainManager:instance()
if instance ~= nil then return instance end
instance = CGMainManager.new()
return instance
function CGMainManager:reset()
if instance ~= nil then
instance = false
function CGMainManager:ctor()
self._winSize = cc.Director:getInstance():getWinSize()
self._visibleSize = cc.Director:getInstance():getVisibleSize()
function CGMainManager:init()
self._checkPointTable = {}
self._scrollView = nil
imageViewTag = 100
self._imageView = cc.Sprite:create("guanka1.png")
-- image for test
verticalTotal = 0
--竖直方向上的间隔
verticalSpace = 0
verticalOffset =
self._bgTableName =
"MainMap_1",
"MainMap_2",
"MainMap_3",
"MainMap_4",
"MainMap_5",
--浮动面板
self._panelinfo =
self._curEnergyLabel = nil
self._totalEnergyLabel = nil
self._goldenLabel = nil
self._silverLabel = nil
self._energyIcon = nil
self._goldenIcon = nil
self._silverIcon = nil
self._panelZorder =
kPanelZorder = 1,
kButtonZorder = 2,
alertView = nil
cdTime = 10*60*60
--for test
level = 20
function CGMainManager:createBgScrollView()
print("create bg
scrollView ")
self._scrollView = cc.ScrollView:create()
local function scrollView1DidScroll()
local function scrollView1DidZoom()
if nil ~= self._scrollView then
self._scrollView:setViewSize(cc.size(self._winSize.width,self._winSize.height))
self._scrollView:setPosition(cc.p(0,0))
self._scrollView:setScale(1.0)
self._scrollView:ignoreAnchorPointForPosition(true)
self._scrollView:setContentSize(cc.size(self._winSize.width,self._winSize.height * #self._bgTableName -verticalOffset * 2))
self._scrollView:setDirection(cc.SCROLLVIEW_DIRECTION_VERTICAL )
self._scrollView:setBounceable(true)
self._scrollView:setDelegate()
self._scrollView:registerScriptHandler(scrollView1DidScroll,cc.SCROLLVIEW_SCRIPT_SCROLL)
function CGMainManager:addCheckPoint(bgTable)
--添加关卡
print("this is checkPoint add function ")
function touchCheckPointEvent(sender,eventType)
if eventType == ccui.TouchEventType.began then
print(sender:getParent():getParent():getTag())
local tag = sender:getParent():getParent():getTag()
elseif eventType == ccui.TouchEventType.moved then
elseif eventType == ccui.TouchEventType.ended then
for i=1,table.getn(bgTable) do
--添加背景
local name = bgTable[i] .. ".csb"
local bg = cc.CSLoader:createNode(name)
local bgsprite = bg:getChildByName(bgTable[i])
local children = bgsprite:getChildren()
local len = table.getn(children)
for i = 0,len - 1,1 do
local positionx = children[i + 1]:getPositionX()
local positiony = children[i + 1]:getPositionY()
local tag = children[i + 1]:getTag()
--拿到tag值
local checkpoint = cc.CSLoader:createNode("Checkpoint.csb")
checkpoint:setPosition(cc.p(positionx,positiony))
table.insert(self._checkPointTable,checkpoint)
bg:addChild(checkpoint,0,tag)
local pointbg = checkpoint:getChildByName("Checkpoint_Bg")
local button = pointbg:getChildByName("Point_Button")
button:addTouchEventListener(touchCheckPointEvent)
local star1 = pointbg:getChildByName("PointStar_1")
local star2 = pointbg:getChildByName("PointStar_2")
local star3 = pointbg:getChildByName("PointStar_3")
local grayStar1 = pointbg:getChildByName("PointStar_Close1")
local grayStar2 = pointbg:getChildByName("PointStar_Close2")
local grayStar3 = pointbg:getChildByName("PointStar_Close3")
local stateclose = pointbg:getChildByName("Point_Close")
local stateopen = pointbg:getChildByName("Point_Open")
local stateok = pointbg:getChildByName("Point_Ok")
local imagepoint = pointbg:getChildByName("Sprite_image")
local silverandgoldenPoint = pointbg:getChildByName("pointSilverOrGolden")
silverandgoldenPoint:setVisible(false)
local pointNum = pointbg:getChildByName("Point_Num")
pointNum:setString(string.format("%s",tag))
self._checkPointTable[tag] = {}
self._checkPointTable[tag]["starTable"] = {}
self._checkPointTable[tag]["grayStarTable"] = {}
self._checkPointTable[tag]["checkpointState"] = {}
self._checkPointTable[tag]["starnum"] = {}
self._checkPointTable[tag]["imagepoint"] = {}
self._checkPointTable[tag]["pointbg"] = {}
table.insert(self._checkPointTable[tag]["starTable"],star1)
table.insert(self._checkPointTable[tag]["starTable"],star2)
table.insert(self._checkPointTable[tag]["starTable"],star3)
table.insert(self._checkPointTable[tag]["grayStarTable"],grayStar1)
table.insert(self._checkPointTable[tag]["grayStarTable"],grayStar2)
table.insert(self._checkPointTable[tag]["grayStarTable"],grayStar3)
table.insert(self._checkPointTable[tag]["checkpointState"],stateclose)
table.insert(self._checkPointTable[tag]["checkpointState"],stateopen)
table.insert(self._checkPointTable[tag]["checkpointState"],stateok)
table.insert(self._checkPointTable[tag]["starnum"],0)
--当前等级获得几颗星
table.insert(self._checkPointTable[tag]["imagepoint"],imagepoint)
table.insert(self._checkPointTable[tag]["pointbg"],pointbg)
bg:setPosition(VisibleRect.worldSpace(cc.p(0 , self._visibleSize.height -(i - 1) * self._visibleSize.height + verticalOffset)))
self._scrollView:getContainer():addChild(bg,0)
self._scrollView:updateInset()
function CGMainManager:setPanelEvent()
self._panelinfo = cc.CSLoader:createNode("TopBar.csb")
local energybg = self._panelinfo:getChildByName("ico_energy_bg")
local goldenbg = self._panelinfo:getChildByName("ico_gold_bg")
local silverbg = self._panelinfo:getChildByName("ico_silver_bg")
self._energyIcon = energybg:getChildByName("ico_energy")
self._goldenIcon = goldenbg:getChildByName("ico_gold")
self._silverIcon = silverbg:getChildByName("ico_silver")
self._curEnergyLabel = energybg:getChildByName("energy_Num_Left")
self._totalEnergyLabel = energybg:getChildByName("energy_Num_Right")
self._goldenLabel = goldenbg:getChildByName("gold_Num")
self._silverLabel = silverbg:getChildByName("silver_Num")
function CGMainManager:setPanelInfo()
local curEnergy = string.format("%s",300)
local totalEnergy = string.format("%s",500)
local golden = string.format("%s",1000)
local silver = string.format("%s",2000)
self._curEnergyLabel:setString(curEnergy)
self._totalEnergyLabel:setString(totalEnergy)
self._goldenLabel:setString(golden)
self._silverLabel:setString(silver)
function CGMainManager:showAlertView(flag)
function CGMainManager:setStarandState(PointTable)
-- start init
local level = PointTable["level"]
local state = PointTable["state"]
local starnum = PointTable["starnum"]
if self._imageView ~= nil then
local pointx = self._checkPointTable[level]["imagepoint"][1]:getPositionX()
local pointy = self._checkPointTable[level]["imagepoint"][1]:getPositionY()
self._imageView:setPosition(cc.p(pointx,pointy))
self._checkPointTable[level]["pointbg"][1]:addChild(self._imageView)
for i=1,level do
for j=1,starnum do
self._checkPointTable[level]["grayStarTable"][j]:setVisible(false)
if state ~= 1 then
self._checkPointTable[level]["checkpointState"][1]:setVisible(false)
self._checkPointTable[level]["checkpointState"][state]:setVisible(true)
elseif state == 1 then
function CGMainManager:setOffset()
self._scrollView:setContentOffset(cc.p(0, -verticalSpace))
function CGMainManager:playEffect() -- 当前关卡要播放的一系列动作特效
--动作测试
local tag = 6
local silverIconx = self._silverIcon:getPositionX()
local silverIcony = self._silverIcon:getPositionY()
local goldenIconx = self._goldenIcon:getPositionX()
local goldenIcony = self._goldenIcon:getPositionY()
local pointsilverIcon
= self._silverIcon:convertToWorldSpace(cc.p(silverIconx,silverIcony))
local pointgoldenIcon = self._goldenIcon:convertToWorldSpace(cc.p(goldenIconx,goldenIcony))
local silverMove = cc.MoveTo:create(2,pointsilverIcon)
local goldenMove = cc.MoveTo:create(2,pointgoldenIcon)
local silver = cc.Sprite:create("guanka1.png")
local golden = cc.Sprite:create("guanka1.png")
silver:setPosition(cc.p(10,10))
golden:setPosition(cc.p(10,10))
local silverx = silver:getPositionX()
local silvery = silver:getPositionY()
local goldenx = golden:getPositionX()
local goldeny = golden:getPositionY()
local positonsilver = convertToWorldSpace(cc.p(silverx,silvery))
local positiongolden =
convertToWorldSpace(cc.p(goldenx,goldeny))
self._checkPointTable[tag]["pointbg"][1]:addChild(silver,100)
self._checkPointTable[tag]["pointbg"][1]:addChild(golden,100)
silver:runAction(silverMove)
golden:runAction(goldenMove)
return CGMainManager
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Cocos2d-lua骨骼动画(*.csb)
Cocos2d-lua骨骼动画(*.csb)
说一下Cocos2d-lua中如何骨骼动画。
骨骼动画是用Cocostudio导出的,主文件是*.csb 。下面贴代码,加载csb文件,创建body执行某个动作。另外,这个骨骼动画中有个bug,在执行某个动作的时候,会触发多余的帧事件,貌似跟这个动画执行的原理有关,反正不该执行的帧事件也会被触发,我把调用这个方法的方式修改了一下,问题已解决。ps:我的cocos版本是3.3rc2
不知道新的版本有木有这个问题。。
local tbState = {
{standby = {0,35}, walk = {36,53},stun = {54,70}, skill1 = {71,136},skill2 = {137,188}, death = {189,268}}
local function mGotoFrameAndPlay(_body,_bodyAction,_sf,_ef,_isLoop)
_bodyAction.sFrame = _sf
_bodyAction.eFrame = _ef
_bodyAction:gotoFrameAndPlay(_sf,_ef,_isLoop)
local function createBody(_texture)
local body = cc.CSLoader:createNode(_texture)
local bodyAction = cc.CSLoader:createTimeline(_texture)
bodyAction.sFrame = 0
bodyAction.eFrame = 0
body:runAction(bodyAction)
local function onFrameEvent(frame)
if nil == frame then
local str = frame:getEvent()
local frameIndex = frame:getFrameIndex()
if frameIndex &= bodyAction.sFrame and frameIndex &= bodyAction.eFrame then
if str == "自定义帧事件名称" then
bodyAction:setFrameEventCallFunc(onFrameEvent)
return body
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 lua table nil 的文章

 

随机推荐