Cocos客户端如何连接服务器

项目接近完成,感觉知道该学习哪些知识,但是实际应用中并没有用到,因为项目是分工合作,窥一斑而见全豹是不可能的。

前几天主程对我迟到很有意见,所以他看不到我晚上23:00走的,他也看不到公司其他项目组都是10:00左右才到公司的,而我每次因为堵车都迟到在10分钟以内,但要写请假申请表明我请了30分钟的假。

看看公司其他的项目组,看看自己项目组里每天上班聊QQ,看新闻,聊天的其他同事,我只能说,既然你那么在乎形式主义,那就满足你。

然后活动都分配出去,也没有分配我新的任务,哥正巴不得这么做。正好趁这段时间好好总结归纳一番。

昨天把客户端连接服务器的过程稿清楚,说的简单只不过3个步骤。

1.加载一个公司的logo动画,其实就是一个场景,用runscene就可以。

2.运行完动画的函数里回调显示更新资源的场景

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)
至此,客户端请求连接服务器。
至于连上后检查版本,下载资源,解包,然后显示登录界面都是后续,这里就只是这么一个过程。把部分代码贴上,给自己留个纪念。

相关文章

操作步骤 1、创建cocos2d-x工程 2、新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#defi...
开发环境:OS(WINDOWS 8.1 X64 企业版) cocos2d-x 2.2.1 vs2010 想给vs安装上cocos的模版,执行Install...
把创建项目做成一个批处理,当创建项目时可以省时省力很多。 操作步骤 1、在 E:cocos2d-x-2.2.1toolspr...
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evC...
转载于 http://www.cnblogs.com/kenkofox/p/3926797.html 熟悉js的dom事件或者flash事件的,基本都能立...
ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况。最近项...