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();

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