前天复习了下Python ,目的如下:
做这些主要是为了方便工作,提高效率。
环境说明
cocos2dx 3.0
OS X 10.9.4
Python 2.7
工具目录结构 贴上cocos-console
文件夹下的文件结构:
1 cocos2d-console/
├── README.md
├── bin
│ ├── cocos
│ ├── cocos.bat
│ ├── cocos.py
│ ├── cocos2d.ini
│ ├── cocos_project.py
│ └── install.py
└── plugins
├── plugin_clean.py
├── plugin_dist.py
├── plugin_jscompile[+]
├── plugin_update.py
├── plugin_version.py
├── project_compile
│ ├── __init__.py
│ ├── build_android.py
│ ├── build_web[+]
│ ├── project_compile.py
├── project_deploy.py
├── project_new
│ ├── __init__.py
│ ├── env.json
│ ├── project_new.py
│ └── ui.py
└── project_run
├── __init__.py
├── __init__.pyc
├── bin
│ └── ios-sim
└── project_run.py
由于对Python
不太熟悉,所以找出了这些文件的Python的公共的类库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 from Queue import *from SimpleHTTPServer import SimpleHTTPRequestHandlerfrom argparse import ArgumentParserfrom collections import OrderedDictfrom contextlib import contextmanagerfrom core import create_platform_projectsfrom optparse import OptionParserfrom queue import *from tarfile import TarFilefrom threading import Threadfrom xml.dom import minidomimport BaseHTTPServerimport ConfigParserimport getoptimport httplibimport inspectimport jsonimport osimport platformimport reimport shutilimport subprocessimport sysimport threadingimport timeimport urllibimport webbrowserimport _winregfrom Tkinter import *from tkFileDialog import *from tkMessageBox import *from tkinter import *from tkinter.filedialog import *from tkinter.messagebox import *``` 自然是先贴出入口函数啦: ```py if __name__ == "__main__" : if not _check_python_version(): exit() plugins_path = os.path.join(os.path.dirname(__file__), '..' , 'plugins' ) sys.path.append(plugins_path) if len(sys.argv) == 1 or sys.argv[1 ] in ('-h' , '--help' ): help() try : plugins = parse_plugins() command = sys.argv[1 ] argv = sys.argv[2 :] if command in plugins: run_plugin(command, argv, plugins) else : if len(sys.argv) > 2 : command = sys.argv[1 ] + '_' + sys.argv[2 ] argv = sys.argv[3 :] if command in plugins: run_plugin(command, argv, plugins) else : else : except Exception as e:
在讲run_plugin
的实现之前,我觉得有必要说说CCPlugin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 class CCPlugin (object) : def _run_cmd (self, command) : CMDRunner.run_cmd(command, self._verbose) def _output_for (self, command) : return CMDRunner.output_for(command, self._verbose) @staticmethod def _log_path () : log_dir = os.path.expanduser("~/.cocos2d" ) if not os.path.exists(log_dir): os.mkdir(log_dir) return os.path.join(log_dir, "cocos2d.log" ) @staticmethod def depends_on () : return None @staticmethod def plugin_category () : return "" @staticmethod def plugin_name () : pass @staticmethod def brief_description (self) : pass def __init__ (self) : pass def init (self, args) : self._verbose = (not args.quiet) self._platforms = cocos_project.Platforms(self._project, args.platform) if self._platforms.none_active(): self._platforms.select_one() def run (self, argv) : pass def _add_custom_options (self, parser) : pass def _check_custom_options (self, args) : pass def parse_args (self, argv) :
parse_plugins
主要做了两件事情:
读取cocos2d.ini
配置文件
根据配置文件,将插件加载到列表里面,做一些检查之后返回该列表
这里不贴上parse_plugins
的代码,但是附上cocos2d.ini
的主要内容:
1 2 3 4 5 6 [plugins] project_new.CCPluginNew project_compile.CCPluginCompile project_run.CCPluginRun project_deploy.CCPluginDeploy plugin_jscompile.CCPluginJSCompile
现在,看了cocos2d.ini
主要内容之后,再结合根目录下的目录结构和parse_plugins
的实现。
可以知道cocos-console
这个工具是通过插件的类型project
,插件的名字new
,和对应的类CCPluginNew
做两种事情:
加载plugins/project_new
的__init__.py
文件。
直接加载plugins
的下的plugin_clean_.py
文件。
若你只需要从CCPlugin
继承过来,实现其接口,那就直接保存成一个文件。否则你需要新建一个同名文件夹,然后再文件夹下在加入一个__init__.py
文件。这样做的目的主要还是保证插件的封装性。
至于这个__init__.py
文件,就很简单的引入CCPluginXXXXX
1 from project_new import CCPluginNew
总结 若要在cocos-console下自定义一个新的插件只需做两件事:
在plugin
文件夹下按照要求实现你所需要的功能
在cocos2d.ini
中加入你插件的配置信息
接着就可以欢快的使用自己的插件啦~~~~
xxhash xxhash – Android防重编译