cocos-2d sufaceView 与活动通信导致变黑变白问题

来源:互联网 发布:淘宝产品打折功能收费 编辑:程序博客网 时间:2024/05/16 00:29

在开发安卓时,有时候会用的一些比较炫酷的动画,当用安卓原生的属性动画和帧动画又不好实现,往往会用一些辅助工具,比如cocos2d这样的游戏开发工具包。cocos2d-android用来实现一些安卓的动画比起cocos2d-x和cocosCreator更方便。虽然现在也没人维护,但也不妨碍我们使用它。
如果你对cocosAndroid有了解的话

CCGLSurfaceView surfaceView = new CCGLSurfaceView(this);

这个surfaceView 就是cocos自己绘制的View,我们使用的它来实现动画,可以直接将它添加到我们活动布局文件的view中。比如我在活动布局文件中定义了一个framLayout,然后在活动中把surfaceView 直接add到framLayout中。这个framLayout显示就是cocos的sufaceView了。

 if (gameView != null)            gameView.addView(surfaceView);  //导演        director = CCDirector.sharedDirector();        director.attachInView(surfaceView);        director.setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);// 设置游戏方向 水平        director.setDisplayFPS(false);//显示帧率        director.setScreenSize(1280, 800);//设置屏幕的大小   可以自动屏幕适配        CCScene scene = CCScene.node();        gameLayer = new ChoiceWordLayer(mhander);        scene.addChild(gameLayer);        director.runWithScene(scene);

这样你可以自己在cocos的图层中去绘制想要的动画效果了。但是这样你在cocos的图层与活动之间通信是需要hander的,而且可能你点击活动里面的某个按钮去切换cocos的场景图层,就会导致场景变白或者变黑的问题。因为活动布局的suface和cocos图层的布局不是同一个suface,一般主线程绘制视图只有一个suface。在主活动的suface中改变另一个suface的视图。可能就会导致这种问题。怎么去解决呢?

 /**     * 切换界面     *     * @param layer//切换的图层     */    public static void changeScene(CCLayer layer) {        //得到导演        CCDirector director = CCDirector.sharedDirector();        CCScene menuScence = CCScene.node();        //参数1 场景切换时间 参数2 真实切换的场景        //CCJumpZoomTransition transition=CCJumpZoomTransition.transition(2f,menuScence);        //CCFlipXTransition transition=CCFlipXTransition.transition(1.5f,menuScence,1);        CCZoomFlipAngularTransition transition = CCZoomFlipAngularTransition.transition(1.5f, menuScence, 1);        menuScence.addChild(layer);        //导演替换场景        director.replaceScene(transition);          **director.onPause(); //主线程通知刷新界面重新绘制        director.onResume();**    }

切换图层的时候加上这两个,先停掉cocos的suface,再重新开启它,就不会出现那种黑白问题了。
director.onPause(); //主线程通知刷新界面重新绘制
directonResume();

原创粉丝点击