作为一个跨平台游戏引擎,连android 动态壁纸组件都不支持,好意思?

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

确实,我都为2dx团队难过。

强力建议:lz 为了让2dx团队明白这个道理。你是否可以去github fork 一个 2dx。然后把这个功能添加上。不紧紧是android,另外在把iphone 也加上这个功能,对了,还有win8等。

广大2dx程序员看到你这个炫酷叼炸天得fork, 肯定都会用你得了这个fork了。lz 你也算是为我等屌丝程序员谋福利了。

主要是我现在写这个wallpaper 插件问题还很多。
写到生气了 还解决不了,加载速度慢,崩溃,黑屏问题。
就只能在这里抱怨2dx团队了.

perfect! try to help in development!

you have the same result?

06-15 00:37:38.647: D/dalvikvm(8781): Trying to load lib /data/app-lib/org.cocos2dx.cpp_empty_test-2/libcpp_empty_test.so 0x420145b8
06-15 00:37:38.677: D/dalvikvm(8781): Added shared lib /data/app-lib/org.cocos2dx.cpp_empty_test-2/libcpp_empty_test.so 0x420145b8
06-15 00:37:38.687: D/JniHelper(8781): JniHelper::setJavaVM(0x419d5f50), pthread_self() = 1074987368
06-15 00:37:38.797: D/AndroidRuntime(8781): Shutting down VM
06-15 00:37:38.797: W/dalvikvm(8781): threadid=1: thread exiting with uncaught exception (group=0x41d3cba8)
06-15 00:37:38.807: E/AndroidRuntime(8781): FATAL EXCEPTION: main
06-15 00:37:38.807: E/AndroidRuntime(8781): Process: org.cocos2dx.cpp_empty_test, PID: 8781
06-15 00:37:38.807: E/AndroidRuntime(8781): java.lang.NullPointerException
06-15 00:37:38.807: E/AndroidRuntime(8781): at org.cocos2dx.cpp_empty_test.AppActivity$Cocos2dxEngine.(AppActivity.java:41)
06-15 00:37:38.807: E/AndroidRuntime(8781): at org.cocos2dx.cpp_empty_test.AppActivity.onCreateEngine(AppActivity.java:30)
06-15 00:37:38.807: E/AndroidRuntime(8781): at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:1028)
06-15 00:37:38.807: E/AndroidRuntime(8781): at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
06-15 00:37:38.807: E/AndroidRuntime(8781): at android.os.Handler.dispatchMessage(Handler.java:102)
06-15 00:37:38.807: E/AndroidRuntime(8781): at android.os.Looper.loop(Looper.java:136)
06-15 00:37:38.807: E/AndroidRuntime(8781): at android.app.ActivityThread.main(ActivityThread.java:5017)
06-15 00:37:38.807: E/AndroidRuntime(8781): at java.lang.reflect.Method.invokeNative(Native Method)
06-15 00:37:38.807: E/AndroidRuntime(8781): at java.lang.reflect.Method.invoke(Method.java:515)
06-15 00:37:38.807: E/AndroidRuntime(8781): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-15 00:37:38.807: E/AndroidRuntime(8781): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-15 00:37:38.807: E/AndroidRuntime(8781): at dalvik.system.NativeStart.main(Native Method)

哦,不错哦,牛逼

please share all the code! Can give a look at Iresourtseloader?

动态壁纸不是主流,而且并不是所有平台都支持动态壁纸,所以既然cocos2d-x是跨平台引擎,就没必要加入动态壁纸库,研发团队与其花时间去添加动态壁纸api,还不如去做点其他事情更有意义
再加上现在你要想在国内应用商店上架个动态壁纸是很难的,费力不讨好的事情
楼主要是想弄,可以参照AndEngine的api自己做个2dx的扩展库

自己写了一个 …… 代码如下 ……… …………………………………………………………………… 是我打开的方式不对么 你写的这些东西能代表什么 一气之下什么东西摔碎了么