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

在开发安卓时,有时候会用的一些比较炫酷的动画,当用安卓原生的属性动画和帧动画又不好实现,往往会用一些辅助工具,比如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();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章