block实现场景切换

来源:互联网 发布:宇宙大小的相关数据 编辑:程序博客网 时间:2024/04/27 05:54

1        loadingLayer=[LoadingLayernode];

2         

3          谛力泰克网app定制http://www.dilitech.com

4            [self addChild:loadingLayer];

5            dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

6            dispatch_async(queue, ^{

7                //声明一个Pool来自动管理指针

8                NSAutoreleasePool *autoreleasepool =[[NSAutoreleasePool alloc] init];

9                

10             //加锁保护,并保证与Cocos2d本身的异步加载函数本身不冲突

11             //也就是保护ShareGroup不被同时修改

12     //       [[CCTextureCachesharedTextureCache].contextLock lock];

13             

14             //auxGLcontext必须是static

15             //

16             if( auxGLcontext == nil ) {

17                 //新建一个EAGLContext然后与已经生成与使用的OpenGL公用一个ShareGroup

18                 auxGLcontext = [[EAGLContextalloc]initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:[[[[CCDirectorsharedDirector] openGLView] context] sharegroup]];

19                 

20                 //检查是否

21                 if( ! auxGLcontext )CCLOG(@"cocos2d: TextureCache: Could not create EAGL context");

22             }

23             

24             CCScene *scene;

25             

26             //设置Context,拥有修改权利,接下来我们就可以正常的使用我们生成我们自己的Scene

27             if( [EAGLContextsetCurrentContext:auxGLcontext] ) {

28                 //初始化

29                 scene = [LevelController scene];

30                 [[CCDirector sharedDirector]replaceScene:scene];

31             }

32             

33             //回到主线程,保留并解锁,然后等等主线程接收方响应并开始切换场景

34             dispatch_async(dispatch_get_main_queue(),^{

35                 //防止指针丢失

36     //           nextScene = [scene retain];

37                 //lock用来判断scene是否生存完

38     //           lock = NO;

39             });

40             

41             //恢复

42             [EAGLContext setCurrentContext:nil];

43     //       [[CCTextureCachesharedTextureCache].contextLock unlock];

44             [autoreleasepool release];

45         });

复制代码

如果用下列常规方式回出现场景图片与动画均显示不了的问题

46     loadingLayer=[LoadingLayernode];

47         [self addChild:loadingLayer];

48     dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

49     dispatch_async(queue, ^{

50             CCScene *levelScene = [LevelControllerscene];

51             [[CCDirector sharedDirector]replaceScene:levelScene];

52     dispatch_async(dispatch_get_main_queue(),^{

53                 [loadingLayer removeFromParentAndCleanup:YES];

54             });

55         });

复制代码

 

 

 

  文章出处:谛力泰克网 app开发 http://www.dilitech.com

原创粉丝点击