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