项目接近完成,感觉知道该学习哪些知识,但是实际应用中并没有用到,因为项目是分工合作,窥一斑而见全豹是不可能的。
前几天主程对我迟到很有意见,所以他看不到我晚上23:00走的,他也看不到公司其他项目组都是10:00左右才到公司的,而我每次因为堵车都迟到在10分钟以内,但要写请假申请表明我请了30分钟的假。
看看公司其他的项目组,看看自己项目组里每天上班聊QQ,看新闻,聊天的其他同事,我只能说,既然你那么在乎形式主义,那就满足你。
然后活动都分配出去,也没有分配我新的任务,哥正巴不得这么做。正好趁这段时间好好总结归纳一番。
昨天把客户端连接服务器的过程稿清楚,说的简单只不过3个步骤。
1.加载一个公司的logo动画,其实就是一个场景,用runscene就可以。
3.在这个更新资源的场景里调用connect连接服务器
文件名 函数名 引用的函数名 1.main.cpp _tWinMain Application::getInstance()->run() 2.CCApplication-win32.cpp run() applicationDidFinishLaunching() 3.AppDelegate.cpp applicationDidFinishLaunching()engine->executeScriptFile(文件名这里为 Matrix.lua) 这里追踪一下函数的实现发现最后是luaL_loadstring(“Matrix.lua”),这里只是 把该文件载入内存,但并不执行,至此主要流程都转入Matrix.lua中 4.Matrix.lua里有main函数,更有 local status,msg = xpcall(main,__G__TRACKBACK__) xpcall的使用是main函数不仅仅存在在内存中,而且开始运行起来,且有异常处理程序__G__TRACKBACK__,是一个打印函数这里给出原型为 function __G__TRACKBACK__(msg) print("----------------------------------------") print("LUA ERROR: " .. tostring(msg) .. "/n") print(debug.traceback()) print("----------------------------------------") Log_WriteFile("----------------------------------------") Log_WriteFile("LUA ERROR: " .. tostring(msg) .. "\n") Log_WriteFile(debug.traceback()) Log_WriteFile("----------------------------------------") return msg end 5.Matrix.lua main()StartScene_Start() -- 这里顺便提一句,为什么可以调用其他文件里的函数,因为在Matrix里包含了 function StartScene_Start() StartScene.Scenen = cc.Scene:create()--tolua.cast(cocos2d.CCSceneEx:create(),"cc.Scene") StartScene_ShowLayer("logoGC") --StartScene_ShowLayer("MsgBox") local runScene = cc.Director:getInstance():getRunningScene() if runScene ~= nil then if runScene ~= StartScene.Scenen then cc.Director:getInstance():replaceScene(StartScene.Scenen) end else cc.Director:getInstance():runWithScene(StartScene.Scenen) end --StartScene_SetKeyPad(StartScene.Scenen) end 6.StartScene.lua StartScene_Start()StartScene_ShowLayer("logoGC") function StartScene_ShowLayer(UIName) print("UIName = ",UIName) if type(UIName) == "string" then local layer = _G[UIName .. "_Load"]() if layer ~= nil then if layer:getParent() == nil and StartScene.Scenen ~= nil then StartScene.Scenen:addChild(layer) end _G[UIName .. "_Show"]() end else print("error UIName type") end end 7.StartScene.lua StartScene_ShowLayer("logoGC")_G[UIName .. "_Show"]() 8.LogGC.lua logoGC_Show()logoGC.animation:setFrameEventCallFunc(logoGC_OnAnimationEvent) function logoGC_Show() if logoGC.mainLayer ~= nil then logoGC.csbNode:runAction(logoGC.animation) logoGC.animation:gotoFrameAndPlay(0,100,false) logoGC.animation:setFrameEventCallFunc(logoGC_OnAnimationEvent) end end function logoGC_OnAnimationEvent(frame) if frame ~= nil and frame:getEvent() == "ended" then --NetUpdate.gameNetClient:connectServer(VersionConfig.UpdateServer[1].Ip,VersionConfig.UpdateServer[1].Port) Update_SetData(Status.checkMD5) StartScene_ShowLayer("Update") end end 9.StartScene.lua StartScene_Start()_G[UIName .. "_Load"]() and _G[UIName .. "_Show"]()-- UIName为Update 10.Update.lua Update_Show() Update_SetShowStatus() function Update_Show() Update_SetShowStatus() end function Update_SetShowStatus() if Update.currState == Status.checkMD5 then Update.panUpdateBg:setVisible(false) Update.panCheckResBg:setVisible(true) Update.panServerBg:setVisible(false) NetUpdate.gameNetClient:connectServer(VersionConfig.UpdateServer[1].Ip,VersionConfig.UpdateServer[1].Port) elseif Update.currState == Status.download then Update.panUpdateBg:setVisible(true) Update.panCheckResBg:setVisible(false) Update.panServerBg:setVisible(false) elseif Update.currState == Status.patch then Update.panUpdateBg:setVisible(false) Update.panCheckResBg:setVisible(false) Update.panServerBg:setVisible(true) elseif Update.currState == Status.loadDate then Update_PreLoadResources() end end 由于前面已经设置过状态 Update_SetData(Status.checkMD5) 今日第一个分支 主要代码NetUpdate.gameNetClient:connectServer(VersionConfig.UpdateServer[1].Ip,VersionConfig.UpdateServer[1].Port) 至此,客户端请求连接服务器。至于连上后检查版本,下载资源,解包,然后显示登录界面都是后续,这里就只是这么一个过程。把部分代码贴上,给自己留个纪念。