Android篇

1,先加载NativeLibrary, 这个NativeLibrary 就是工程目录下的jni 和 cosos引擎对应各个平台的cpp代码编译后生成的.so文件。

2,调用  Cocos2dxActivity中init方法初始化 mGLSurfaceView Cocos2dxGLSurfaceView 它继承自opengl中类GLSurfaceView。GLSurfaceView的核心就是Renderer,初始化时会调用Renderer的onSurfaceCreated方法,每一帧的绘制是通过调用Renderer的onDrawFrame方法。Cocos2dxGLSurfaceView的Renderer是一个Cocos2dxRenderer对象,

方法onSurfaceCreated中调用

Cocos2dxRenderer.nativeInit(this.mScreenWidth, this.mScreenHeight);

对应的代码 javaactivity-android.cpp(cocos\platform\android\) 中的nativeinit 方法   cocos2d::Application::getInstance()->run(); 这里就调用到AppDelegate中的applicationDidFinishLaunching进入到游戏的主逻辑了。

至于工程目录下面的hellocpp下的main.cpp 是在javaactivity-android.cpp中的JNI_OnLoad的时候调用的。

IOS篇

https://blog.csdn.net/tianxiawuzhei/article/details/48346381

main 中指定一个UIApplicationDelegate对象作为生命周期的回调  其中调用到didFinishLaunchingWithOptions,初始化window, 加载rootviewcontroller,将cocos2dx的view作为rootviewcontroller的根view

ios view的层级通过 view.addSubView 一个view下面可以挂多个子view  这里启动了cocos2d::Application run方法,这里就调用到AppDelegate中的applicationDidFinishLaunching进入到游戏的主逻辑了。

1, 初始化Director

2, 初始化GameApplication() 捕鱼

管理socket连接 数据库 配置数据   scheduleUpdateForTarget 定时去updatesocket

3, 设置http请求url 账服地址

4, 开始运行初始场景LoginScene

 

进入大厅 HallScene场景 进入到enterRoomByID(gameid)模块  进入LoadTable 调用LoadFishRoom  最后调到HelloworldScene.cpp中onStartGame 进行初始化pureMVC框架ApplicationFacade并调用到StartupCommand.cpp    命令

ApplicationFacade 应用模式:  和处理命令的代码  pureMVC架构分析https://www.ibm.com/developerworks/cn/java/j-lo-puremvc/index.html

1、MVC 各有一个单例类

Facade统一管理了MVC

V管理着Mediator集合 Mediator代表这某个UI

M管理这Proxy集合 Proxy代表从哪获得数据

C起了什么一个作用呢?管理着所有的command 并注册

这些对象通过发送Notification来进行交互,Command则是按需生成也是一个观察者。

总之就是观察者模式 但是观察者又有分类 ,Mediator有个总管V  Proxy有个总管M.

发送”GameEnterRoom”消息,VLoadingMediator::ShowGameEnterRoom 获取到IP进行socket连接 调用到SocketProxy::connect();

回到第2部分中的updatesocket, 调用到SoketProxy::onRecv 很多内容转到VGameKernelMediator中处理  发送的MODULE和  G_USER_MODULE_CMD 在类ProtoBasisInfo.pb.h中

捕鱼的主要代码在 FishMgr.cpp中