﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-colorful-随笔分类-android cocos2dx</title><link>http://www.cppblog.com/colorful/category/20936.html</link><description>zc qq:1337220912</description><language>zh-cn</language><lastBuildDate>Thu, 12 Feb 2015 11:46:10 GMT</lastBuildDate><pubDate>Thu, 12 Feb 2015 11:46:10 GMT</pubDate><ttl>60</ttl><item><title>cocos2dx lua protobuf</title><link>http://www.cppblog.com/colorful/archive/2015/02/12/209802.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 12 Feb 2015 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/02/12/209802.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209802.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/02/12/209802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209802.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209802.html</trackback:ping><description><![CDATA[<div><div>http://blog.csdn.net/weyson/article/details/17024325</div><div>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html</div><div>http://blog.csdn.net/w00w12l/article/details/39316321</div><br />protoc-gen-lua下载地址: <em><strong><a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color:#0000FF;"></span></a></strong><a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color:#0000FF;"></span></a></em><a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color: #0000ff;">https://github.com/sean-lin/protoc-gen-lua</span></a><br /><br />1/ 先到protobuf的python目录下执行<br />&nbsp;&nbsp;&nbsp; python setup.py build<br />&nbsp;&nbsp;&nbsp; python setup.py install<br /><br />2/ 在protoc-gen-lua的plugin目录中新建protoc-gen-lua.bat, 内容如下:<br />@python 目录\protoc-gen-lua\plugin\protoc-gen-lua<br /><br />3/ 用protoc把proto文件生成lua文件<br />&nbsp; protoc --lua_out=./ --plugin=protoc-gen-lua="目录\protoc-gen-lua.bat"&nbsp; test.proto<br /><br />4/ 将protoc-gen-lua/protobuf下的pb.c 放到工程的Classes下, 并加入到c++工程中<br /><br />5/ 将protoc-gen-lua/protobuf上的所有lua文件放到工程的src目录(lua目录)下<br /><br />6/ AppDelegate.cpp 添加代码<br />extern "C"{<br />&nbsp;&nbsp;&nbsp; int luaopen_pb(lua_State* L);<br />}<br />在applicationDidFinishLaunching()中调用 luaopen_pb(state);<br /><br />---------------------------------------------------------------------------<br /><div>&nbsp;&nbsp;&nbsp; require "src/xy/person_pb" &nbsp;<br />&nbsp;&nbsp;&nbsp; local msg = person_pb.Person() &nbsp;<br />&nbsp;&nbsp;&nbsp; msg.id = 100&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; msg.name = "foo"&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; msg.email = "bar"&nbsp; &nbsp;<br /><br />&nbsp;&nbsp;&nbsp; local pb_data = msg:SerializeToString()&nbsp; -- Parse Example &nbsp;<br />&nbsp;&nbsp;&nbsp; print("create:", msg.id, msg.name, msg.email, pb_data) &nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp; local msg = person_pb.Person()&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; msg:ParseFromString(pb_data)&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; print("parser:", msg.id, msg.name, msg.email, pb_data)</div><br />---------------------------------------------------------------------------<br />移植到android 记得将pb.c添加到proj.android\jni\Android.mk中<br /><br />&nbsp;</div><img src ="http://www.cppblog.com/colorful/aggbug/209802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-02-12 11:42 <a href="http://www.cppblog.com/colorful/archive/2015/02/12/209802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quick-Cocos2d-x 集成 Google protobuf 方法</title><link>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 17 Jan 2015 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209557.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209557.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209557.html</trackback:ping><description><![CDATA[<div>http://cn.cocos2d-x.org/tutorial/show?id=506</div><br /><div><div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	本文将向您介绍Quick-Cocos2d-x集成google protobuf的方法。 &nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第一步 &nbsp; 需要最新的protobuf 类库和解析程序。&nbsp;</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	下载地址：<a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color:#0000FF;">https://github.com/sean-lin/protoc-gen-lua</span></a>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	git clone&nbsp;<a href="https://github.com/sean-lin/protoc-gen-lua.git" target="_blank"><span style="color:#0000FF;">https://github.com/sean-lin/protoc-gen-lua.git</span></a>&nbsp;到任意的一个地方 </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后，可以得到重要的两个目录 </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<span style="line-height:1.5;"> </span></p><div><div id="highlighter_782255"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">protoc-gen-lua/plugin/&nbsp; </code></div><div number2="" index1=""  alt1"=""><code plain"="">protoc-gen-lua/protobuf/</code></div></div></td></tr></tbody></table></div></div> &nbsp;  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第二步， 需要使用protoc &#8212;lua_out=. 这种方法， 将我们自己的*.proto 的文件解析成lua文件</strong>  </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	plugin目录是提供将buffer 文件解析成lua 版本的类库， 需要python 支持。 &nbsp;如果已经编译了google 官方的protoc 那个程序， 只需要在系统PATH环境变量总追加plugin目录就好: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_807689"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">export PATH={protoc-gen-lua DIR }/plugin:$PATH</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	关于protoc的编译另请google . </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	如果解析不出lua文件来， 可以手动志信一下plugin/protoc-gen-lua的程序， 他应该是+x 的权限(chmod +x plugin/protoc-gen-lua) </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	细节的安装步骤可以参考&nbsp;<a href="https://code.google.com/p/protoc-gen-lua/" target="_blank"><span style="color:#0000FF;">https://code.google.com/p/protoc-gen-lua/</span></a>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第三步 ， 将protobuf 集成到quick 中</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	protoc-gen-lua/protobuf/ 目录就是要编译到quick-cocos2d-x目录里面的部分。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	现在， 我们只需要 protoc-gen-lua/protobuf/pb.c 这个文件&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	先确定自己的quick-cocos2d-x lua扩展目录： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_519328"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">/quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	所有lua 的c/c++现成扩展,都可以直接放到这里。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	将pb.c这个文件复制到 lua_extension目录下， 最好独立一个目录， 免得扩展多了乱。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	这是我的目录结构: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_734895"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后开始修改扩展程序配置文件, lua_extensions.c </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	路径为： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_466030"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	目前是一个不足60行的小文件， 我打算全部贴进来： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_924060"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div><div number22="" index21=""  alt1"="">22</div><div number23="" index22=""  alt2"="">23</div><div number24="" index23=""  alt1"="">24</div><div number25="" index24=""  alt2"="">25</div><div number26="" index25=""  alt1"="">26</div><div number27="" index26=""  alt2"="">27</div><div number28="" index27=""  alt1"="">28</div><div number29="" index28=""  alt2"="">29</div><div number30="" index29=""  alt1"="">30</div><div number31="" index30=""  alt2"="">31</div><div number32="" index31=""  alt1"="">32</div><div number33="" index32=""  alt2"="">33</div><div number34="" index33=""  alt1"="">34</div><div number35="" index34=""  alt2"="">35</div><div number36="" index35=""  alt1"="">36</div><div number37="" index36=""  alt2"="">37</div><div number38="" index37=""  alt1"="">38</div><div number39="" index38=""  alt2"="">39</div><div number40="" index39=""  alt1"="">40</div><div number41="" index40=""  alt2"="">41</div><div number42="" index41=""  alt1"="">42</div><div number43="" index42=""  alt2"="">43</div><div number44="" index43=""  alt1"="">44</div><div number45="" index44=""  alt2"="">45</div><div number46="" index45=""  alt1"="">46</div><div number47="" index46=""  alt2"="">47</div><div number48="" index47=""  alt1"="">48</div><div number49="" index48=""  alt2"="">49</div><div number50="" index49=""  alt1"="">50</div><div number51="" index50=""  alt2"="">51</div><div number52="" index51=""  alt1"="">52</div><div number53="" index52=""  alt2"="">53</div><div number54="" index53=""  alt1"="">54</div><div number55="" index54=""  alt2"="">55</div><div number56="" index55=""  alt1"="">56</div><div number57="" index56=""  alt2"="">57</div><div number58="" index57=""  alt1"="">58</div><div number59="" index58=""  alt2"="">59</div><div number60="" index59=""  alt1"="">60</div><div number61="" index60=""  alt2"="">61</div><div number62="" index61=""  alt1"="">62</div><div number63="" index62=""  alt2"="">63</div><div number64="" index63=""  alt1"="">64</div><div number65="" index64=""  alt2"="">65</div><div number66="" index65=""  alt1"="">66</div><div number67="" index66=""  alt2"="">67</div><div number68="" index67=""  alt1"="">68</div><div number69="" index68=""  alt2"="">69</div><div number70="" index69=""  alt1"="">70</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#include "lua_extensions.h"&nbsp; </code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;</code>&nbsp;</div><div number3="" index2=""  alt2"=""><code preprocessor"="">#if __cplusplus&nbsp; </code></div><div number4="" index3=""  alt1"=""><code keyword=""  bold"="">extern</code> <code string"="">"C"</code> <code plain"="">{&nbsp; </code></div><div number5="" index4=""  alt2"=""><code preprocessor"="">#endif&nbsp; </code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number7="" index6=""  alt2"=""><code comments"="">// cjson&nbsp; </code></div><div number8="" index7=""  alt1"=""><code preprocessor"="">#include "cjson/lua_cjson.h"&nbsp; </code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number11="" index10=""  alt2"=""><code comments"="">// zlib&nbsp; </code></div><div number12="" index11=""  alt1"=""><code preprocessor"="">#include "zlib/lua_zlib.h"&nbsp; </code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number15="" index14=""  alt2"=""><code comments"="">// lpack&nbsp; </code></div><div number16="" index15=""  alt1"=""><code preprocessor"="">#include "lpack/lpack.h"&nbsp; </code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number19="" index18=""  alt2"=""><code comments"="">// socket&nbsp; </code></div><div number20="" index19=""  alt1"=""><code preprocessor"="">#include "socket/luasocket.h"&nbsp; </code></div><div number21="" index20=""  alt2"=""><code preprocessor"="">#include "socket/mime.h"&nbsp; </code></div><div number22="" index21=""  alt1"=""><code preprocessor"="">#include "socket/socket_scripts.h"&nbsp; </code></div><div number23="" index22=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number24="" index23=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number25="" index24=""  alt2"=""><code comments"="">// filesystem&nbsp; </code></div><div number26="" index25=""  alt1"=""><code preprocessor"="">#include "filesystem/lfs.h"&nbsp; </code></div><div number27="" index26=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number28="" index27=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number29="" index28=""  alt2"=""><code comments"="">// lsqlite3&nbsp; </code></div><div number30="" index29=""  alt1"=""><code preprocessor"="">#include "lsqlite3/lsqlite3.h"&nbsp; </code></div><div number31="" index30=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number32="" index31=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number33="" index32=""  alt2"=""><code preprocessor"="">#include "protobuf/pb.c"&nbsp;&nbsp; //引用protobuf 库文件&nbsp; </code></div><div number34="" index33=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number35="" index34=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number36="" index35=""  alt1"=""><code keyword=""  bold"="">static</code> <code plain"="">luaL_Reg luax_exts[] = {&nbsp; </code></div><div number37="" index36=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"cjson"</code><code plain"="">, luaopen_cjson_safe},&nbsp; </code></div><div number38="" index37=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"zlib"</code><code plain"="">, luaopen_zlib},&nbsp; </code></div><div number39="" index38=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"pack"</code><code plain"="">, luaopen_pack},&nbsp; </code></div><div number40="" index39=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"socket.core"</code><code plain"="">, luaopen_socket_core},&nbsp; </code></div><div number41="" index40=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"mime.core"</code><code plain"="">, luaopen_mime_core},&nbsp; </code></div><div number42="" index41=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"lfs"</code><code plain"="">, luaopen_lfs},&nbsp; </code></div><div number43="" index42=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"lsqlite3"</code><code plain"="">, luaopen_lsqlite3},&nbsp; </code></div><div number44="" index43=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{NULL, NULL}&nbsp; </code></div><div number45="" index44=""  alt2"=""><code plain"="">};&nbsp; </code></div><div number46="" index45=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number47="" index46=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number48="" index47=""  alt1"=""><code keyword=""  bold"="">void</code> <code plain"="">luaopen_lua_extensions(lua_State *L)&nbsp; </code></div><div number49="" index48=""  alt2"=""><code plain"="">{&nbsp; </code></div><div number50="" index49=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">// load extensions&nbsp; </code></div><div number51="" index50=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">luaL_Reg* lib = luax_exts;&nbsp; </code></div><div number52="" index51=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_getglobal(L, </code><code string"="">"package"</code><code plain"="">);&nbsp; </code></div><div number53="" index52=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_getfield(L, -1, </code><code string"="">"preload"</code><code plain"="">);&nbsp; </code></div><div number54="" index53=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">for</code> <code plain"="">(; lib-&gt;func; lib++)&nbsp; </code></div><div number55="" index54=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{&nbsp; </code></div><div number56="" index55=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushcfunction(L, lib-&gt;func);&nbsp; </code></div><div number57="" index56=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_setfield(L, -2, lib-&gt;name);&nbsp; </code></div><div number58="" index57=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}&nbsp; </code></div><div number59="" index58=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pop(L, 2);&nbsp; </code></div><div number60="" index59=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number61="" index60=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number62="" index61=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">// load extensions script&nbsp; </code></div><div number63="" index62=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">luaopen_socket_scripts(L);&nbsp; </code></div><div number64="" index63=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">luaopen_pb(L);&nbsp;&nbsp; </code><code comments"="">//这是加入的protobuf 扩展注册名&nbsp; </code></div><div number65="" index64=""  alt2"=""><code plain"="">}&nbsp; </code></div><div number66="" index65=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number67="" index66=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number68="" index67=""  alt1"=""><code preprocessor"="">#if __cplusplus&nbsp; </code></div><div number69="" index68=""  alt2"=""><code plain"="">} </code><code comments"="">// extern "C"&nbsp; </code></div><div number70="" index69=""  alt1"=""><code preprocessor"="">#endif</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	至此 ， protobuf 扩展部分就算扩展完成了。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	确认是否成功支持 ， 可以在quick 项目最先被调用的lua文件中追加 require "pb" 做测试。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	*但这时候通过protoc 转码后得到的lua文件还不能被解析。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第四步 从项目中包含protobuf的 lua库</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	protoc-gen-lua/protobuf/这个目录下面， 还有大量的.lua文件， 是用来支持proto转码后的文件解析调用的。 不能少了这些文件。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	复制protoc-gen-lua/protobuf文件夹 到项目中 scripts目录下。 &nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	目录结构应该是这样的： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_997850"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">[PROJECT]/scripts/protobuf/*.lua</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后， 需要告诉框架，从哪里可以引用到它。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	修改main.lua 在require("appxxxxxx") 上面 ， 加入下面的代码： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_501035"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">package.path = package.path .. </code><code string"="">";./protobuf/?.lua;./scripts/protobuf/?.lua;"</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	这个方法， 能保证程序在被编译到手机之后仍然可以继续访问这个库。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	***千万别把转码的proto文件放到[PROJECT]/scripts/protobuf 目录里面.不信可以试试。 </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	现在， 项目支持protobuf 文件的解析了。 </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第五步 &nbsp;重新编译player-x</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	如果不习惯用player-x调试， 这个步骤不是必须的。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	进入player-x qt源码目录 ： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_820149"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">cd quick-cocos2d-x/player/proj.qt</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	使用qmake 文件执行quick-x.pro 文件&nbsp; </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_314279"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">qmake ./quick-x.pro</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	继续： </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	make&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	等待结束， 将得到的quick-x-player文件，&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	放到：quick-cocos2d-x/player/bin/mac/ 目录下， 这样sublime text 装QuickXDev 扩展的直接可以用。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	**如果是mac os 10.9 系统， 可能编译不过去player-x程序。 我遇到了这个问题。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	会提示错误 &nbsp;pb.c:28:10: fatal error: 'endian.h' file not found&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	如果错误信息相同， 修改文件: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_874678"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	查找行: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_715871"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#include &lt;endian.h&gt;</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	临时变更为： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_674497"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#include &lt;machine/endian.h&gt;</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后重新编译 player-x&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	make 就足够了&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	make </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	**player-x 编译完毕后， 千万要将endian.h 引用改回原来的 #include &lt;endian.h&gt; ， 否则打包到手机的时候又回提示文件找不到了。&nbsp; </div></div><img src ="http://www.cppblog.com/colorful/aggbug/209557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-01-17 16:08 <a href="http://www.cppblog.com/colorful/archive/2015/01/17/209557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua注册回调到C++</title><link>http://www.cppblog.com/colorful/archive/2015/01/17/209553.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 17 Jan 2015 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/01/17/209553.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209553.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/01/17/209553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209553.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209553.html</trackback:ping><description><![CDATA[<div>http://cn.cocos2d-x.org/tutorial/show?id=1896</div><br /><div><p><strong>思路</strong></p><p>像所有语言一样，绑定回调主要是执行的任务执行到特定情形的时候，调用对用回调方法。 本文也一样，Lua注册回调到C++的核心思路是，当C代码执行到特定特定情形的时候，调用Lua的方法。</p><p>我这里使用的是用lua_stack直接调用lua的方法，没有使用Cocos2d-x封装的那个dispatcher，因为熟悉那个格式太墨迹了。</p><p><br /></p><p><strong>主要步骤如下</strong></p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>缓存Lua函数在Lua环境中的引用</p></li><li><p>在C代码的地方用C的方式设置好回调</p></li><li><p>在C代码回调函数执行的时候，调用lua函数</p></li></ul><p><br /></p><p><strong>实现</strong></p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>C代码绑定回调，调用Lua函数</p></li></ul><div><div id="highlighter_673942"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div><div number22="" index21=""  alt1"="">22</div><div number23="" index22=""  alt2"="">23</div><div number24="" index23=""  alt1"="">24</div><div number25="" index24=""  alt2"="">25</div><div number26="" index25=""  alt1"="">26</div><div number27="" index26=""  alt2"="">27</div><div number28="" index27=""  alt1"="">28</div><div number29="" index28=""  alt2"="">29</div><div number30="" index29=""  alt1"="">30</div><div number31="" index30=""  alt2"="">31</div><div number32="" index31=""  alt1"="">32</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword=""  bold"="">void</code>&nbsp;<code plain"="">ArmatureNode::registerMovementEventHandler(</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">handler)</code></div><div number2="" index1=""  alt1"=""><code plain"="">{</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">unregisterMovementEventHandler();&nbsp;&nbsp;</code><code comments"="">//移除之前注册的监听</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">_movementHandler&nbsp;=&nbsp;handler;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//缓存lua函数的引用&nbsp;这个后边说</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;dispatcher&nbsp;=&nbsp;getCCEventDispatcher();</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;f&nbsp;=&nbsp;[</code><code keyword=""  bold"="">this</code><code plain"="">](cocos2d::EventCustom&nbsp;*event)&nbsp;</code><code comments"="">//注册c代码形式的回调&nbsp;这里用function做</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;eventData&nbsp;=&nbsp;(dragonBones::EventData*)(event-&gt;getUserData());</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;type&nbsp;=&nbsp;(</code><code color1=""  bold"="">int</code><code plain"="">)&nbsp;eventData-&gt;getType();</code></div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;movementId&nbsp;=&nbsp;eventData-&gt;animationState-&gt;name;</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;lastState&nbsp;=&nbsp;eventData-&gt;armature-&gt;getAnimation()-&gt;getLastAnimationState();</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number15="" index14=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;stack&nbsp;=&nbsp;cocos2d::LuaEngine::getInstance()-&gt;getLuaStack();</code></div><div number16="" index15=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;pushObject(</code><code keyword=""  bold"="">this</code><code plain"="">,&nbsp;</code><code string"="">"db.ArmatureNode"</code><code plain"="">);</code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;pushInt(type);</code></div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;pushString(movementId.c_str(),&nbsp;movementId.size());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//通过LuaStack调用lua里的函数&nbsp;&nbsp;&nbsp;&nbsp;最后一个参数设置参数个数</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;executeFunctionByHandler(_movementHandler,&nbsp;3);</code></div><div number21="" index20=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">};</code></div><div number22="" index21=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number23="" index22=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">dispatcher-&gt;addCustomEventListener(dragonBones::EventData::COMPLETE,&nbsp;f);</code></div><div number24="" index23=""  alt1"=""><code plain"="">}</code></div><div number25="" index24=""  alt2"=""><code keyword=""  bold"="">void</code>&nbsp;<code plain"="">ArmatureNode::unregisterMovementEventHandler(</code><code keyword=""  bold"="">void</code><code plain"="">)</code></div><div number26="" index25=""  alt1"=""><code plain"="">{</code></div><div number27="" index26=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(0&nbsp;!=&nbsp;_movementHandler)</code></div><div number28="" index27=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number29="" index28=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">cocos2d::LuaEngine::getInstance()-&gt;removeScriptHandler(_movementHandler);&nbsp;</code><code comments"="">//移除lua函数的绑定</code></div><div number30="" index29=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">_movementHandler&nbsp;=&nbsp;0;</code></div><div number31="" index30=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number32="" index31=""  alt1"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>提供Lua函数绑定到C的方法 &nbsp;&nbsp;</p></li></ul><p>上边的这个函数直接用cocos里的genbinding.py 是无法正确生成Lua里可调用的接口的，需要手动编写绑定方法.</p><p>说这个得用到Cocos2d-x中提供的一个方法：toluafix_ref_function会把一个Lua栈中的方法转成一个int，以便C++中调用。我会在最后面说这个</p><div><div id="highlighter_948637"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div></td><td><div><div number1="" index0=""  alt2"=""><code color1=""  bold"="">int</code>&nbsp;<code plain"="">tolua_db_DBCCArmature_registerMovementEventHandler(lua_State*&nbsp;tolua_S)</code></div><div number2="" index1=""  alt1"=""><code plain"="">{</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(NULL&nbsp;==&nbsp;tolua_S)</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">argc&nbsp;=&nbsp;0;</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">dragonBones::ArmatureNode*&nbsp;self&nbsp;=&nbsp;nullptr;</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">self&nbsp;=&nbsp;</code><code keyword=""  bold"="">static_cast</code><code plain"="">&lt;dragonBones::ArmatureNode*&gt;(tolua_tousertype(tolua_S,1,0));&nbsp;</code><code comments"="">//第一个参数&nbsp;就是lua里的self</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">argc&nbsp;=&nbsp;lua_gettop(tolua_S)&nbsp;-&nbsp;1;</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(1&nbsp;==&nbsp;argc)</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//第二个参数，就是Lua里的function&nbsp;这里要通过toluafix_ref_function这个函数映射成一个Int值</code></div><div number15="" index14=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">handler&nbsp;=&nbsp;(toluafix_ref_function(tolua_S,2,0));&nbsp;</code></div><div number16="" index15=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">self-&gt;registerMovementEventHandler(handler);</code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number21="" index20=""  alt2"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><p>&nbsp;</p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>将绑定方法绑定到Lua环境里</p></li></ul><div><div id="highlighter_443360"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div></td><td><div><div number1="" index0=""  alt2"=""><code color1=""  bold"="">int</code>&nbsp;<code plain"="">extends_ArmatureNode(lua_State*&nbsp;tolua_S)</code></div><div number2="" index1=""  alt1"=""><code plain"="">{</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(tolua_S,&nbsp;</code><code string"="">"db.ArmatureNode"</code><code plain"="">);</code><code comments"="">//之前db.ArmatureNode是通过脚本绑定在lua里。这里只做扩展</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(tolua_S,&nbsp;LUA_REGISTRYINDEX);</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(lua_istable(tolua_S,-1))</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(tolua_S,</code><code string"="">"registerMovementEventHandler"</code><code plain"="">);</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushcfunction(tolua_S,tolua_db_DBCCArmature_registerMovementEventHandler);</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawset(tolua_S,-3);</code></div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pop(tolua_S,&nbsp;1);</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number14="" index13=""  alt1"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>Lua里设置回调到C++</p></li></ul><div><div id="highlighter_72249"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div></td><td><div><div number1="" index0=""  alt2"=""><code spaces"="">&nbsp;</code><code plain"="">local&nbsp;arm&nbsp;=&nbsp;db.ArmatureNode:create(</code><code string"="">"Dragon"</code><code plain"="">)</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">local&nbsp;animation&nbsp;=&nbsp;arm:getAnimation()</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">animation:gotoAndPlay(</code><code string"="">"walk"</code><code plain"="">)</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">arm:registerMovementEventHandler(</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">function(...)</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">print(...)&nbsp;</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">end</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">)</code></div></div></td></tr></tbody></table></div></div><p><strong><span style="line-height: 1.8;"><br /></span></strong></p><p><strong><span style="line-height: 1.8;">-测试</span></strong></p><p>打印回调输出，测试通过 userdata 8 walk</p><p><br /></p><p><strong>其他</strong></p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>toluafix_ref_function 以及 toluafix_get_function_by_refid</p></li></ul><p>这 两个方法是相互对应的  toluafix_ref_function这个方法在注册表上将一个lua的function与一个function_id生成映射  toluafix_get_function_by_refid 方法可以通过前一个方法生成的function_id来讲绑定的lua  function放到栈顶</p><div><div id="highlighter_757355"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div><div number22="" index21=""  alt1"="">22</div><div number23="" index22=""  alt2"="">23</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"="">//</code></div><div number2="" index1=""  alt1"=""><code plain"="">TOLUA_API&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">toluafix_ref_function(lua_State*&nbsp;L,&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">lo,&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">def)</code></div><div number3="" index2=""  alt2"=""><code plain"="">{</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(!lua_isfunction(L,&nbsp;lo))&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">s_function_ref_id++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//function_id&nbsp;加1</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(L,&nbsp;TOLUA_REFID_FUNCTION_MAPPING);</code><code comments"="">//在注册表上，存放luafunction&nbsp;映射table&nbsp;的key压栈</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(L,&nbsp;LUA_REGISTRYINDEX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//获取方法映射表，放在栈顶</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushinteger(L,&nbsp;s_function_ref_id);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//function_id压栈</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushvalue(L,&nbsp;lo);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//lo有效处索引处是lua方法，lua方法拷贝，压栈</code></div><div number10="" index9=""  alt1"="">&nbsp;</div><div number11="" index10=""  alt2"="">&nbsp;</div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawset(L,&nbsp;-3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//生成映射&nbsp;</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pop(L,&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">s_function_ref_id;</code></div><div number15="" index14=""  alt2"=""><code plain"="">}</code></div><div number16="" index15=""  alt1"=""><code plain"="">TOLUA_API&nbsp;</code><code keyword=""  bold"="">void</code>&nbsp;<code plain"="">toluafix_get_function_by_refid(lua_State*&nbsp;L,&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">refid)</code></div><div number17="" index16=""  alt2"=""><code plain"="">{</code></div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(L,&nbsp;TOLUA_REFID_FUNCTION_MAPPING);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//存放luafunction&nbsp;映射table&nbsp;的key压栈</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(L,&nbsp;LUA_REGISTRYINDEX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//获取方法映射表，放在栈顶</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushinteger(L,&nbsp;refid);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//function_id压栈</code></div><div number21="" index20=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(L,&nbsp;-2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//获取到的luafunction&nbsp;放到栈顶</code></div><div number22="" index21=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_remove(L,&nbsp;-2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//</code></div><div number23="" index22=""  alt2"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p><span style="line-height: 1.8;">executeFunctionByHandler</span></p></li></ul><p>executeFunctionByHandler 这个方法只是通过toluafix_get_function_by_refid 获取到function然后通过lua_pcall 方法调用，代码就不写了。</p></div><img src ="http://www.cppblog.com/colorful/aggbug/209553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-01-17 11:12 <a href="http://www.cppblog.com/colorful/archive/2015/01/17/209553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COCOS2DX,LUA,学习笔记</title><link>http://www.cppblog.com/colorful/archive/2015/01/01/209376.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 01 Jan 2015 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/01/01/209376.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209376.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/01/01/209376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209376.html</trackback:ping><description><![CDATA[<div>http://blog.sina.com.cn/s/blog_4ceb1a410101d4tq.html</div><div><p>以下大部分来自网络，只做学习记录用。</p> <p>一 框架层面<br /> 二 Lua层面<br /> 三 工具层面<br /> 四 android打包</p> <p>一 框架层<br /> 整体来说，cocos2dX提供的一个简便的框架，包含了渲染，动画，事件分发，网络还有UI，物理引擎等几大模块。对于做一个游戏从功能上来说已经<br />  足够了。我从这几个方面分别探讨下cocos2dX的优缺点以及我们在项目中是如何用到的</p> <p> （1）渲染：渲染这块，他的渲染数据跟Sprite进行了绑定，然后对于openGl也是直接进行了调用，而不是采用策略或者插件进行调用。对于后期如果采用DX的话</p> <p> 我觉得这块比较冗余些。但是这些并不会影响游戏的渲染速度。它提供了batch来进行批次渲染。所以在游戏里，我们对资源进行了分组，然后分别用textPacker</p> <p>拼成一张图片，格式呢 没有alpha的采用 RGB565，有alpha的采用RGBA4444，要求高的话就采用RGBA8888，然后统一采用批次渲染。游戏的速度会提升很多。</p> <p> 对于游戏数据的管理，cocos采用CCTextureCache这个单例类进行管理。释放可以采用全部释放，还有释放没有用过的。并且也提供了异步加载动画资源的方法</p> <p>（PS：这个对于想做ARPG的同学来说，可是好东西了）。所以对于渲染这块，我们尽量用批次，然后记得释放内存就OK了。</p> <p>（2）动画：cocos他提供了一套action机制。整体来说，是sprite run action。然后驱动action里面的动画数据，进行播放动画。所有的动画都可以走action</p> <p>接口。对于使用者来说，也不用去关心其他东西，只需要初始化好你想要的动作，然后把动作数据塞给action。然后让sprite run 就可以了。大概action就是这个</p> <p> 流程。本来我们想自己写自己的动画，但是到后期，因为自己写一套工作量大。所以对于move，scale什么的仍旧采用cocos自己的。只有animation采用了我们的。</p> <p> 但是现在想起来，完全没有必要。cocos提供的已经足够了。我们所需要做的就是把动作编辑器导出的动画数据用cocos的动作翻译（对于动作编辑器我后面会讲）写<br />  这么一个层就好</p> <p> （3）事件分发：cocos对于事件分发这块就比较弱了。他是事件管理是通过存储每一个object以及他接收事件的优先级。然后进行分发。但是他并没有对场景进行树的管理</p> <p> 。所以我们的改变就是建立起场景树，然后事件分发先从场景顶端往下分发。期间每个节点可以设置是否响应以及是否继续往下传递的属性（作为OC出身，这块完全模仿苹果那套）</p> <p> 完全丢弃了cocos的那一套事件分发机制。对于场景树的维护，只需要每次step的时候更新下。所以对于查询性能需要好好写一下<br /> （4）网络：cocos提供了对curl的封装。提供了http的一些简单比如get，post的封装。但对于断点续传等并没有封装。对于socket，cocos则完全没有提供。我们采用了</p> <p>BSDSocket</p> <p> （5）UI：UI这边，cocos提供了几种简单的控件，比如CCButton等。他们都继承于CCSprite，但是太少。而且初始化方法是在是太过于奇葩。所以我们自己写了一套UI。</p> <p>（其实无非也就是 button，label，tableView，scrollView，image还有textInput）他们也都继承CCSprite。然后加入一些每个控件独有的逻辑就可以了。最麻烦</p> <p> 的应该就是textInput了。照着cocos提供的input写一遍，然后改改。（cocos提供了CCEditeBox，但是这货的的解决办法是在IOS上调用IOS的的控件。但是他是直接加到了egLView上，对于页面移动，页面关闭处理起来比较麻烦。<br />  所以这个暂时还不能用）</p> <p>二 lua<br /> 为了让游戏更有灵活性，cocos提供了lua。由C++做引擎，然后lua去写逻辑。这样就可以绕开苹果的审核。我们就讨论下C++与lua碰到的问题。</p> <p> （1）通讯：cocos采用了tolua++来进行C++与lua的通讯。看Cocos2dXLuaLoad文件里，那些就是lua与C++通讯的一个层。具体通讯原理比如是通过</p> <p>栈，什么的我就不讲了（其实我也不太懂）。这些东西tolua++都已经替咱封装好了。我们需要做的就是写好C++文件<br /> 然后生成load文件。在CCLuaEngine里调用你生成的那个load方法。lua就可以访问C++了。需要说明的是，我们这边尽量是lua调用C++的方法，C++不会去调用<br />  Lua的方法。调用也是通过callBack去调用。</p> <p>（2）问题：<br /> 问题1.当C++里面的函数需要传递lua指针时：在C++里，lua的函数指针是一个int的变量。生成时用Lua_Func来代替。然后生成后执行cocos2dX源码</p> <p> 里面build.xml。xml的左右就是定制tolua++的生成。在里面把lua的函数指针转成了int了。具体的看xml内容就可以了。<br />  问题2.在CCLuaEngine里调用那些load方法时，是有顺序的。一定要父类在前，子类在后。不然子类就无法访问父类的方法。</p> <p>（3）写法：<br /> lua都要加入module，变成模块化，提高代码的可读性，然后require的时候一定要像cocos例子那样，写全路径。不然打包android的时候<br />  就悲剧了。</p> <p> lua里面不要用全局变量持有sprite等C++数据。每个模块也要像cocos那样提供2个方法，一个是进入该模块的初始化方法，一个是退出<br />  该模块的销毁方法。</p> <p>对于lua这边写法，我们参考了 moai，还有corona，在lua那边在封装下C++，其他lua不是直接调用C++,尽量不要让lua的写法太过于<br /> 活跃。不然以后调试真心头大。</p> <p> （4）调试：lua的调试是最大的问题。仅凭一个lua_error所报错的信息是完全不够的。而且Xcode对于lua的语法高亮支持的也不好。我们对此<br />  进行了2方面的尝试</p> <p>1.windows下，用decoda。然后也可以打断点。</p> <p> 2.mac下，暂时用Eclips加lua插件进行写lua，然后通过log进行调试。不过最近想尝试Vim，应该会比之前靠谱。</p> <p>三 工具层面<br /> 工具上，cocos提供了 cocosBuilder，我觉得他属于一个集成的工具。想要追求全，必然不精。所以cocosBuilder不管是<br /> 场景编辑，界面编辑，还是动作编辑都不是很好用。所以我们采用的策略是用Flash的那一套。界面编辑用FlexBuilder的界面编辑，然后<br />  导出xml，写一个xml翻译类，根据xml创建面板，动作编辑用FlashPro。然后用jsfl读出flash信息，导出xml，用cocos自己的action机制<br />  去翻译，演绎。场景编辑的话，我们的游戏并没有用场景编辑的需求，所以没有进行研究，不过titleMap是个不错的选择</p> <p>四 andrid打包<br /> android打包，其实难点在于调试。因为无法打断点。本来lua就难调试，结果还要加上android。打包android那边就是多看看NDK，JNI的<br />  一些资料，然后了解mk文件怎么书写。看看cocos提供的那些sh脚本。打包大部分问题都是路径的问题。根据错误一步步来，别急，肯定能打上。</p> <p> 打包完成以后，剩下就是调试。调试的话主要就是C++与java之间的通讯了。那就要多看看jni的一些东西。然后看cocos/platform/ 还有android</p> <p> 里面的类。那些是c++跟java通讯的类。我们调试主要就在那打log。jni的原理我就不讲了。。多看看懂一点就可以了。毕竟咱只是为了看懂，会照猫画虎</p> <p> 写一点。没必要深究。对了，android好奇葩，上网还需要权限配置！！！在mainfest.xml配置权限。靠，搞了好久这个问题。</p> <br /> 好了，我对于cocos的见解就这么些。可能包含了cocos所有的东西吧。都不细，只是给大家当一个消遣时间的东西。欢迎大家一起讨论。<br />  最后，感谢cocos2dX的那些大牛们。是你们的无私让我们才有机会这么容易接近游戏开发。谢谢你们</div><img src ="http://www.cppblog.com/colorful/aggbug/209376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-01-01 17:12 <a href="http://www.cppblog.com/colorful/archive/2015/01/01/209376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Cocos Code IDE写Lua，如何与项目中的C++代码和谐相处</title><link>http://www.cppblog.com/colorful/archive/2014/12/30/209339.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 30 Dec 2014 03:19:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/12/30/209339.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209339.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/12/30/209339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209339.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209339.html</trackback:ping><description><![CDATA[<div>http://segmentfault.com/blog/hongliang/1190000000628902</div><div><div fmt"="">                      <p>1、在用Cocos Code IDE建立新的cocos2d-x项目时，最好选中<code>Add Native Codes</code>这个选项，只有选中了它，项目目录里才会有<strong><em><code>frameworks</code></em></strong>目录，里面才会有AppDelegate.cpp等重要的C++类（程序真正的入口）。如果不勾选这个，则Cocos Code IDE使用的是默认编译好的<code>PrebuiltRuntimeLua.app</code>程序，日后如果要更改C++部分的程序逻辑，还是需要<code>frameworks</code>目录中的源代码才行，所以建议Cocos Code IDE应该把<code>Add Native Codes</code>这个选项默认为选中状态才对。</p>  <p><a href="http://segmentfault.com/img/bVcNXI/view" id="img-0" target="_blank"><img src="http://segmentfault.com/img/bVcNXI" alt="Cocos Code IDE新建工程时最好选中Add Native Codes" /></a></p>  <p>2、如果之前建立项目时没有勾选<code>Add Native Codes</code>，也可以随时通过右键菜单-&gt;<code>Cocos Tools</code>-&gt;<code>Add Native Codes Support</code>给补回来。</p>  <p><a href="http://segmentfault.com/img/bVcNXQ/view" id="img-1" target="_blank"><img src="http://segmentfault.com/img/bVcNXQ" alt="Cocos Code IDE添加Native Codes" /></a></p>  <p>3、有了<code>frameworks/runtime-src/Classes</code>目录，就可以去修改<code>AppDelegate.cpp</code>等C++文件了。简单修改一下，打印个log看看：</p>  <p><a href="http://segmentfault.com/img/bVcNXY/view" id="img-2" target="_blank"><img src="http://segmentfault.com/img/bVcNXY" alt="简单修改AppDelegate.cpp" /></a></p>  <p>4、C++文件修改好了，需要编译才能使修改生效，最简单的办法是在Cocos Code IDE中通过右键菜单-&gt;<code>Cocos Tools</code>-&gt;<code>Build Custom Runtimes</code>，选中<code>Build Mac Runtime</code>即可。</p>  <p><a href="http://segmentfault.com/img/bVcNX2/view" id="img-3" target="_blank"><img src="http://segmentfault.com/img/bVcNX2" alt="Cocos Code IDE Build Mac Runtime" /></a></p>  <p><a href="http://segmentfault.com/img/bVcNX3/view" id="img-4" target="_blank"><img src="http://segmentfault.com/img/bVcNX3" alt="Cocos Code IDE Build Mac Runtime" /></a></p>  <p>5、编译完成后，感兴趣的话就能在<code>runtime/mac</code>目录下看到多了一个<code>CocosLuaGame.app</code>程序包，这就是刚刚编译生成的Mac程序，以后每次<code>frameworks</code>目录下的C++文件有修改都需要再编译一次。</p>  <p><a href="http://segmentfault.com/img/bVcNYa/view" id="img-5" target="_blank"><img src="http://segmentfault.com/img/bVcNYa" alt="cocos2d-x编译后的程序都在runtime/目录下" /></a></p>  <p>6、使用Cocos Code IDE的<code>Build Custom Runtimes</code>功能后，感兴趣的话就会发现当前项目的<code>Debug Configurations</code>发生了变化，之前的<code>Select Runtime</code>中执行的程序是<code>PrebuiltRuntimeLua.app</code>，现在已经被自动改成了新编译出来的<code>CocosLuaGame.app</code>程序。这一步是Cocos Code IDE自动做的，而且非常重要，如果不更改这个选项的话，会导致调试时仍然执行的是旧的C++代码，新修改的代码无法起作用。</p>  <p><a href="http://segmentfault.com/img/bVcNX8/view" id="img-6" target="_blank"><img src="http://segmentfault.com/img/bVcNX8" alt="Cocos Code IDE的Debug选项要选中正确的启动程序" /></a></p>  <p>7、如果修改C++文件比较频繁，使用Cocos Code IDE的右键菜单来编译还不如直接在命令行下敲命令快：</p>  <blockquote>   <p><code>cocos compile -p mac</code></p> </blockquote>  <p>注意，如果始终使用命令行来编译，从来没用过Cocos Code IDE的右键菜单，那么需要手工修改<code>Debug Configurations</code>的<code>Select Runtime</code>，确保调试时启动的是<code>CocosLuaGame.app</code>。</p>  <p>8、现在来启动一下，可以看到C++文件中修改的代码已经生效了：</p>  <p><a href="http://segmentfault.com/img/bVcNYc/view" id="img-7" target="_blank"><img src="http://segmentfault.com/img/bVcNYc" alt="修改后的AppDelegate.cpp文件起作用了" /></a></p>                  </div></div><img src ="http://www.cppblog.com/colorful/aggbug/209339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-12-30 11:19 <a href="http://www.cppblog.com/colorful/archive/2014/12/30/209339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx3.2 lua学习</title><link>http://www.cppblog.com/colorful/archive/2014/12/25/209302.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 25 Dec 2014 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/12/25/209302.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209302.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/12/25/209302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209302.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209302.html</trackback:ping><description><![CDATA[<div>官方网站永远是个不错的地方:<br />&nbsp; http://cn.cocos2d-x.org/<br /><div>&nbsp; http://cn.cocos2d-x.org/tutorial/lists?id=82</div><br />现在主流c++ + lua开发, 主要是lua更新的优势<br /><br /><strong>新建lua项目</strong><br /><div>lua项目有两个模板,lua-template-default和lua-timeplate-runtime, <br /><div>可以用cocos new 命令，也可以用cocos code ide.</div>用cocos new 命令创建lua工程<br />指定用runtime模板<br />cocos new -p com.game.zc -l lua -t runtime -d e:/project helloLua<br />使用default模板<br /><div>cocos new -p com.game.zc -l lua -d e:/project helloLua</div><br />用Cocos Code IDE 创建lua工程 <br />code ide 用的是runtime模板, 创建工程时记得选中"添加C++代码", 这样会在工程目录下生成frameworks文件夹，里面是c++层的代码<br /><div><strong><br />Lua 调用自定义c++类<br /></strong><div>http://cn.cocos2d-x.org/tutorial/show?id=1749</div><div>http://cn.cocos2d-x.org/tutorial/show?id=1555</div><div>http://cn.cocos2d-x.org/tutorial/show?id=1295<br />在移植android时，需要修改frameworks\cocos2d-x\cocos\scripting\lua-bindings\Android.mk文件<br />将自定义的c++类文件添加到LOCAL_SRC_FILES, 文件所在目录添加到LOCAL_C_INCLUDES<br />如果是用Cocos Code IDE开发,<br />c++文件修改后,需要在Cocos Code IDE 里执行如下操作才能生效, 项目右击--&gt;cocos 工具--&gt;构建自定义Runtime<br /><br />关于移植, <br />1/ 可先用cocos compile -p android 编译项目，打包时再用eclipse来打包<br />2/ 使用Cocos Code IDE 很方便, 项目右击--&gt;cocos 工具--&gt;为Android打包apk<br /><br />----遇到的错误------------------------------<br /><div>1<br />http://www.cocoachina.com/bbs/read.php?tid=234772</div><div>问题: LibclangError: [Error 193] %1 不是有效的 Win32. To provide Config.set_library_path() or Config.set_library_file().<br /><br /><div>原因:Python、pyyaml、pyCheetah都用32位版本（ps：tolua目录下README.mdown里有下载链接）<br />如果还不行的话,就去github上下载最新的bindings-generator(平ps:下载地址: <a href="https://github.com/guojian822/bindings-generator" target="_blank" id="url_1">https://github.com/guojian822/bindings-generator</a>)   </div></div></div><div></div><strong><br /></strong></div></div><br /><div><div><h1><br /></h1></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/209302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-12-25 16:20 <a href="http://www.cppblog.com/colorful/archive/2014/12/25/209302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用cocos compile -p android时总是报错误    BUILD FAILED \ant\build.xml:892</title><link>http://www.cppblog.com/colorful/archive/2014/12/25/209298.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 25 Dec 2014 04:10:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/12/25/209298.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209298.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/12/25/209298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209298.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209298.html</trackback:ping><description><![CDATA[<div><div>http://www.cocoachina.com/bbs/read.php?tid=215700</div><br />错误如下。。。但是使用eclipse生成apk包时不收影响。。<br /><br />-dex:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dex] input: E:\cocos\Mine\frameworks\runtime-src\proj.android\bin\classes<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dex] input: E:\cocos\Mine\frameworks\js-bindings\cocos2d-x\cocos\platform\android\java\bin\classes.jar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dex]  Pre-Dexing  E:\cocos\Mine\frameworks\js-bindings\cocos2d-x\cocos\platform\android\java\bin\classes.jar  -&gt; classes-022efb48739f8be18b60e7464733537d.jar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dex]  Converting compiled files and external libraries into  E:\cocos\Mine\frameworks\runtime-src\proj.android\bin\classes.dex...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx] <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx] UNEXPECTED TOP-LEVEL EXCEPTION:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]<span style="color:#ff0000 ">com.android.dx.util.DexException: Multiple dex files define Lorg/cocos2dx/lib/</span>Cocos2dxAccelerometer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.command.dexer.Main.run(Main.java:232)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.command.dexer.Main.main(Main.java:174)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx]&nbsp;&nbsp;&nbsp;&nbsp; at com.android.dx.command.Main.main(Main.java:91)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [dx] <br /><br />BUILD FAILED<br />E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:892: The following error occurred while executing this line:<br />E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:894: The following error occurred while executing this line:<br />E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:906: The following error occurred while executing this line:<br />E:\BST\adt-bundle-windows-x86-20130917\sdk\tools\ant\build.xml:284: null returned: 2</div><br /><div>---------------------------<br />查资料发现，发现：<br />cocos compile 的脚本里会自动把&#8220;frameworks\js-bindings\cocos2d-x\cocos\platform\android\java\bin\classes.jar&#8221;（2dx的java代码）添加到classes.dex中。<br />而当用eclipse打开android项目时，默认是没有引入2dx的java类的，此时如果想正常运行android项目，需要引入2dx的jar包，或者引入2dx的java源码。<br />如 果引入java的源码，当再次执行&#8220;cocos  compile&#8221;时，2dx的java源码生成的class文件，会跟默认引入的&#8220;frameworks\js-bindings\cocos2d-x \cocos\platform\android\java\bin\classes.jar&#8221;发生冲突，会报 &#8220;com.android.dx.util.DexException: Multiple dex files define &#8230;&#8230;&#8221;的错误；<br />如 果不引入java源码，而是直接在&#8220;Build  path&#8221;中引入了jar包（位于引擎的：frameworks\js-bindings\cocos2d-x\cocos\platform \android\java\bin\下的classes.jar），此时android的项目不报错了，但是直接使用eclipse生成apk包时会发 现安装到手机上无法运行，这是因为项目需要的2dx文件没有被打入到apk中。此时，可以将对应的jar包放到android项目的libs目录里 （frameworks\runtime-src\proj.android\libs\），这样生成的apk包就可以正常运行了。<br />但是，如果这样做了，再次执行&#8220;cocos compile&#8221;时，发现还会报如上的错误，这是因为脚本里会默认将libs目录里的文件添加到classes.dex中。<br /><br />综上所述：<br />出现如上错误的原因是在使用&#8220;cocos compile&#8221;脚本时，2dx文件被重复添加了。<br />不过，如果像我这样操作，使用&#8220;cocos compile&#8221;编译脚本（主要是因为该脚本会将js文件和资源拷贝的android项目里），使用eclipse将android项目打包成apk，可以忽略如上问题的；感觉很不爽。。。。   </div><br />-------------解决方法<br /><div>注释掉project.properties文件中的#android.library.reference.1=../cocos2d/cocos/platform/android/java就可以啦！！！   </div><img src ="http://www.cppblog.com/colorful/aggbug/209298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-12-25 12:10 <a href="http://www.cppblog.com/colorful/archive/2014/12/25/209298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题</title><link>http://www.cppblog.com/colorful/archive/2014/12/13/209176.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 13 Dec 2014 07:56:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/12/13/209176.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209176.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/12/13/209176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209176.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209176.html</trackback:ping><description><![CDATA[<div><span style="line-height:24px; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px"><div>http://www.cocoachina.com/bbs/read.php?tid=195310</div><div><div>当我写这篇文章的时候我是怀着激动的心情的，因为我又解决了一个技术问题。你可能对题目还一知半解，这是什么意思，<strong>我之所以要写这篇文章就是要解决当我们在cocos2dx中使用了第三方库的时候，移植到android平台的过程中是会报错的问题，</strong>典型的例子就是我在上几篇博客中使用了编码转换的库iconv，在我移植到android平台测试的时候就出现了错误，各种各样的错误，网上搜了一下，<strong>但是网上的方法感觉都很老了，有的也没说明白，今天通过摸索马上分享给大家，让大家也少走歪路。</strong><br /><br /><br />如 果你还不会移植android平台，请先看我上一篇的博客，先换个其他的不包含iconv库的工程，移植成功了再来做今天的事情。今天我们不需要准备任何 工具，需要做的就是理解.mk文件的含义，知道怎么改。我们先来看一下我字体和字符编码这篇博客GBKToUTF8的头文件是怎么包含iconv库的。<br /><br /><br /><div><div id="highlighter_120487"  cpp"=""><div><a href="http://www.cocoachina.com/bbs/#" command_help=""  help"="">?</a></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)</code></div><div number2="" index1=""  alt1"=""><code preprocessor"="">#include "iconv\iconv.h"</code></div><div number3="" index2=""  alt2"=""><code preprocessor"="">#else</code></div><div number4="" index3=""  alt1"=""><code preprocessor"="">#include "../../../../libiconv/include/iconv.h"</code></div><div number5="" index4=""  alt2"=""><code preprocessor"="">#endif</code></div></div></td></tr></tbody></table></div></div><br /><br />如果是win32平台的话就用引擎里边的第三方库，这个iconv库所在的路径是：<br />E:\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\platform\third_party\win32\iconv。但如果是移植到android平台的你需要加上你android平台的库的路径，也就是说你需要先<a href="http://pan.baidu.com/s/1qW4jQvq" target="_blank" id="url_1">下载好iconv的库</a>，放到一个你的路径，这里我放到的是我引擎的根目录下，所以写的就是上边的代码，大家下去下载这个库，然后按我说的改了代码。然后我们就来看看这个.mk文件改怎么改，我们要修改的是jni目录下的.mk文件，我先截上几张图片，说说里边代码的含义。<br /><img src="http://www.zaojiahua.com/wp-content/uploads/2014/02/2014-02-28_224700.jpg" border="0"  alt="" /><br />上边的这张图片网上有不少的教程都说需要修改，但在我看来根本不是，因为当我在这里加了iconv.h的路径以后编译的时候任然报错，说找不到iconv.h这个文件。所以以后大家也不要改这里，没用的。<br /><img src="http://www.zaojiahua.com/wp-content/uploads/2014/02/2014-02-28_224719.jpg" border="0"  alt="" /><br /><img src="http://www.zaojiahua.com/wp-content/uploads/2014/02/2014-02-28_224735.jpg" border="0"  alt="" /><br />上 边的第一张图片看到了划线的地方了吗？这个是我加上去的，你需要改吗？答案是需要的，但是名字可以和我不一样，那名字改成什么样的呢，这得看另一个文件 了，我们等等再说。上面的第二张图片那个划线的地方也是我加上去的，你也需要修改，改成什么也需要看另一个文件。好了现在我们就来说到底看哪个文件。<strong>这个文件就是你下载的iconv库的根目录下的Android.mk文件，我再来截张图。<br /><img src="http://www.zaojiahua.com/wp-content/uploads/2014/02/2014-02-28_225501.jpg" border="0"  alt="" /><br /></strong>这个是文件中的俩句话，你要和上边我说的改的那俩个地方对照起来改。好了其实就是这么简单，<strong>Android.mk文件只需要对照的改上俩个地方就可以了，程序中的那个头文件包含也要修改。</strong>现在我们就来导入到工程中构建一下工程吧。在构建的时候也会出现一个问题，我想这个问题的原因可能是因为iconv库里边实现的函数不一样吧，出现的错误的语句是这句：<br /><div><div id="highlighter_160938"  cpp"=""><div><a href="http://www.cocoachina.com/bbs/#" command_help=""  help"="">?</a></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">-1 == iconv(iconvH, pin, &amp;strLength, &amp;outbuf, &amp;outLength)</code></div></div></td></tr></tbody></table></div></div><br /><strong>我们需要做如下的修改，就是在pin的前边加个强转，因为Android下函数需要传入的参数是char**，而我们程序中的pin是const char **类型的。<br /><br /></strong><br /><div><div id="highlighter_667756"  cpp"=""><div><a href="http://www.cocoachina.com/bbs/#" command_help=""  help"="">?</a></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">-1 == iconv(iconvH, (</code><code color1=""  bold"="">char</code> <code plain"="">**)pin, &amp;strLength, &amp;outbuf, &amp;outLength)</code></div></div></td></tr></tbody></table></div></div><br />有了以上的这些操作问题就解决了，这里提醒一下大家，在eclipse中构建工程的时候如果可以编译通过了，但是工程中有错误提示（其实是没有错误的，也不知道这个eclipse是怎么回事），大家就重新导入工程一遍，问题就解决了，还有什么问题就给我留言吧。<br />本帖有小塔原创，转载请注明出处！</div></div><br /></span><span style="line-height: 24px; color: #333333; font-family: &quot;Helvetica Neue&quot;,Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size: 18pt;">android 下添加iconv支持<br /><br /></span><span style="line-height: 24px; color: #333333; font-family: &quot;Helvetica Neue&quot;,Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size: 10pt;">NDK自带的iconv的 查看 android-ndk-r9d/sources/android/support/include/iconv.h</span><span style="line-height:24px; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px"><br /></span><br style="line-height:24px; outline:none; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px" /> <span style="color:#8a8679; font-family:'Hiragino Sans GB W3','Hiragino Sans GB',Arial,Helvetica,simsun,u5b8bu4f53; font-size:16px; line-height:28px">在Android.mk中加入</span><br style="line-height:24px; outline:none; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px" /> <span style="line-height:24px; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px">LOCAL_WHOLE_STATIC_LIBRARIES += android_support</span><br style="line-height:24px; outline:none; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px" /> <p><span style="line-height:24px; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px">$(call import-module,android/support)</span></p> <p><span style="line-height:24px; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px"><br /> </span></p> <p><span style="line-height:24px; color:#333333; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px">如：</span></p> <span style="line-height:24px; font-family:'Helvetica Neue',Helvetica,STheiti,微软雅黑,黑体,Arial,Tahoma,sans-serif,serif; font-size:14px"><span style="color:#333333">LOCAL_PATH := $(call my-dir)</span><br /><br /> <span style="color:#333333">include $(CLEAR_VARS)</span><br /> <span style="color:#333333">LOCAL_MODULE := mylib</span><br /> <span style="color:#333333">LOCAL_SRC_FILES := mylib.cpp</span><br /> <br /> <span style="color:#ff0000">LOCAL_WHOLE_STATIC_LIBRARIES += android_support</span><br /> <span style="color:#333333">LOCAL_CXXFLAGS += -std=c++11 -fexceptions</span><br /> <br /> <br /> <span style="color:#333333">include $(BUILD_SHARED_LIBRARY)</span><br /> <span style="color:#ff0000">$(call import-module, android/support)</span></span></div><img src ="http://www.cppblog.com/colorful/aggbug/209176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-12-13 15:56 <a href="http://www.cppblog.com/colorful/archive/2014/12/13/209176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在真机上调试Android应用程序</title><link>http://www.cppblog.com/colorful/archive/2014/12/12/209168.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Fri, 12 Dec 2014 07:49:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/12/12/209168.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209168.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/12/12/209168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209168.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209168.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://www.cnblogs.com/lanxuezaipiao/archive/2013/03/11/2953564.html1、首先将手机设置为调试模式 方法：设置&#8212;&#8212;应用程序&#8212;&#8212;开发&#8212;&#8212;USB调试，打上&#8730;即可 &nbsp; &nbsp; 2、用数据线连接至电脑，在电脑上安装豌豆荚，此时豌豆荚会帮你安装...&nbsp;&nbsp;<a href='http://www.cppblog.com/colorful/archive/2014/12/12/209168.html'>阅读全文</a><img src ="http://www.cppblog.com/colorful/aggbug/209168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-12-12 15:49 <a href="http://www.cppblog.com/colorful/archive/2014/12/12/209168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一步一步了解Cocos2dx 3.0 正式版本开发环境搭建（Win32/Android）</title><link>http://www.cppblog.com/colorful/archive/2014/10/15/208577.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 15 Oct 2014 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/10/15/208577.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/208577.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/10/15/208577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/208577.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/208577.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/ShadowLoki/p/3679929.html</div><br /><div><span style="font-family: 仿宋;">　cocos2d-x 3.0发布有一段时间了，作为一个初学者，我一直觉得cocos2d-x很坑。每个比较大的版本变动，都会有不一样的项目创建方式，每次的跨度都挺大&#8230;&#8230;</span> <p><span style="font-family: 仿宋;">　　但是凭心而论，3.0RC版本开始 环境搭建、项目创建、编译的方式更加人性化了。</span></p> <p><span style="font-family: 仿宋;">　　现在我们进入正题，一步一步搭建cocos2dx的开发环境</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　cocos2d-x很多tools都是需要使用Python的，因此我们需要先安装Python环境</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　python下载:<a href="https://www.python.org/downloads/" target="_blank">点这里</a></span></p> <p><span style="font-family: 仿宋;">　　　　这里需要下载Python 2.X版本。曾经以为要下载3.x版本 后来装上发现cocos2d-x提供的python运行报错，所以卸载以后重新装的python2.X版本</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　python安装的时候使用默认安装方式即可，但是安装完毕后我们需要配置环境变量</span></p> <p><span style="font-family: 仿宋;">　　　　在我的电脑（右键)-&gt;属性-&gt;高级系统设置-&gt;高级 选项卡-&gt;环境变量-&gt;系统变量 中找到Path 变量，并在其值中增加 指向Python的环境变量。格式为 [Python安装路径];  例如我安装在C盘 我的环境变量就新增为 C:\Python27;</span></p> <p><span style="font-family: 仿宋;">　　　　配置完毕后记得注销再重新登陆系统环境变量才会生效</span></p> <p><span style="font-family: 仿宋;">　　　　<img src="http://images.cnitblog.com/i/340851/201404/221000491852327.jpg" alt="" /></span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　下一步，我们要下载最新版本的cocos2d-x，到目前为止 cocos2d-x已经更新到 3.0rc2版本</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　cocos2d-x官网: <a href="http://www.cocos2d-x.org/" target="_blank">点这里</a></span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　在下载完毕后我们解压缩到磁盘上，并打开cocos2d-x 文件夹找到setup.py这个文件，运行，会出现控制台如下</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221004590454027.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　由于现在不配置Android环境，因此只需要一直回车即可，这时候这段python脚本会帮助我们设置cocos2d-x运行所需要的环境变量。继续注销&#8230;&#8230;重新登陆&#8230;&#8230;</span></p> <p><span style="font-family: 仿宋;">　　在配置完这一切后 我们打开CMD 运行cocos命令，1来检查整个开发环境是否搭建成功，2来可以熟悉下命令行，如果设置没问题的情况下 会出现如下界面<img src="http://images.cnitblog.com/i/340851/201404/221009223572717.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　这里我们可以看到cocos.py这段脚本可以执行4个命令，每个命令的作用已经说明的很清楚了。</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　下面，我们来使用new 命令创建我们的项目</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221013072633708.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　这里举个栗子，比如我要创建一个叫simple的项目，我们可以这么写  cocos new -p com.game.simple -l cpp -d e:\&nbsp; simple 简单吧  运行这条命令会在E盘根目录下生成一个叫simple的文件夹里面放着我们的项目。</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221018046544285.jpg" alt="" /><img src="http://images.cnitblog.com/i/340851/201404/221018101701568.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　这个时候我们就可以用VS2012打开proj.win32中的SLN项目文件进行我们愉快的编码和调试工作了。</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　如果我们要运行我们刚刚由模板生成的项目，我们需要用到cocos run 命令 格式为 cocos run -p [平台]&nbsp;&nbsp;&nbsp; 栗如:cocos run -p win32 表示win32平台</span></p> <p><span style="font-family: 仿宋;">　　我们在执行这条命令时候需要注意一点 执行命令的目录 必须是游戏项目的根目录 如果不在根目录 需要使用 -s指定游戏根目录的位置</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　现在我们在cmd中执行 cocos run -p win32 -s e:\simple 运行结果如下</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221025052329629.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　如果在编译过程中没有错误的话 编译完成会打开这个HelloWorld的DEMO</span></p> <p><span style="font-family: 仿宋;">　　至此在WIN32中的环境搭建以及调试发布就全部OK了 下面我们来看Android部分。</span></p> <p><span style="font-family: 仿宋;">　　</span><br /><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><strong>Android：</strong></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><strong>　</strong><span style="color: #333333; font-size: 14px;">　Android的编译环境在3.0RC里也有了很大的改观，部署和编译方式比之前方便了很多。现在我们来做下准备工作。</span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　Android编译环境需要用到Andorid_SDK&nbsp; Android_NDK&nbsp;&nbsp; Ant 与JDK</span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　Android_SDK下载: <a href="http://developer.android.com/sdk/index.html" target="_blank">点这里</a></span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　Android_NDK下载: <a href="http://developer.android.com/tools/sdk/ndk/index.html" target="_blank">点这里</a></span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　Android_JDK下载:&nbsp; <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">点这里</a></span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　Ant下载:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://ant.apache.org/" target="_blank"> 点这里</a></span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　</span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　其中除了JDK需要安装，其它的是绿色版 直接解压即可</span></span></p> <p><span style="font-family: 仿宋;">&nbsp;　&nbsp; 我们将SDK&nbsp;NDK 和ANT解压缩到同一个文件夹中 并修改sdk的文件夹名为ADT，NDK的NDK，ANT的为ANT 这是为了方便以后使用。 我解压后文件都放在了e:\Android文件夹下</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221115282481382.jpg" alt="" /></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　</span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　解压完后我们先来配置JDK</span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　　　在JDK安装完毕之后，需要手动进行环境变量的配置</span></span></p> <p><span style="color: #ff6600; font-family: 仿宋; font-size: 16px;"><span style="color: #333333; font-size: 14px;">　　</span></span></p> <p><span style="font-family: 仿宋;">　　&nbsp;&nbsp;&nbsp;1）在系统变量里新建<span style="color: #339966;">JAVA_HOME</span>变量，变量值为：C:\Program Files\Java\jdk1.6.0_14（根据自己的安装路径填写）</span></p> <p><span style="font-family: 仿宋;">　　　　2）新建<span style="color: #339966;">classpath</span>变量，变量值为：.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar （注意前面的. 不要忘记了）</span></p> <p><span style="font-family: 仿宋;">　　　　3）在<span style="color: #339966;">path</span>变量（已存在不用新建）添加变量值：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin（注意变量值之间用&#8220;;&#8221;隔开）</span></p> <p><span style="font-family: 仿宋;">　　　　4、重新注销系统并重新登陆后 &#8220;开始&#8221;--&gt;&#8220;运行&#8221;--&gt;输入&#8220;javac&#8221;--&gt;"Enter"，如果能正常打印用法说明配置成功！</span></p> <p><span style="font-family: 仿宋;">　　　　补充环境变量的解析:</span></p> <p><span style="font-family: 仿宋;"><span style="color: #339966;">　　　　　　JAVA_HOME</span>:jdk的安装路径</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;"><span style="color: #339966;">　　　　　　classpath</span>:java加载类路径，只有类在classpath中java命令才能识别，在路径前加了个"."表示当前路径。</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;"><span style="color: #339966;">　　　　　　path</span>：系统在任何路径下都可以识别java,javac命令。</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　&nbsp; 现在我们来配置ANT的环境变量。将[ANT目录]\bin文件夹添加到path中&nbsp; 如图</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221103495137416.jpg" alt="" /></span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　至此准备工作就做完了，下面我们运行setup.py关联SDK NDK 和ANT</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221116141233733.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　在这里我们输入了ndk和sdk的路径 其中ndk指向根目录即可&nbsp; 而sdk需要指向adt中的sdk目录</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　在由setup.py添加了这两个环境变量之后 会要求我们输入Ant的路径 这里我们需要指向ant中的bin文件夹 如下：</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221119256852276.jpg" alt="" /></span></p> <p><span style="font-family: 仿宋;">　　这时候 基本环境已经搭建完成了，记得注销重新登陆使环境变量生效</span></p> <p><span style="font-family: 仿宋;">　　 重新运行setup.py确认下所有的配置是否正确 如果全部正确 如图所示</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221130314046395.jpg" alt="" /></span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　然后我们就可以在项目目录下使用 cocos compile -p android方式编译APK文件了</span></p> <p><span style="font-family: 仿宋;">　　</span></p> <p><span style="font-family: 仿宋;">　　注意：在打包apk之前需要修改proj.android/jni文件夹下的Android.mk文件 添加自己新增的CPP文件</span></p> <p>&nbsp;</p> <p><span style="font-family: 仿宋;">　　最后我们来看看编译好的APK文件吧，位置在[项目文件夹]\bin\debug\android\文件夹下</span></p> <p><span style="font-family: 仿宋;">　　<img src="http://images.cnitblog.com/i/340851/201404/221328207632968.jpg" alt="" /></span></p></div><img src ="http://www.cppblog.com/colorful/aggbug/208577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-10-15 15:35 <a href="http://www.cppblog.com/colorful/archive/2014/10/15/208577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx3.2</title><link>http://www.cppblog.com/colorful/archive/2014/08/20/208073.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 20 Aug 2014 13:45:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/08/20/208073.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/208073.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/08/20/208073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/208073.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/208073.html</trackback:ping><description><![CDATA[新建项目 <br />cocos new <br /><br />编译so文件<br />cocos compile -p android<img src ="http://www.cppblog.com/colorful/aggbug/208073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-08-20 21:45 <a href="http://www.cppblog.com/colorful/archive/2014/08/20/208073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x-2.2.2 android开发环境</title><link>http://www.cppblog.com/colorful/archive/2014/07/24/207784.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 24 Jul 2014 09:55:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/07/24/207784.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/207784.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/07/24/207784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/207784.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/207784.html</trackback:ping><description><![CDATA[<div>一、准备<br />1. adt-bundle(包括了eclipse+sdk)<br />2. ndk: r9版本以上, 无需安装cygwin，新版本ndk不再依赖该编译环境<br />3. cocos2d-x-2.2.2<br />4. jdk<br /><br />二&nbsp; 安装<br />1 安装jdk，配置java环境<br />JAVA_HOME：D:\Andorid\Java\jdk1.7.0_25（安装路径）<br />CLASSPATH：.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;<br />Path：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;<br />运行 java -version<br />&nbsp;&nbsp;&nbsp;&nbsp; javac<br />检测是否安装成功<br /><br />2 解压cocos2dx, 安装cocos2dx, cmd到cocos2dx目录下，运行build-win32.bat<br /><br />3 配置 eclipse<br />&nbsp; 打开eclipse，点击window-&gt;perfernces-&gt;Android，<br />&nbsp; 在SDK Location中填上刚刚下的adt-bundle解压后的D:\Andorid\adt\sdk<br />&nbsp; window-&gt;perfernces-&gt;Android-&gt;NDK中填ndk路径 D:\Andorid\android-ndk-r9（自己的解压路径）<br />&nbsp; <br />导入android项目<br />&nbsp;项目属性-&gt;c/c++ build-&gt;Builder Settings-&gt;Bild command:填写ndk路径\ndk-build.cmd<br />&nbsp;项目属性-&gt;c/c++ build-&gt;Environment 添加变量 NDK_MODULE_PATH&nbsp;&nbsp;&nbsp; cocos2dx目录;cocos2dx目录\cocos2dx\platform\third_party\android\prebuilt</div><img src ="http://www.cppblog.com/colorful/aggbug/207784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-07-24 17:55 <a href="http://www.cppblog.com/colorful/archive/2014/07/24/207784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdk与jre的区别</title><link>http://www.cppblog.com/colorful/archive/2014/07/24/207783.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 24 Jul 2014 09:53:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/07/24/207783.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/207783.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/07/24/207783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/207783.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/207783.html</trackback:ping><description><![CDATA[<div><div>http://www.cnblogs.com/myitm/archive/2011/05/03/2035942.html</div><br />很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。<br />JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK，它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包，可以包括函数库、编译程序等。<br />JRE是Java Runtime Enviroment是指Java的运行环境，是面向Java程序的使用者，而不是开发者。<br />如 果安装了JDK，会发同你的电脑有两套JRE，一套位于 \jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15   目录下，后面这套比前面那套少了Server端的Java虚拟机，不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可 以选择是否安装这个位于 C:\Program Files\Java 目录下的JRE。如果你只安装JRE，而不是JDK，那么只会在  C:\Program Files\Java 目录下安装唯一的一套JRE。<br />JRE的地位就象一台PC机一样，我们写好的Win32应用程序需要 操作系统帮我们运行，同样的，我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后，如果分别在硬盘上的两个不同地方安装了两套JRE， 那么你可以想象你的电脑有两台虚拟的Java  PC机，都具有运行Java程序的功能。所以我们可以说，只要你的电脑安装了JRE，就可以正确运行Java应用程序。<br />1、为什么Sun要让JDK安装两套相同的JRE？<br />这 是因为JDK里面有很多用Java所编写的开发工具（如javac.exe、jar.exe等），而且都放置在 \lib\tools.jar  里。从下面例子可以看出，先将tools.jar改名为tools1.jar，然后运行javac.exe，显示如下结果： Exception in  thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main  这个意思是说，你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar  com.sun.tools.javac.Main  是一样的，会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器（Wrapper），而制作的目的是为了让开发者免于输入太长的指命。 而且可以发现\lib目录下的程序都很小，不大于2  9K，从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写，所以也是Java应用程序，因此要使用JDK所附的工具来开发Java程 序，也必须要自行附一套JRE才行，所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。<br />2、如果一台电脑安装两套以上的JRE，谁来决定呢？<br />这 个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行Java程序。  Java.exe依照底下的顺序来查找JRE：自己的目录下有没有JRE；父目录有没有JRE；查询注册表：  [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]  所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。<br /><br />ADD：（小小结）<br />1.JVM -- java  virtual  machineJVM就是我们常说的java虚拟机，它是整个java实现跨平台的最核心的部分，所有的java程序会首先被编译为.class的类文 件，这种类文件可以在虚拟机上执行，也就是说class并不直接与机器的操作系统相对应，而是经过虚拟机间接与操作系统交互，由虚拟机将程序解释给本地系 统执行。2.JRE -- java runtime  environmentJRE是指java运行环境。光有JVM还不能成class的执行，因为在解释class的时候JVM需要调用解释所需要的类库 lib。在JDK的安装目录里你可以找到jre目录，里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm，lib中则是jvm工作所需 要的类库，而jvm和  lib和起来就称为jre。所以，在你写完java程序编译成.class之后，你可以把这个.class文件和jre一起打包发给朋友，这样你的朋友就 可以运行你写程序了。（jre里有运行.class的java.exe）3.JDK -- java development  kitJDK是java开发工具包，基本上每个学java的人都会先在机器上装一个JDK，那他都包含哪几部分呢？让我们看一下JDK的安装目录。在目录 下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中，真正在运行java时起作用的是以下四个文件夹：bin、include、 lib、  jre。现在我们可以看出这样一个关系，JDK包含JRE，而JRE包含JVM。bin:最主要的是编译器 (javac.exe)include:java和JVM交互用的头文件lib：类库jre:java运行环境（注意：这里的bin、lib文件夹和 jre里的bin、lib是不同的）总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。<br />eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的，所以在安装时你会发现他们只要求你选中jre路径就ok了。</div><img src ="http://www.cppblog.com/colorful/aggbug/207783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-07-24 17:53 <a href="http://www.cppblog.com/colorful/archive/2014/07/24/207783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义路径创建Cocos2d-x项目</title><link>http://www.cppblog.com/colorful/archive/2014/06/04/207189.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 04 Jun 2014 08:09:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2014/06/04/207189.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/207189.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2014/06/04/207189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/207189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/207189.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/skynet/archive/2013/11/17/3428369.html</div><br /><br />--------------------------------------------------<br /><div><div id="cnblogs_post_body"><p style="word-break: normal; line-height: normal; text-indent: 0pt" align="center"><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">自定义路径创建</span><span style="line-height: normal;">Cocos2d-x</span><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">项目</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">本文介绍</span><span style="line-height: 15pt;">windows</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">下面如何优雅的创建</span><span style="line-height: 15pt;">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目。为何称之为优雅，是因为现在网上流传的一些创建方法有一些问题。大致内容如下：</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">l&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用</span><span style="line-height: 15pt;">VS</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">向导创建</span><span style="line-height: 15pt;">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目（废弃，不建议使用）</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">l&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用</span><span style="line-height: 15pt;">create_project.py</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 42pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">n&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">问题</span><span style="line-height: 15pt;">1</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">：工程名等替换不完全</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 42pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">n&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">问题</span><span style="line-height: 15pt;">2</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">：创建项目不能指定路径</span></p>  <h1><span style="font-family: ;'Century Gothic';'Century Gothic';">使用</span>VS<span style="font-family: ;'Century Gothic';'Century Gothic';">向导创建</span>Cocos2d-x<span style="font-family: ;'Century Gothic';'Century Gothic';">项目（废弃，不建议使用）</span></h1>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">在</span><span style="line-height: 15pt">Cocos2d-x 2.1.3</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">及之前</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">官方使用</span><span style="line-height: 15pt">&#8220;install-template-msvc.bat&#8221;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">文件，安装</span><span style="line-height: 15pt">VS</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">创建</span><span style="line-height: 15pt;">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目向导，然后可以按照向导创建</span><span style="line-height: 15pt;">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目。</span><strong><span style="font-family: ; color: ; line-height: 18pt;'Century Gothic';'Century Gothic';">注意</span></strong><strong><span style="font-family: ; line-height: 18pt;'Century Gothic';'Century Gothic';">：</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">默认情况下，新建项目的存放的位置应该设置在</span><span style="line-height: 15pt;">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">引擎的安装目录下面，否则可能因为找不到库文件而不能通过编译。不过可以在设置项目属性，头文件和库文件的搜索路径来解决。可以参考我之前的一篇博文《</span><span style="color: ; line-height: 15pt"><a style="border-bottom-style: none" href="http://www.cnblogs.com/skynet/p/3372855.html"><u><span style="color: ; line-height: 15pt">C++</span><span style="font-family: ; color: ; line-height: 15pt;'Century Gothic';'Century Gothic';"><span style="line-height: 15pt">静态库与动态库</span></span></u></a></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">》，里面介绍如何设置</span><span style="line-height: 15pt;">vs</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目属性使用静态库和动态库。</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">在</span><span style="line-height: 15pt">Cocos2d-x 2.1.4</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，官方建议使用&#8220;</span><span style="line-height: 15pt">create_project.py&#8221;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">来创建</span><span style="line-height: 15pt;">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目，并将在版本废弃了</span><span style="line-height: 15pt">&#8220;install-template-msvc.bat&#8221;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">。</span></p>  <div style="border-top: #b01513 1pt solid; border-right: medium none; border-bottom: #b01513 1pt solid; word-break: normal; padding-bottom: 10pt; padding-top: 10pt; padding-left: 0cm; margin-left: 43.2pt; border-left: medium none; line-height: normal; padding-right: 0cm; margin-right: 43.2pt;">   <p style="padding-bottom: 0cm; padding-top: 0cm; padding-left: 0cm; margin: 18pt 0cm; line-height: 15pt; padding-right: 0cm; text-indent: 0pt" align="left"><em><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">&#8220;</span><span style="line-height: 15pt">We  recommend you use multi-platform creating tools named  create_project.py, which lies in tools/project-creator, to create a new  project. This tool can create a project has the same folder structure as  HelloCpp. Other tools such as create-android-project.sh will be removed  in future.</span></em></p>    <p style="padding-bottom: 0cm; padding-top: 0cm; padding-left: 0cm; margin: 18pt 0cm; line-height: 15pt; padding-right: 0cm; text-indent: 0pt" align="left"><em><strong><span style="line-height: 15pt">Note: VS template was deprecated in this release, please use 'tools/project-creator' instead.</span></strong><span style="line-height: 15pt">&#8221; </span></em></p>    <p style="padding-bottom: 0cm; padding-top: 0cm; padding-left: 0cm; margin: 18pt 0cm; line-height: 15pt; padding-right: 0cm; text-indent: 0pt" align="left"><em><span style="line-height: 15pt">&#8212;&#8212;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">来自官网：</span><span style="line-height: 15pt"><a style="border-bottom-style: none" href="http://goo.gl/yVAjMr"><u>http://goo.gl/yVAjMr</u></a> </span></em></p> </div>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">我入手</span><span style="line-height: 15pt">Cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">的时候，刚发布</span><span style="line-height: 15pt">Cocos2d-x 2.1.4</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，就被这个坑了。</span><span style="line-height: 15pt">Cocos2d-x 2.1.4</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">废弃了</span><span style="line-height: 15pt">&#8220;install-template-msvc.bat&#8221;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，但是下载压缩包里面又有，可恶的是不能用的，各种报错。同时网上流传的就是使用这种方法，让我绕了不少路。</span></p>  <h1><span style="font-family: ;'Century Gothic';'Century Gothic';">使用</span>create_project.py</h1>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="line-height: 15pt">create_project.py</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">（</span><span style="line-height: 15pt">cocos2d-x/tools/project-creator/</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">目录下）使用方法比较简单：</span></p>  <div style="word-break: normal; line-height: normal" align="center">   <table style="border-top: medium none; border-right: medium none; border-collapse: collapse; border-bottom: medium none; text-align: left; border-left: medium none;" border="1" cellpadding="0" cellspacing="0"><tbody>       <tr style="height: 37.5pt;">         <td style="border-top: #f7c09f 1pt solid; border-right: #f7c09f 1pt solid; border-bottom: #f4a06f 1.5pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f7c09f 1pt solid; padding-right: 5.4pt;" height="50" valign="top" width="623">           <p style=" line-height: normal; text-indent: 0pt;"><strong><span style="line-height: normal">Usage: </span></strong><span style="line-height: normal;">create_project.py -project <strong>PROJECT_NAME</strong> -package <strong>PACKAGE_NAME</strong> -language <strong>PROGRAMING_LANGUAGE</strong></span></p>         </td>       </tr>        <tr style="height: 109.5pt;">         <td style="border-top: medium none; border-right: #f7c09f 1pt solid; border-bottom: #f7c09f 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f7c09f 1pt solid; padding-right: 5.4pt;" height="146" valign="top" width="623">           <p style=" line-height: normal; text-indent: 0pt;"><strong><span style="line-height: normal">Options:</span></strong></p>            <p style=" line-height: normal; text-indent: 0pt;"><strong><span style="line-height: normal">&nbsp;</span></strong><strong><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">【</span></strong><span style="line-height: normal;">-project<span style="line-height: normal;">&nbsp;&nbsp; </span>PROJECT_NAME</span><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">】</span><span style="line-height: normal;">Project name, for example: MyGame</span></p>            <p style=" line-height: normal; text-indent: 0pt;"><span style="line-height: normal;">&nbsp;</span><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">【</span><span style="line-height: normal;">-package<span style="line-height: normal;">&nbsp;&nbsp; </span>PACKAGE_NAME</span><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">】</span><span style="line-height: normal;">Package name, for example: com.MyCompany.MyAwesomeGame</span></p>            <p style=" line-height: normal; text-indent: 0pt;"><span style="line-height: normal;">&nbsp;</span><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">【</span><span style="line-height: normal;">-language&nbsp;PROGRAMING_LANGUAGE</span><span style="font-family: ; line-height: normal;'Century Gothic';'Century Gothic';">】</span><span style="line-height: normal;">Major programing lanauge you want to used, should be [cpp | lua | javascript]<strong></strong></span></p>         </td>       </tr>        <tr style="height: 68.5pt;">         <td style="border-top: medium none; border-right: #f7c09f 1pt solid; border-bottom: #f7c09f 1pt solid; padding-bottom: 0cm; padding-top: 0cm; padding-left: 5.4pt; border-left: #f7c09f 1pt solid; padding-right: 5.4pt;" height="91" valign="top" width="623">           <p style=" line-height: normal; text-indent: 0pt;"><strong><span style="line-height: normal">Sample 1: </span></strong><span style="line-height: normal;">./create_project.py -project MyGame -package com.MyCompany.AwesomeGame<strong></strong></span></p>            <p style=" line-height: normal; text-indent: 0pt;"><strong><span style="line-height: normal">Sample 2:</span></strong><span style="line-height: normal;"> ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame &#8211;language javascript<strong></strong></span></p>         </td>       </tr>     </tbody></table> </div>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">注意：</span></strong></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">l&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">官方建议</span><span style="line-height: 15pt">python</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用</span><span style="line-height: 15pt">2.7.3</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">l&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">安装</span><span style="line-height: 15pt">python</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">之后需要设置环境变量，或者使用该脚本时指定</span><span style="line-height: 15pt">python</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">路径，如</span><span style="line-height: 15pt">C:\python27\python.exe create_project.py &#8230;</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用该方法创建项目之后，项目位于</span><strong><span style="line-height: 15pt">cocos2d-x/projects</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">目录下面。</span><span style="line-height: 15pt">windows</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">平台进入</span><span style="line-height: 15pt">proj.win32</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，打开工程文件即可。</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用</span><span style="line-height: 15pt">create_project.py</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">创建项目的原理，即简单地将</span><strong><span style="line-height: 15pt">cocos2d-x\template</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">目录下的三种语言模板</span><span style="line-height: 15pt">multi-platform-cpp</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">、</span><span style="line-height: 15pt">multi-platform-lua</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">、</span><span style="line-height: 15pt">multi-platform-js</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">复制到对应的新建工程目录下，然后用</span><strong><span style="line-height: 15pt">PROJECT_NAME</span></strong><strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">、</span><span style="line-height: 15pt">PACKAGE_NAME</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">替换模板中的</span><span style="line-height: 15pt">HelloCpp/ HelloLua/ HelloJavascript</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">。</span></p>  <h2><span style="font-family: ;'Century Gothic';'Century Gothic';">问题</span>1<span style="font-family: ;'Century Gothic';'Century Gothic';">：工程名等替换不完全</span></h2>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">下面是我用</span><span style="line-height: 15pt">towergame</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">做为工程名创建的</span><span style="line-height: 15pt">lua</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目，目录如下：</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt" align="center"><span style="line-height: 15pt;"><a href="http://images.cnitblog.com/blog/92071/201311/17213809-f2d1cbb92a2548dd954a304ebec7817d.png"><img title="clip_image001[4]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px" alt="clip_image001[4]" src="http://images.cnitblog.com/blog/92071/201311/17213810-53bc2c54df604f93b426942191fbf844.png" border="0" height="245" width="600" /></a></span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">虽然可以正常编译，但发现工程名未替换为</span><span style="line-height: 15pt">towergame</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，这比较坑爹。一位日本开发者</span><span style="line-height: 15pt"><a style="border-bottom-style: none" href="https://github.com/lettas"><u>lettas</u></a></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">已经有人提交了修复请求</span><span style="line-height: 15pt"><a style="border-bottom-style: none" href="https://github.com/cocos2d/cocos2d-x/pull/3943"><u>https://github.com/cocos2d/cocos2d-x/pull/3943</u></a></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，不过正式发布的版本中还没有修改。急着用可以去</span><span style="line-height: 15pt">github checkout</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">下来用。</span></p>  <h2><span style="font-family: ;'Century Gothic';'Century Gothic';">问题</span>2<span style="font-family: ;'Century Gothic';'Century Gothic';">：创建项目不能指定路径</span></h2>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用</span><span style="line-height: 15pt">create_project.py</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">不能自定义路径，必须放在</span><strong><span style="line-height: 15pt">cocos2d-x/projects</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">目录下面，<strong>这个设定我认为非常不合理</strong>！这样将自己的项目放到</span><span style="line-height: 15pt">cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">引擎目录中，不方便管理，即库与项目耦合到一起了，如果</span><span style="line-height: 15pt">cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">升级也不方便。</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">比较合理的方案是：</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">l&nbsp;</span></span><strong><span style="line-height: 15pt">cocos2d-x</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">独立安装，这样对</span><span style="line-height: 15pt">cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">升级也相对简单。</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="font-family: ; line-height: 15pt;"><span style="line-height: 15pt;">l&nbsp;</span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">新建</span><strong><span style="line-height: 15pt">cocos2d-x</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目独立于</span><strong><span style="line-height: 15pt">cocos2d-x</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">安装路径。通过设置搜索或引用路径，让项目能够找到</span><strong><span style="line-height: 15pt">cocos2d-x</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">安装路径。</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">幸运的是，完全可以做到这样。熟悉</span><span style="line-height: 15pt">VS</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">的同学应该知道，</span><span style="line-height: 15pt">VS</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">工程设置是支持</span><strong><span style="font-family: ; line-height: 18pt;'Century Gothic';'Century Gothic';">环境变量</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">的。通过下面的一些改造，可以让新建的</span><span style="line-height: 15pt">cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">项目独立于</span><span style="line-height: 15pt">cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">引擎目录：</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="line-height: 15pt;'Century Gothic';'Century Gothic';"><span style="line-height: 15pt;">1)<span style="font-family: ; line-height: normal">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">将通过</span><span style="line-height: 15pt">create_project.py</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">创建的项目剪切到你希望放置的目录；</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="line-height: 15pt;'Century Gothic';'Century Gothic';"><span style="line-height: 15pt;">2)<span style="font-family: ; line-height: normal">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">创建环境变量</span><strong><span style="line-height: 15pt">COCOS2DX_HOME</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，指向</span><span style="line-height: 15pt">cocos2d-x</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">安装目录；</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="line-height: 15pt;'Century Gothic';'Century Gothic';"><span style="line-height: 15pt;">3)<span style="font-family: ; line-height: normal">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">将</span><strong><span style="line-height: 15pt">*.sln</span></strong><strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">文件</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用文本方式打开，<strong>将里面的所有相对路径</strong></span><strong><span style="line-height: 15pt">&#8220;..\..\..&#8221;</span></strong><strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">都替换为环境变量</span><span style="line-height: 15pt">%COCOS2DX_HOME%</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">，如&#8220;</span><span style="line-height: 15pt">..\..\..\cocos2dx\proj.win32\cocos2d.vcxproj&#8221;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">替换为</span><strong><span style="line-height: 15pt">&#8220;%COCOS2DX_HOME%</span></strong><span style="line-height: 15pt">\cocos2dx\proj.win32\cocos2d.vcxproj&#8221;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">；</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt 21pt; line-height: 15pt; text-indent: -21pt;"><span style="line-height: 15pt;'Century Gothic';'Century Gothic';"><span style="line-height: 15pt;">4)<span style="font-family: ; line-height: normal">&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">将</span><strong><span style="line-height: 15pt">*.vcxproj</span></strong><strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">文件</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">使用文本方式打开，将里面</span><span style="line-height: 15pt">debug</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">、</span><span style="line-height: 15pt">release 2</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">种模式下</span><span style="line-height: 15pt">&lt;AdditionalIncludeDirectories&gt;</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">节点定义的引用路径中包含</span><strong><span style="line-height: 15pt">&#8221;$(ProjectDir)..\..\..\&#8221;</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">都替换为<strong>环境变量</strong></span><strong><span style="line-height: 15pt">&#8220;$(COCOS2DX_HOME)\&#8221;</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">；注意这里使用环境变量的方式与</span><span style="line-height: 15pt">*.sln</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">中不一样，是</span><strong><span style="line-height: 15pt">$(COCOS2DX_HOME)</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">而非</span><strong><strike><span style="line-height: 15pt">%COCOS2DX_HOME%</span></strike></strong><strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">。</span></strong></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">至此，大工告成！看下面的运行起来的</span><span style="line-height: 15pt">vs</span><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">工程：</span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt" align="center"><span style="line-height: 15pt;"><a href="http://images.cnitblog.com/blog/92071/201311/17213824-8c9046be1a8444b289a1d87460f890cd.jpg"><img title="clip_image003[4]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" alt="clip_image003[4]" src="http://images.cnitblog.com/blog/92071/201311/17213826-98578c134b2c43a9ab161b7bdc26c119.jpg" border="0" height="432" width="624" /></a></span></p>  <p style="word-break: normal; margin: 0cm 0cm 8pt; line-height: 15pt; text-indent: 0pt"><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">图中依赖的工程跟将新建的项目放在</span><strong><span style="line-height: 15pt">cocos2d-x/projects</span></strong><span style="font-family: ; line-height: 15pt;'Century Gothic';'Century Gothic';">目录下面一样可以链接到。</span></p><span style="font-size:12.0pt; line-height:125%;font-family:&quot;Microsoft YaHei UI&quot;,&quot;sans-serif&quot;;Century Gothic&quot;;Century Gothic&quot;;Times New Roman&quot;;">上面的替换工作可以用文本的查找替换功能，可以轻松搞定。但是为了能够与</span><span style="font-size:12.0pt;line-height:125%; font-family:&quot;Century Gothic&quot;,&quot;sans-serif&quot;;Microsoft YaHei UI&quot;;Times New Roman&quot;;">create_project.py</span><span style="font-size:12.0pt;line-height:125%;font-family: &quot;Microsoft YaHei UI&quot;,&quot;sans-serif&quot;;Century Gothic&quot;;Century Gothic&quot;;Times New Roman&quot;;">集成，我提供下面一段代码能够自动替换</span><span style="font-size:12.0pt;line-height:125%;font-family: &quot;Century Gothic&quot;,&quot;sans-serif&quot;;Microsoft YaHei UI&quot;;Times New Roman&quot;;">.sln</span><span style="font-size:12.0pt;line-height:125%;font-family: &quot;Microsoft YaHei UI&quot;,&quot;sans-serif&quot;;Century Gothic&quot;;Century Gothic&quot;;Times New Roman&quot;;">、</span><span style="font-size:12.0pt;line-height:125%;font-family:&quot;Century Gothic&quot;,&quot;sans-serif&quot;;Microsoft YaHei UI&quot;;Times New Roman&quot;;">.vcxproj</span><span style="font-size:12.0pt;line-height:125%;font-family:&quot;Microsoft YaHei UI&quot;,&quot;sans-serif&quot;;Century Gothic&quot;;Century Gothic&quot;;Times New Roman&quot;;">文件中对于内容：</span><br /><p>&nbsp;<span style="background-color: #f5f5f5; font-family: 'Courier New'; font-size: 13px; line-height: 1.5; color: #008000;">#</span><span style="background-color: #f5f5f5; font-family: 'Courier New'; font-size: 13px; line-height: 1.5; color: #008000;">!/usr/bin/python &nbsp;&nbsp;</span></p><div><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div><div><span style="color: #008000;">#</span><span style="color: #008000;">-*-&nbsp;encoding:utf-8&nbsp;-*-&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br /></span><br /><span style="color: #0000FF;">import</span>&nbsp;sys,&nbsp;os<br /><br /><span style="color: #0000FF;">def</span>&nbsp;checkOption():<br />&nbsp;&nbsp;&nbsp;&nbsp;argLen&nbsp;=&nbsp;len(sys.argv)<br />&nbsp;&nbsp;&nbsp;&nbsp;targetPath&nbsp;=&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">./</span><span style="color: #800000;">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">if</span>&nbsp;argLen&nbsp;==&nbsp;2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetPath&nbsp;=&nbsp;sys.argv[1]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">if</span>&nbsp;<span style="color: #0000FF;">not</span>&nbsp;targetPath.endswith(<span style="color: #800000;">"</span><span style="color: #800000;">/</span><span style="color: #800000;">"</span>):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targetPath&nbsp;+=&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">/</span><span style="color: #800000;">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">return</span>&nbsp;targetPath<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF;">def</span>&nbsp;replaceCocos2dxPath(path):<br />&nbsp;&nbsp;&nbsp;&nbsp;filelists&nbsp;=&nbsp;os.listdir(path)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">for</span>&nbsp;item&nbsp;<span style="color: #0000FF;">in</span>&nbsp;filelists:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suffix&nbsp;=&nbsp;(os.path.splitext(item))[1]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">print</span>(suffix)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">if</span>&nbsp;suffix&nbsp;==&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">.sln</span><span style="color: #800000;">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">print</span>(<span style="color: #800000;">'</span><span style="color: #800000;">replace&nbsp;"..\..\..\"&nbsp;with&nbsp;%COCOS2DX_HOME%&nbsp;in&nbsp;*.sln</span><span style="color: #800000;">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">#</span><span style="color: #008000;">replace&nbsp;"..\..\..\"&nbsp;with&nbsp;%COCOS2DX_HOME%&nbsp;in&nbsp;*.sln&nbsp;</span><span style="color: #008000;"><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;=&nbsp;open(path&nbsp;+&nbsp;item,&nbsp;<span style="color: #800000;">'</span><span style="color: #800000;">r</span><span style="color: #800000;">'</span>).read().replace(<span style="color: #800000;">"</span><span style="color: #800000;">..\\..\\..\\</span><span style="color: #800000;">"</span>,&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">%COCOS2DX_HOME%\\</span><span style="color: #800000;">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;=&nbsp;open(path&nbsp;+&nbsp;item,&nbsp;<span style="color: #800000;">'</span><span style="color: #800000;">w</span><span style="color: #800000;">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.write(content)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.close()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">if</span>&nbsp;suffix&nbsp;==&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">.vcxproj</span><span style="color: #800000;">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF;">print</span>(<span style="color: #800000;">'</span><span style="color: #800000;">replace&nbsp;"$(ProjectDir)..\..\..\"&nbsp;with&nbsp;$(COCOS2DX_HOME)\&nbsp;in&nbsp;*.vcxproj</span><span style="color: #800000;">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">#</span><span style="color: #008000;">replace&nbsp;"$(ProjectDir)..\..\..\"&nbsp;with&nbsp;$(COCOS2DX_HOME)\&nbsp;in&nbsp;*.vcxproj</span><span style="color: #008000;"><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;=&nbsp;open(path&nbsp;+&nbsp;item,&nbsp;<span style="color: #800000;">'</span><span style="color: #800000;">r</span><span style="color: #800000;">'</span>).read().replace(<span style="color: #800000;">"</span><span style="color: #800000;">$(ProjectDir)..\\..\\..\\</span><span style="color: #800000;">"</span>,&nbsp;<span style="color: #800000;">"</span><span style="color: #800000;">$(COCOS2DX_HOME)\\</span><span style="color: #800000;">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;=&nbsp;open(path&nbsp;+&nbsp;item,&nbsp;<span style="color: #800000;">'</span><span style="color: #800000;">w</span><span style="color: #800000;">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.write(content)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.close()<br /><br /><span style="color: #0000FF;">if</span>&nbsp;&nbsp;<span style="color: #800080;">__name__</span>&nbsp;==&nbsp;<span style="color: #800000;">'</span><span style="color: #800000;">__main__</span><span style="color: #800000;">'</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;targetPath&nbsp;=&nbsp;checkOption()<br />&nbsp;&nbsp;&nbsp;&nbsp;replaceCocos2dxPath(targetPath)</div><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/207189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2014-06-04 16:09 <a href="http://www.cppblog.com/colorful/archive/2014/06/04/207189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>