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 动态壁纸的开发吗?能让我们这些开发者省点心吗?