Cocos2dx2.2.3版本的确修复很了BUG,于是我兴高采烈的准备着手android 动态壁纸的开发,像微云,AndEngine这些知名的游戏引擎,支持Android Live Wallpaper是基本的事情。竟然发现Cocos2dx没有对Android Live Wallpaper的支持?!你们知道Android Live Wallpaper 能支持游戏引擎的开发有多重要吗?
一气之下,自己写了一个,代码如下:
protected class Cocos2dxEngine extends Engine implements Cocos2dxHelperListener { private MySurfaceView _surfaceView; private MyRenderer _renderer; private boolean _isFinished = false; private boolean _isPause = false; public Cocos2dxEngine() { for (Cocos2dxEngine engine : _runningEngineList) { engine._isPause = true; } if (_runningEngineList.contains(this) == false) { _runningEngineList.add(this); } } @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); try { _renderer = new MyRenderer(); _surfaceView = new MySurfaceView(LDCocos2dxWallpaperService.this); _surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); _surfaceView.setCocos2dxRenderer(_renderer); Cocos2dxHelper.init(LDCocos2dxWallpaperService.this, this); setTouchEventsEnabled(true); } catch (Exception e) { e.printStackTrace(); } } @Override public void onVisibilityChanged(boolean visible) { super.onVisibilityChanged(visible); if (visible) { Cocos2dxHelper.onResume(); _surfaceView.onResume(); this._isPause = false; LDCocos2dxWallpaperService.this.onResume(); } else { Cocos2dxHelper.onPause(); _surfaceView.onPause(); this._isPause = true; LDCocos2dxWallpaperService.this.onPause(); } } @Override public void onTouchEvent(MotionEvent event) { super.onTouchEvent(event); _surfaceView.onTouchEvent(event); } @Override public void onDestroy() { _isFinished = true; _runningEngineList.remove(this); super.onDestroy(); _renderer.onDestory(); _surfaceView.onDestory(); for (Cocos2dxEngine engine : _runningEngineList) { engine._isPause = false; } } @Override public void showDialog(String pTitle, String pMessage) { } @Override public void showEditTextDialog(String pTitle, String pMessage, int pInputMode, int pInputFlag, int pReturnType, int pMaxLength) { } @Override public void runOnGLThread(Runnable pRunnable) { if (_isFinished == false && _isPause == false) { _surfaceView.queueEvent(pRunnable); } } private class MySurfaceView extends Cocos2dxGLSurfaceView { public MySurfaceView(Context context) { super(context); } @Override public SurfaceHolder getHolder() { return getSurfaceHolder(); } public void onDestory() { super.onDetachedFromWindow(); } } private class MyRenderer extends Cocos2dxRenderer { public MyRenderer() { super(false); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig pEGLConfig) { } @Override public void onSurfaceChanged(GL10 pGL10, int pWidth, int pHeight) { setScreenWidthAndHeight(pWidth, pHeight); super.onSurfaceCreated(pGL10, null); } public void onDestory() { handleOnExit(); } @Override public void onDrawFrame(GL10 gl) { if (_isFinished == false && _isPause == false) { super.onDrawFrame(gl); } } } } ``` 发现还有一堆问题·,加载时间过长,黑屏 也时有发生。你们开发人员有人能支持android 动态壁纸的开发吗?能让我们这些开发者省点心吗?