最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
cocos2dx assets根目录录取失败
在使用Cocos2d-x进行开发时,可能会遇到Assets根目录创建失败的问题,本文将结合具体案例详细分析该问题的成因及可能的解决办法。
问题背景
本人是Cocos2d-x的初学者,在开发过程中遇到了Assets根目录创建失败的困扰。以下是我的开发环境和操作步骤:
- 开发环境:
- Android NDK版本:android-ndk-r9d
- Cocos2d-x版本:cocos2d-x-3.0rc0
- 操作步骤:
- 按照这篇博客的指引,配置Python环境变量。
- 使用
cocos new命令新建工程。 - 使用
cocos run命令编译并执行工程。
在链接手机进行测试时,第一次运行较为顺利。之后进行了如下操作:
- 修改了CPP文件中的字符串(如“Hello World”),编译并运行,一切正常。
- 从网上下载了一张尺寸为570 * 355的PNG图片,直接将其放入
assets文件夹中,未修改任何文件,也未使用该资源。再次执行cocos run -p android命令时,出现报错,并且assets文件夹被自动删除,其中的所有资源(包括原来的图片)都丢失了。
问题原因分析
1. Cocos2d-x工程资源编译机制
在Cocos2d-x工程中,assets目录是编译生成的。追加的资源应放置在Resources目录下,编译时这些资源会自动复制到assets目录。当执行cocos run命令时,会先删除assets目录,然后重新载入资源。
2. 直接修改assets目录资源的问题
如果直接修改assets目录中的资源,可能会引发WindowsError: [Error 5]错误。网上有观点认为这是Python权限问题,不过在此暂不深入探究。
错误日志分析
以下是执行cocos run -p android命令时的详细错误日志:
D:\\Cocos2dxDemo\\HelloNew2dx>cocos run -p android
D:\\Cocos2dxDemo\\HelloNew2dx>python D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py run -p android
Runing command: compile
Building mode: debug
building native
The Selected NDK toolchain version was 4.8 !
running: 'D:\\android-ndk-r9d\\ndk-build -j4 -C D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android -j1 NDK_MODULE_PATH=D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d;D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/cocos;D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/external'
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml
Android NDK: WARNING:D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/cocos/2d/Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
Android NDK: WARNING:D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/cocos/2d/platform/android/Android.mk:cocos2dxandroid_static: LOCAL_LDLIBS is always ignored for static libraries
make.exe: Entering directory `D:/Cocos2dxDemo/HelloNew2dx/proj.android'
[armeabi] Install : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
make.exe: Leaving directory `D:/Cocos2dxDemo/HelloNew2dx/proj.android'
building apk
Android platform not specified, searching a default one...
android-19 is found
Traceback (most recent call last):
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py", line 578, in <module>
run_plugin(command, argv, plugins)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py", line 558, in run_plugin
dependencies_objects[dep_name] = run_plugin(dep_name, argv, plugins)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py", line 560, in run_plugin
plugin.run(argv, dependencies_objects)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/project_compile.py", line 636, in run
self.build_android()
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/project_compile.py", line 140, in build_android
builder.do_build_apk(sdk_root, ant_root, android_platform, build_mode, output_dir)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/build_android.py", line 125, in do_build_apk
self._copy_resources()
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/build_android.py", line 172, in _copy_resources
os.mkdir(assets_dir)
WindowsError: [Error 5] : 'D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\assets'
从日志中可以看出,错误发生在执行os.mkdir(assets_dir)时,提示WindowsError: [Error 5],这表明在尝试创建assets目录时遇到了权限问题。
解决建议
对于像我这样的新手,在使用Cocos2d-x开发时,应遵循其资源管理机制,将追加的资源放置在Resources目录下,避免直接修改assets目录中的资源,以防止出现类似的权限问题。
希望以上分析能为遇到相同问题的开发者提供一些帮助,如果你有更好的解决办法,欢迎交流分享。