CCDirector类负责初始化OpenGL ES和控制scenes之间的转换。CCDirector类是单例的,它以栈的方式处理scenes的调用,并且知道当前哪个scene是激活状态。
CCDirector主要负责当前窗口的内容,并且负责场景的切换和管理,它同时还还负责:
1. OpenGL中上下文的初始化(当然这在XNA中很多东西没有了)
2. 设置投影方式,默认为3D透视投影
3. 设置屏幕方向
4. 它是一个单实例
5. 设置着色器一些通用参数
在实际的游戏开发中,当很多地方都要用到某个场景时,比如设置游戏音效和音量的场景,pushScene和popScene方法就非常有用。我们可以单击Setting,调用pushScene进入设置场景,然后在设置场景中单击Back按钮调用popScene,游戏就会返回上一个状态。无论是在主菜单、游戏场景或其他地方打开设置菜单,popScene方法都会正常工作,无需随时记录设置菜单的状态。
//将UIKit坐标系中的坐标转换为OpenGLES坐标系中的坐标。
//下面的代码获取了触摸点的坐标,并将其转换成Cocos2D可以使用的坐标。该方法通常用于转换多点触摸点的坐标。
UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:[myTouch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
//虽然Cocos2D的功能很强大,但有时在游戏中也需要使用UIKit的元素,比如使用虚拟键盘输入玩家的昵称等,这时就需要使用该方法将Cocos2D中的坐标转换为UIKit中的坐标。
textField.center = [[CCDirector sharedDirector] convertToUI:ccp(240, 250)];
//清除所有自动缓存的Cocos2D数据。
//该方法将会清除CCTextureCache和CCLabelBMFont中的缓存。但CCSpriteFrameCache中的缓存不会被清除,需要手动清除。
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[CCDirector sharedDirector] purgeCachedData];
}
//启用或禁用OpenGLES的Alpha(透明)混合处理。
[[CCDirector sharedDirector]setAlphaBlending:YES];
//启用或禁用OpenGLES的位深测试。
[[CCDirector sharedDirector]setDepthTest:YES];
//获取导演对象的单例
CCDirector *director = [CCDirector sharedDirector];
//停止动画,屏幕上将不会绘制东西。示例代码如下:
[[CCdirector sharedDirector] stopAnimation];
isPaused:CCDirector是否被暂停。变量类型为BOOL。
sendCleanupToScene:判断被替换的场景是否收到cleanup(清除)消息。如果新场景是弹出的,原来的场景不会收到清除消息;如果新场景会直接替代旧场景,则原来的场景会收到清除消息。变量类型为BOOL
CCDirector主要负责当前窗口的内容,并且负责场景的切换和管理,它同时还还负责:
1. OpenGL中上下文的初始化(当然这在XNA中很多东西没有了)
2. 设置投影方式,默认为3D透视投影
3. 设置屏幕方向
4. 它是一个单实例
5. 设置着色器一些通用参数
//获取设备的宽高
CGSize size=[[CCDirector sharedDirector] winSize];
//将场景对象压入栈中,并激活(此时不能有已经激活的场景,因此该方法常用于刚进游戏时)
-(void) runWithScene: (CCScene*)scene
//替换当前激活的场景,同时将旧场景从堆栈中删除,新场景压入堆栈。
-(void) replaceScene: (CCScene*)scene
//添加新的场景进栈,并将其激活。 挂起当前运行的场景,并压栈到待运行场景队列。
-(void) pushScene: (CCScene*) scene
//当前激活的场景出栈,激活上一个场景。
-(void) popScene
//暂停。用法:[[CCDirector sharedDirector] pause];
-(void) pause
//恢复。
在实际的游戏开发中,当很多地方都要用到某个场景时,比如设置游戏音效和音量的场景,pushScene和popScene方法就非常有用。我们可以单击Setting,调用pushScene进入设置场景,然后在设置场景中单击Back按钮调用popScene,游戏就会返回上一个状态。无论是在主菜单、游戏场景或其他地方打开设置菜单,popScene方法都会正常工作,无需随时记录设置菜单的状态。
//将UIKit坐标系中的坐标转换为OpenGLES坐标系中的坐标。
//下面的代码获取了触摸点的坐标,并将其转换成Cocos2D可以使用的坐标。该方法通常用于转换多点触摸点的坐标。
UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:[myTouch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
//虽然Cocos2D的功能很强大,但有时在游戏中也需要使用UIKit的元素,比如使用虚拟键盘输入玩家的昵称等,这时就需要使用该方法将Cocos2D中的坐标转换为UIKit中的坐标。
textField.center = [[CCDirector sharedDirector] convertToUI:ccp(240, 250)];
//清除所有自动缓存的Cocos2D数据。
//该方法将会清除CCTextureCache和CCLabelBMFont中的缓存。但CCSpriteFrameCache中的缓存不会被清除,需要手动清除。
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[CCDirector sharedDirector] purgeCachedData];
}
//启用或禁用OpenGLES的Alpha(透明)混合处理。
[[CCDirector sharedDirector]setAlphaBlending:YES];
//启用或禁用OpenGLES的位深测试。
[[CCDirector sharedDirector]setDepthTest:YES];
//获取导演对象的单例
CCDirector *director = [CCDirector sharedDirector];
//停止动画,屏幕上将不会绘制东西。示例代码如下:
[[CCdirector sharedDirector] stopAnimation];
isPaused:CCDirector是否被暂停。变量类型为BOOL。
sendCleanupToScene:判断被替换的场景是否收到cleanup(清除)消息。如果新场景是弹出的,原来的场景不会收到清除消息;如果新场景会直接替代旧场景,则原来的场景会收到清除消息。变量类型为BOOL