cocos2d-x在iOS的接合简单记录

对比app;

一个app的启动流程是:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, @"AppDelegate");
    }
}

对应

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // create window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.window makeKeyAndVisible];

    UIViewController *view = [[MainTableViewController alloc]init];
    // root view
    self.window.rootViewController = view;

    return YES;
}

可以看到关键是

window.rootViewController

cocos2d-x中的启动流程基本一致:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    cocos2d::Application *app = cocos2d::Application::getInstance();
    ...

    CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds]
    ...
    // eaglView 继承 UIView
    [eaglView setMultipleTouchEnabled:YES];

    viewController.view = eaglView; // 接合的地方

    cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView);
    // TODO:封装多一层的必要性,需要结合 android 实现理解
    cocos2d::Director::getInstance()->setOpenGLView(glview);

    app->run(); // 这里跟进去就进入游戏循环
    return YES;
}

这里出现了3个有点混淆的类:

AppController是iOS的,比较好区分

Application 和 AppDelegate:

Application:个人理解是相当于 mfc中 App 类,也有类似的run接口,对应游戏主循环。

然后

class  AppDelegate : private cocos2d::Application

然后还有 Director 主要是对应 glview 的操作。

run跟进去

-(void) startMainLoop
{
        // Director::setAnimationInterval() is called, we should invalidate it first
    [self stopMainLoop];

    displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(doCaller:)];
    [displayLink setFrameInterval: self.interval];
    [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}

[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

理解:

NSRunLoop是 Foundation framework 中

				
时间: 2024-10-12 16:21:22

cocos2d-x在iOS的接合简单记录的相关文章

cocos2d-x在android的接合简单记录

普通android工程入口: src/org/cocos2dx/cpp_empty_test_diff/MainActivity.java cocos2d-x入口稍微不同 src/org/cocos2dx/lib/Cocos2dxActivity.java 见 onLoadNativeLibraries 加载NDK编译生成的.so 这时候应用已经启动. 然后利用jni调用c++内容,启动游戏引擎. 具体是: Cocos2dxActivity.java init -> onCreateView -

u-boot命令行调试LCD简单记录

一般来说,调试uboot最好的方式是使用openjtag,因为uboot说到底就是一段裸机程序,只不过比较复杂.但是受实际环境限制,实际工作中使用较多的调试技巧主要有两种:打印和直接在命令行测试,打印比较常见也比较简单,直接使用printf即可,这里就以最近这段时间调试uboot下面lcd为例,简单说说命令行调试. 平台: am335x,u-boot 2010.09,linux 3.10 问题: 由于此版本u-boot比较旧,没有整套framebuffer子系统框架,所以采取的是移植好官方裸机驱

简单记录一次ORA-00600 kcratr_nab_less_than_odr

当前详细报错已经没有了,只有相应图.参考EYGLE一篇文章中数据: 1.故障现象 数据库版本11G,错误类似以下: ORA-00600: 内部错误代码, 参数: [kcratr_nab_less_than_odr]错误,具体的错误信息类似: Incident 63078 created, dump file: /u01/diag/rdbms/orcl/orcl/incident/incdir_63078/orcl_ora_1916_i63078.trc ORA-00600: 内部错误代码, 参数

简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错

一.故障描述 首先是实例恢复需要用到的REDO文件损坏 二.解决方法 1.对于非当前REDO或者当前REDO但是无活动事务使用以下CLEAR命令: 用CLEAR命令重建该日志文件SQL>alter database clear logfile group 3: 如果是该日志组还没有归档,则需要用SQL>alter database clear unarchived logfile group 3: 因为是当前实例恢复需要用的REDO,且未归档,使用是CLEAR命令不行的. 2.没备份,有备份可

简单记录一次ORA-00600: internal error code, arguments: [2662]

接上一个,REDO报错搞定后OPEN数据库时又报错ORA-00600: internal error code, arguments: [2662]. 原因是_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库,我们可能会由于SCN不一致而遭遇到ORA-00600 2662号错误,这里给出一个完整的例子及解决过程. 现象及解决--这个没拍照参考EYGLE的吧 Sun Dec 11 18:02:25 2005 Errors in file /opt/oracle/a

简单记录一次ORA-00600: internal error code, arguments: [4194]

接上一篇,在搞定SCN问题后,又遇到ORA-600[4194]/[4193]报错. 故障现象: OPEN数据库时报错:ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [] 4193:表示undo和redo不一致(Arg [a] Undo record seq number,Arg [b] Redo record seq number ): 4194:表示也是undo和redo不一致(Arg [a

ios状态栏调整 简单动画的知识点

首先状态栏式view的属性,所以在viewController中直接重写: /** 修改状态栏 */ - (UIStatusBarStyle)preferredStatusBarStyle { // 修改状态栏的颜色(白色) return UIStatusBarStyleLightContent; } // 这种返回值没有*的说明不是对象,那么不是枚举就是结构体,大多数情况是枚举,所以取值也比较简单,一般是返回值后边加上状态: 在UIKit学习中常用的块动画: // 块动画 animateWit

iOS设计模式 - (3)简单工厂模式

iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40381721 一.简述 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度.将一个具体类的实例化交给一个静态工厂方法来执行. 该模式中的角色包括: 工厂类(Simple Factory): 只包含了创建具体类的静态方法. 抽象产品(Product):

iOS progressview的简单使用

head 代码.. Java代码   #import <UIKit/UIKit.h> @interface ViewController : UIViewController { UIProgressView *progressview; UIProgressView *progressviewbar; NSTimer *timer; } @property(retain,nonatomic) IBOutlet UIProgressView *progressview; @property(r