﻿<?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++博客-f(sixleaves) = sixleaves-随笔分类-cocos2dx</title><link>http://cppblog.com/sixleaves/category/20816.html</link><description>重剑无锋 大巧不工</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2015 13:03:49 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2015 13:03:49 GMT</pubDate><ttl>60</ttl><item><title>cocos2dx之坐标系详解</title><link>http://www.cppblog.com/sixleaves/archive/2015/04/06/210254.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Sun, 05 Apr 2015 17:53:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2015/04/06/210254.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/210254.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2015/04/06/210254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/210254.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/210254.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: cocos2dx坐标系与笛卡尔坐标系简而言之，cocos2dx的2d中的坐标系与我们初中所学的笛卡尔坐标系一样。也就是向右为X正轴，向上为Y正轴。在屏幕中，其原点位于屏幕的左下方。屏幕坐标系屏幕坐标系的Y正轴是向下，X正轴不变。原点位于左上方。World Coordinate与Node LocalWorld Coordinate == &gt; 世界坐标系、绝对坐标系Node Local == &...&nbsp;&nbsp;<a href='http://www.cppblog.com/sixleaves/archive/2015/04/06/210254.html'>阅读全文</a><img src ="http://www.cppblog.com/sixleaves/aggbug/210254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2015-04-06 01:53 <a href="http://www.cppblog.com/sixleaves/archive/2015/04/06/210254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx之调度器(Scheduler)</title><link>http://www.cppblog.com/sixleaves/archive/2015/04/06/210253.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Sun, 05 Apr 2015 16:57:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2015/04/06/210253.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/210253.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2015/04/06/210253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/210253.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/210253.html</trackback:ping><description><![CDATA[<img src="http://cn.cocos2d-x.org/doc/cocos-docs-master/manual/framework/native/v3/scheduler/res/inherent.png" alt="inherent" /><br />cocos2dx调度器的类图路上所示，调度器继承自Ref类，该类实现了内存的自动管理机制。<br />我们先看一下官方文档的介绍，一下是引用官方文档，到-----线为止。<br /><h2>原理介绍</h2><p style="margin: 15px 0px; padding: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;">Cocos2d-x调度器为游戏提供定时事件和定时调用服务。所有Node对象都知道如何调度和取消调度事件，使用调度器有几个好处：</p><ol style="margin: 15px 0px; padding: 0px 0px 0px 30px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;"><li style="margin: 0px; padding: 0px;">每当Node不再可见或已从场景中移除时，调度器会停止。</li><li style="margin: 0px; padding: 0px;">Cocos2d-x暂停时，调度器也会停止。当Cocos2d-x重新开始时，调度器也会自动继续启动。</li><li style="margin: 0px; padding: 0px;">Cocos2d-x封装了一个供各种不同平台使用的调度器，使用此调度器你不用关心和跟踪你所设定的定时对象的销毁和停止，以及崩溃的风险。</li></ol><h2>基础用法</h2><p style="margin: 15px 0px; padding: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;"><span style="color: red;">使用场景：</span>游戏中我们经常会随时间的变化而做一些逻辑判断，如碰撞检测。为了解决以上问题，我们引入了调度器，这使得游戏能够更好的处理动态事件。Cocos2d-x提供了多种调度机制，在开发中我们通常会用到3种调度器：</p><ol style="margin: 15px 0px; padding: 0px 0px 0px 30px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;"><li style="margin: 0px; padding: 0px;">默认调度器:<code style="margin: 0px; border: 1px solid #dddddd; border-radius: 3px; padding: 0px; background-color: #f8f8f8;">schedulerUpdate()</code></li><li style="margin: 0px; padding: 0px;">自定义调度器:<code style="margin: 0px; border: 1px solid #dddddd; border-radius: 3px; padding: 0px; background-color: #f8f8f8;">schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)</code></li><li style="margin: 0px; padding: 0px;">单次调度器:<code style="margin: 0px; border: 1px solid #dddddd; border-radius: 3px; padding: 0px; background-color: #f8f8f8;">scheduleOnce(SEL_SCHEDULE selector, float delay)</code></li></ol><p style="margin: 15px 0px; padding: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;">以下我们来对这3种调度器做简单的介绍。<br /><br />-------------------------------------------------------------------------------------------------------------------------------------------------------------------<br /><span style="color: red;">我的理解：</span><br />我们知道schedulerUpdate()也就是默认调度器的实现是基于update方法，该方法是虚方法定义在Node类中，在cocos2dx框架中。会在每次绘制一帧之前调用update方法，但是默认情况下，这个方法是不启用的。<br />也许你也有这个疑问，为什么update方法可以实现调度。可以实现游戏逻辑的判断。这就需要对游戏有一个认识，游戏都是由一帧一帧绘制而成，在一定范围内的不同时刻，对应的会是不同的游戏画面。回想一下，你学过的微积分<br />，如果我们把游戏的看成是微积分，那么这每一帧就是微分。所以帧率越高，游戏越逼真，越流程，体验度越高。我们也可以借助这一思想来理解，为什官方框架中会对update做出下面这句解释。<br /><span style="line-height: 25.2000007629395px; color: #339966; background-color: #ffffff;">该调度器是使用Node的刷新事件update方法，该方法在每帧绘制之前都会被调用一次。由于每帧之间时间间隔较短，所以每帧刷新一次已足够完成大部分游戏过程中需要的逻辑判断。</span><span style="line-height: 25.2000007629395px; color: #000000; background-color: #ffffff;">绿色这句话是引用自官方，可能你会不理解<br />为什么说每帧之间间隔较短，所以每一帧刷新以此足够完成部分游戏逻辑的判断。<br />由官方文档我们知道一下代码的执行顺序，下面用伪代码表示<br />{<br /></span>&nbsp; &nbsp; &nbsp; &nbsp;1：<span style="line-height: 25.2000007629395px; color: #000000; background-color: #ffffff;"><br /></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update();执行update方法<br /><span style="line-height: 25.2000007629395px; color: #000000; background-color: #ffffff;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;drawOneFrame();绘制一帧<br /></span>&nbsp; &nbsp; &nbsp; &nbsp; go 1;<span style="line-height: 25.2000007629395px; color: #000000; background-color: #ffffff;"><br />}<br />由上面的伪代码我们知道其想表达的意思是说，由于帧率比较高，能模拟出更真实的效果。而update方法敲好是在两帧之间调用，所以update的执行时间一般来说是和帧率相互挂钩。<br />也就是说update里面的所有变量其实是无限趋近于drawOneFrame()的。所以我们可以再update中书写一些游戏逻辑。简而言之，在update里面可以做的事等效于给每一帧里面各个对象的做逻辑判断。<br /><br /><br /></span><span style="line-height: 25.2000007629395px; color: red; background-color: #ffffff;">接下来分析下自定义调度器，先看官方文档解说。</span><span style="line-height: 25.2000007629395px; color: #000000; background-color: #ffffff;"></span></p><h3 style="margin: 1em 0px 15px; padding: 0px; font-weight: normal; color: #333333; line-height: 1.7; cursor: text; position: relative; font-size: 1.6em; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif;">自定义调度器(scheduler)</h3><p style="margin: 15px 0px; padding: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;">游戏开发中，在某些情况下我们可能不需要频繁的进行逻辑检测，这样可以提高游戏性能。所以Cocos2d-x还提供了自定义调度器，可以实现以一定的时间间隔连续调用某个函数。</p><p style="margin: 15px 0px; padding: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;">由于引擎的调度机制，自定义时间间隔必须大于两帧的间隔，否则两帧内的多次调用会被合并成一次调用。所以自定义时间间隔应在0.1秒以上。</p><p style="margin: 15px 0px; padding: 0px; color: #333333; font-family: 'Helvetica Neue', Helvetica, STheiti, Arial, Tahoma, 微软雅黑, sans-serif, serif; line-height: 25.2000007629395px;">同样，取消该调度器可以用<code style="margin: 0px; border: 1px solid #dddddd; border-radius: 3px; padding: 0px; background-color: #f8f8f8;">unschedule(SEL_SCHEDULE selector, float delay)。<br /><span style="color: red;">我的理解:</span><br />其实读完这个解说你应该更清楚了我前面理论的正确性，如果你定义的间隔时间比两帧短，也就是说，将在同一帧类不断的重复回调selector指向的方法。但这是不需要的所以官方会说将</code><span style="line-height: 25.2000007629395px;">两帧内的多次调用会被合并成一次调用。<br />自定义时间应该在0.1秒以上，帧率就是10.也就是你定义的定时器的频率应该小于10，或者说间隔时间应该大于0.1。<br /><br /><br />当然cocos2dx框架还提供单次调度器具体看官方文档，这个就很好理解了，不解释和分析。<br /></span>2015/4/6上午1:03:59</p><img src ="http://www.cppblog.com/sixleaves/aggbug/210253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2015-04-06 00:57 <a href="http://www.cppblog.com/sixleaves/archive/2015/04/06/210253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>02-cocos2dx-基本内功第一部-常用宏定义</title><link>http://www.cppblog.com/sixleaves/archive/2014/10/09/208522.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Thu, 09 Oct 2014 06:29:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2014/10/09/208522.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/208522.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2014/10/09/208522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/208522.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/208522.html</trackback:ping><description><![CDATA[<strong>这篇主要总结下cocos2dx中常用到的3大宏定义（数学类宏定义、数据结构相关宏定义、对象相关宏定义），由于在win下的vs编译太慢，所以这些测试代码都是在mac下编译的，有如下</strong>
<div><strong>之所以分为三大类是为了方便记忆、归纳。分类不在于分细、而在于简约、容易记忆。<br />
</strong><strong style="color: red;">1.数学相关的宏</strong><strong><br />
CCRANDOM_MINUS1_1()、CCRANDOM_0_1()、CC_DEGREES_TO_RADIANS、CC_RADIANS_TO_DEGREES()</strong><br />
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080;">1</span>&nbsp;log("CCRANDOM_MINUS1_1=%f",&nbsp;CCRANDOM_MINUS1_1());<br />
<span style="color: #008080;">2</span>&nbsp;log("CCRANDOM_0_1=%f",&nbsp;CCRANDOM_0_1());<br />
<span style="color: #008080;">3</span>&nbsp;log("CC_DEGREES_TO_RADIANS(30)=%f",&nbsp;CC_DEGREES_TO_RADIANS());<br />
<span style="color: #008080;">4</span>&nbsp;log("CC_RADIANS_TO_DEGREES(180)=%f",CC_RADIANS_TO_DEGREES());<br />
<span style="color: #008080;">5</span>&nbsp;<span style="color: #0000ff;">int</span>&nbsp;x&nbsp;=&nbsp;10;<br />
<span style="color: #008080;">6</span>&nbsp;<span style="color: #0000ff;">int</span>&nbsp;y&nbsp;=&nbsp;20;<br />
<span style="color: #008080;">7</span>&nbsp;CC_SWAP(x,&nbsp;y,&nbsp;<span style="color: #0000ff;">int</span>);<br />
<span style="color: #008080;">8</span>&nbsp;log("交换后x=%d,y=%d",x,y);</strong></div>
<strong>输出：
</strong>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080; ">1</span>&nbsp;cocos2d:&nbsp;CCRANDOM_MINUS1_1()=-0.999984<br />
<span style="color: #008080; ">2</span>&nbsp;cocos2d:&nbsp;CCRANDOM_0_1()=0.131538<br />
<span style="color: #008080; ">3</span>&nbsp;cocos2d:&nbsp;CC_DEGREES_TO_RADIANS()=0.523599<br />
<span style="color: #008080; ">4</span>&nbsp;cocos2d:&nbsp;CC_RADIANS_TO_DEGREES()=20626.480469<br />
<span style="color: #008080; ">5</span>&nbsp;cocos2d:&nbsp;x=20,y=10</strong></div>
</div>
<strong><span style="color: red;">#1.2断言宏</span></strong>
<div><font color="#ff0000"><strong>把这个归位数学类，是因为我认为，断言本身就是属于数学的一种抽象名词<br />
</strong></font><strong>
</strong>
<div><font color="#ff0000"><span style="color: #000000;"><strong>ASSERT(cone, msg);</strong></span></font></div>
<div><font color="#ff0000"><span style="color: #000000;"><strong>第一个参数是条件，为false则提示msg消息。</strong></span></font></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;*point&nbsp;=&nbsp;NULL;<br />
<span style="color: #008080; ">2</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;CCAssert(point&nbsp;!=&nbsp;NULL,"something&nbsp;wrong");</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;CCASSERT(point&nbsp;!=&nbsp;NULL,&nbsp;"somthing&nbsp;wrong");</strong></div>
</div>
<strong>
输出:
</strong>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080; ">1</span>&nbsp;cocos2d:&nbsp;Assert&nbsp;failed:&nbsp;somthing&nbsp;wrong<br />
<span style="color: #008080; ">2</span>&nbsp;Assertion&nbsp;failed:&nbsp;(point&nbsp;!=&nbsp;__null),&nbsp;function&nbsp;init,&nbsp;file&nbsp;/Users/mac/Desktop/gameDevelopment/1410/testMacro/Classes/HelloWorldScene.cpp,&nbsp;line&nbsp;39.</strong></div>
<div><strong><br />
</strong></div>
<div><strong><br />
</strong></div>
</div>
<div><span style="color: red;"><strong>2.与特定数据结构相关的宏(主要用来遍历、如同迭代器)</strong></span></div>
<div><strong>CCARRAY_FOREACH、CCDICT_FOREACH</strong></div>
<div><strong>CCARRAY_FOREACH</strong></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080; ">1</span>&nbsp; &nbsp; &nbsp;__Array&nbsp;*&nbsp;arrayMe&nbsp;= __Array::create();<br />
<span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrayMe-&gt;addObject(__Integer::create(1));<br />
<span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrayMe-&gt;addObject(__Integer::create(2));<br />
<span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arrayMe-&gt;addObject(__Integer::create(3));<br />
<span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ref&nbsp;*&nbsp;<span style="color: #0000FF; ">ref</span>&nbsp;=&nbsp;NULL;<br />
<span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CCARRAY_FOREACH(arrayMe,&nbsp;<span style="color: #0000FF; ">ref</span>)&nbsp;{<br />
<span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;*pInt&nbsp;=&nbsp;(Integer&nbsp;*)<span style="color: #0000FF; ">ref</span>;<br />
<span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("CCARRAY_FOREACH:%d",&nbsp;pInt-&gt;getValue());<br />
<span style="color: #008080; ">9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</strong></div>
</div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><strong><br />
</strong></div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><strong>输出：</strong></div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;">
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong>cocos2d: CCARRAY_FOREACH:1</strong></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong>cocos2d: CCARRAY_FOREACH:2</strong></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong>cocos2d: CCARRAY_FOREACH:3</strong></p>
</div>
<strong>
CCDICT_FOREACH
</strong>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__Dictionary&nbsp;*&nbsp;dict&nbsp;=&nbsp;__Dictionary::create();<br />
<span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict-&gt;setObject(__Integer::create(1),&nbsp;"one");<br />
<span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict-&gt;setObject(__Integer::create(2),&nbsp;"two");<br />
<span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict-&gt;setObject(__Integer::create(3),&nbsp;"three");<br />
<span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DictElement&nbsp;*el&nbsp;=&nbsp;NULL;<br />
<span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CCDICT_FOREACH(dict,&nbsp;el)&nbsp;{<br />
<span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__Integer&nbsp;*pVlaue&nbsp;=&nbsp;(__Integer*)el-&gt;getObject();<br />
<span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("KEY=%s,CCDICT_FOREACH&nbsp;%d",el-&gt;getStrKey(),pVlaue-&gt;getValue());<br />
<span style="color: #008080; ">9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</strong></div>
</div>
<strong>
需要注意的是dictionary中得元素都是DictElement类型，其封装了每个元素的Object和对应的key。<br />
</strong>
<div><strong>输出:</strong></div>
<div>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong>cocos2d: KEY=one,CCDICT_FOREACH 1</strong></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong>cocos2d: KEY=two,CCDICT_FOREACH 2</strong></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong>cocos2d: KEY=three,CCDICT_FOREACH 3</strong></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong><br />
</strong></p>
<p style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><strong><br />
</strong></p>
</div>
<div><span style="color: red;"><strong>3.对象相关宏定义</strong></span></div>
<div><span style="color: red;"><strong>#3.1对象创建方法宏CREATE_FUNC</strong></span></div>
<div><span style="color: #008000;"><strong>这里直接贴出这个的宏定义，其主要意思</strong></span></div>
<div><span style="color: #008000;"><strong>就是先new、new完后是通过init初始化，而不是构造函数。如果</strong></span></div>
<div><span style="color: #008000;"><strong>init返回false，也就是失败。则释放对象返回NULL。否则，把其加入</strong></span></div>
<div><span style="color: #008000;"><strong>自动管理的内存池，然后返回该对象的引用（本质是指针）。</strong></span></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;CREATE_FUNC(__TYPE__)&nbsp;\<br />
<span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;__TYPE__*&nbsp;create()&nbsp;\<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;{&nbsp;\<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__TYPE__&nbsp;*pRet&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;__TYPE__();&nbsp;\<br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pRet&nbsp;&amp;&amp;&nbsp;pRet-&gt;init())&nbsp;\<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRet-&gt;autorelease();&nbsp;\<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pRet;&nbsp;\<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />
<span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;\<br />
<span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />
<span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pRet;&nbsp;\<br />
<span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRet&nbsp;=&nbsp;NULL;&nbsp;\<br />
<span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;&nbsp;\<br />
<span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />
<span style="color: #008080; ">16</span>&nbsp;}<br />
<span style="color: #008080; ">17</span>&nbsp;</strong></div>
</div>
<div><span style="color: red;"><strong>#3.2属性定义宏</strong></span></div>
<div><span style="color: #000000;"><strong>CC_PROPERTY(tpye, varName, funName);</strong></span></div>
<div><span style="color: #008000;"><strong>这个功能其就是用C++得方式，实现了C#中的属性，通过这个宏定义，</strong></span></div>
<div><span style="color: #008000;"><strong>可以自动生产protected的成员变量，和public的虚setter、getter方法</strong></span></div>
<div><span style="color: #008000;"><strong>具体的setter、getter实现需要，自己实现。如下</strong></span></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><strong><span style="color: #008000; ">//</span><span style="color: #008000; ">Monster.h</span><span style="color: #008000; "><br />
</span>#ifndef&nbsp;__Monster_H__<br />
<span style="color: #0000FF; ">#define</span>&nbsp;__Monster_H__<br />
#include&nbsp;"cocos2d.h"<br />
USING_NS_CC;<br />
<span style="color: #0000FF; ">class</span>&nbsp;Monster:<span style="color: #0000FF; ">public</span>&nbsp;Sprite&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;CC_PROPERTY(<span style="color: #0000FF; ">int</span>,&nbsp;_monsterHp,&nbsp;MonsterHp);<br />
<span style="color: #0000FF; ">public</span>:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;CREATE_FUNC(Monster);<br />
};<br />
<span style="color: #0000FF; ">#endif</span><br />
<span style="color: #008000; ">//</span><span style="color: #008000; ">Monster.cpp<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;Monster.cpp<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;testMacro<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;Created&nbsp;by&nbsp;sixleaves&nbsp;on&nbsp;14-10-9.<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
</span><span style="color: #008000; ">//<br />
</span><br />
#include&nbsp;"Monster.h"<br />
<br />
<br />
<span style="color: #0000FF; ">void</span>&nbsp;Monster::setMonsterHp(<span style="color: #0000FF; ">int</span>&nbsp;var)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;_monsterHp&nbsp;=&nbsp;var;<br />
}<br />
<br />
<span style="color: #0000FF; ">int</span>&nbsp;Monster::getMonsterHp()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;_monsterHp;<br />
}<br />
<br />
<span style="color: #0000FF; ">bool</span>&nbsp;Monster::init()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />
}<br />
<span style="color: #008000; ">//</span><span style="color: #008000; ">HelloWorldScene.cpp</span><span style="color: #008000; "><br />
</span>&nbsp;auto&nbsp;monster&nbsp;=&nbsp;Monster::create();<br />
&nbsp;monster-&gt;setMonsterHp(100);<br />
&nbsp;log("monster&nbsp;HP&nbsp;=&nbsp;%d",&nbsp;monster-&gt;getMonsterHp());</strong></div>
</div>
<strong>
输出：
cocos2d: monster HP = 100
</strong>
<div><strong>提示：还有CC_RROPERTY_XXXX系列的其他宏定义，这里只介绍这个，因为比较常使用，其他自己了解。</strong></div>
<div><strong><br />
</strong></div>
<div><strong>2014.10.09 by sixleaves</strong></div>
</div>
</div><img src ="http://www.cppblog.com/sixleaves/aggbug/208522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2014-10-09 14:29 <a href="http://www.cppblog.com/sixleaves/archive/2014/10/09/208522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>01-cocos2dx-基本内功第一部-基本数据结构</title><link>http://www.cppblog.com/sixleaves/archive/2014/10/07/208510.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Tue, 07 Oct 2014 15:59:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2014/10/07/208510.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/208510.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2014/10/07/208510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/208510.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/208510.html</trackback:ping><description><![CDATA[@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&amp;file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
cocos2dx封装了一些常用的数据结构，我们分为两个部分介绍。一部分是对基本数据类型，int、float、double、bool的装箱。一部分是比较复杂的复合数据结构__String、__Array、__Dictionary、Size、Rect、Point、这些数据结构大多数是用C++方式重写了OC语言中Foundation框架的接口。所以有OC底子的可以调过，大概浏览即可。<br />
<span style="color: red;"><strong>第一部分：</strong></span><br />
&nbsp; &nbsp; &nbsp; int对应的装箱是Integer，在cocos2dx中创建这种整数对象是用create方法，auto pInt = Integer::create(30);<br />
&nbsp; &nbsp; &nbsp; int &nbsp; &nbsp; &nbsp; ---------auto pInt &nbsp; &nbsp; &nbsp;= __Integer::create(2);<br />
&nbsp; &nbsp; &nbsp; double ---------auto pDouble = &nbsp;__Double::create(1.0);<br />
&nbsp; &nbsp; &nbsp; float &nbsp; &nbsp;---------auto pFloat &nbsp; &nbsp;= &nbsp;__Float::create(2.0);<br />
<span style="color: red;"><strong>第二部分：</strong></span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #008000;"> 复合数据结构</span><br />
&nbsp; &nbsp; <strong>&nbsp;<span style="color: #008000;">&nbsp;__String</span></strong><br />
&nbsp; &nbsp; &nbsp; auto pStr = String::create("cocos2dx");<br />
&nbsp; &nbsp; &nbsp; auto pStr2 = String::createWithFormat("I love %s", pStr-&gt;getCString());<br />
<div><span style="white-space: pre;">&nbsp; </span>bool isEqualEach = pStr-&gt;isEqual(pStr2);</div>
<div><span style="white-space: pre;">&nbsp; </span>log("%s",isEqualEach == true?"Equal":"not Equal");<br />
&nbsp; &nbsp; &nbsp;#结果是notEqual<br />
&nbsp; <strong>&nbsp; &nbsp;__<span style="color: #008000;">Array</span></strong><br />
&nbsp; &nbsp; &nbsp;Array对象是对C++中数组的封装。Array中的元素是Ref、可以存不同的数据类型。<br />
&nbsp; &nbsp; &nbsp;创建一个空数组，Array::create()<br />
&nbsp; &nbsp; &nbsp;增：add系列、addObject 删：removeXXX系列，代表removeObjectAtIndext() 改:replaceObjectAtIndex() &nbsp;查：get系列、getIndexOfObject()<br />
&nbsp; &nbsp;&nbsp;<br />
&nbsp; <strong style="color: #008000;">&nbsp; &nbsp;__Dictionary</strong><br />
&nbsp; &nbsp; &nbsp;创建字典对象，auto pDict = Dictionary::create()<br />
&nbsp; &nbsp; &nbsp;添加键值对，pDict-&gt;setObject(obj, "key");<br />
&nbsp; &nbsp; &nbsp;删除键对应的值， pDict-&gt;removeObjectForKey("someKey");<br />
&nbsp; &nbsp; &nbsp;查 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ，pDict-&gt;ObjectForKey("someKey");<br />
&nbsp; &nbsp; &nbsp;auto pDict = Dictionary::create();<br />
&nbsp; &nbsp; &nbsp;auto pV1 = String::create("V1");<br />
&nbsp; &nbsp; &nbsp;auto pV2 = String::create("V2");<br />
&nbsp; &nbsp; &nbsp;pDict-&gt;setObject(pV1, "key1");<br />
&nbsp; &nbsp; &nbsp;pDict-&gt;setObject(pV2, "key2");<br />
&nbsp; &nbsp; &nbsp;String *pStr1 = (String*)pDict-&gt;ObjectForKey("key1");<br />
&nbsp; &nbsp; &nbsp;String *pStr2 = (String*)pDict-&gt;ObjectForKey("key2");<br />
&nbsp; &nbsp; &nbsp;log("str1 = %s,str2 = %s", pStr1-&gt;getCString(), pStr2-&gt;getCString());<br />
&nbsp; &nbsp; #使用ObjectForKey获得的是Object对象，要强制类型转换为你确定的那个类型。<br />
&nbsp;<strong style="color: #008000;"> &nbsp; Size、Rect、Point</strong><br />
&nbsp; &nbsp; Size于Rect的区别是Size只有长宽的属性，而Rect还有个起始点属性，他们都是表示一块矩形区域。<br />
&nbsp; &nbsp; 其中Rect最常使用的是用来判断某个点在不再这个矩形区域内。其实他们都是对象，不像OC中是结构体。<br />
&nbsp; &nbsp;&nbsp;<span style="font-size: 13px; color: #008080;">&nbsp;1</span><span style="font-size: 13px; background-color: #eeeeee;">&nbsp;</span><span style="font-size: 13px; background-color: #eeeeee;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 13px; color: #008000;">//</span><span style="font-size: 13px; color: #008000;">生成两个点</span></div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;point1&nbsp;=&nbsp;Point(10,10);<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;point2&nbsp;=&nbsp;Point(60,60);<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;point3;<br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">点1与x轴的夹角</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;log("\n点1(%f,%f)与x轴的夹角为:%f",point1.x,point1.y,point1.getAngle());<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">两个点的夹角</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;log("\n点1(%f,%f)与点2(%f,%f)的夹角为:%f",point1.x,point1.y,point2.x,point2.y,point1.getAngle(point2));<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">两个点的距离</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;log("\n点1(%f,%f)与点2(%f,%f)的距离为:%f",<br />
<span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point1.x,point1.y,point2.x,point2.y,point1.getDistance(point2));<br />
<span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">两个点相加</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;point3&nbsp;=&nbsp;point1&nbsp;+&nbsp;point2;<br />
<span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("\n(%f,%f)+(%f,%f)=(%f,%f)",point1.x,point1.y,point2.x,point2.y,point3.x,point3.y);<br />
<span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">两个点相减</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point3&nbsp;=&nbsp;point1-point2;<br />
<span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("\n(%f,%f)-(%f,%f)=(%f,%f)",point1.x,point1.y,point2.x,point2.y,point3.x,point3.y);<br />
<span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">除法</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;point3&nbsp;=&nbsp;point1/2;<br />
<span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("\n(%f,%f)/2=(%f,%f)",point1.x,point1.y,point3.x,point3.y);<br />
<span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">乘法</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;point3&nbsp;=&nbsp;point1*2;<br />
<span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("\n(%f,%f)+(%f,%f)=(%f,%f)",point1.x,point1.y,point2.x,point2.y,point3.x,point3.y);<br />
<span style="color: #008080; ">24</span>&nbsp;<br />
<span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">使用SizeMake创建两个Size</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;Size&nbsp;size1&nbsp;=&nbsp;Size(10,&nbsp;20);<br />
<span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Size&nbsp;size2&nbsp;=&nbsp;Size(50,&nbsp;60);<br />
<span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Size&nbsp;size3;<br />
<span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">两个Size相加</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;size3&nbsp;=&nbsp;size1&nbsp;+&nbsp;size2;<br />
<span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("size(%f,%f)+size(%f,%f)=size(%f,%f)",size1.width,size1.height,size2.width,size2.height,size3.width,size3.height);<br />
<span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">两个Size相减</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;size3&nbsp;=&nbsp;size1&nbsp;-&nbsp;size2;<br />
<span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("size(%f,%f)－size(%f,%f)=size(%f,%f)",size1.width,size1.height,size2.width,size2.height,size3.width,size3.height);<br />
<span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Size乘法</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;size3&nbsp;=&nbsp;size1*10;<br />
<span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("size(%f,%f)*10=size(%f,%f)",size1.width,size1.height,size3.width,size3.height);<br />
<span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Size除法</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;size3&nbsp;=&nbsp;size1/10;<br />
<span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("size(%f,%f)/10=size(%f,%f)",size1.width,size1.height,size3.width,size3.height);<br />
<span style="color: #008080; ">41</span>&nbsp;<br />
<span style="color: #008080; ">42</span>&nbsp;<br />
<span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Rect测试<br />
</span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">生成一个坐标为10，20，宽为50，高为30的矩形区域</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;Rect&nbsp;rect&nbsp;=&nbsp;Rect(10,&nbsp;20,&nbsp;50,&nbsp;30);<br />
<span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">生成两个点</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;point1&nbsp;=&nbsp;Point(15,25);<br />
<span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point2&nbsp;=&nbsp;Point(100,100);<br />
<span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rect.containsPoint(point1))&nbsp;{<br />
<span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("rect包含点point1\n");<br />
<span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">else</span>{<br />
<span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("rect不包含点point1\n");<br />
<span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(rect.containsPoint(point2))&nbsp;{<br />
<span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("rect包含点point2\n");<br />
<span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">else</span>{<br />
<span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("rect不包含点point2\n");<br />
<span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">获取rect矩形区域最左、右、上、下、中间的坐标点</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">60</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;maxX&nbsp;=&nbsp;rect.getMaxX();<br />
<span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;minX&nbsp;=&nbsp;rect.getMinX();<br />
<span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;maxY&nbsp;=&nbsp;rect.getMaxY();<br />
<span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;minY&nbsp;=&nbsp;rect.getMinY();<br />
<span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;midX&nbsp;=&nbsp;rect.getMidX();<br />
<span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;midY&nbsp;=&nbsp;rect.getMidY();<br />
<span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log("rect的左下角坐标为(%f,%f)\n左上角坐标为(%f,%f)\n右下角坐标为(%f,%f)\n右上角角坐标为(%f,%f)\n中点坐标为(%f,%f)\n"<br />
<span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,minX,minY,minX,maxY,maxX,minY,maxX,maxY,midX,midY);</div>
by sixleaves<img src ="http://www.cppblog.com/sixleaves/aggbug/208510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2014-10-07 23:59 <a href="http://www.cppblog.com/sixleaves/archive/2014/10/07/208510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx3.2-思维笔记-动作篇</title><link>http://www.cppblog.com/sixleaves/archive/2014/09/28/208443.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Sun, 28 Sep 2014 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2014/09/28/208443.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/208443.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2014/09/28/208443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/208443.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/208443.html</trackback:ping><description><![CDATA[<strong>总结下cocos2dx的这些动作，知识大概的总结，不是包含所有。文中的名词是自己取得。</strong>
<div><strong>首先我们要把握主线，我们在cocos2dx用到的动作都是派生自Action类，而Action又派生自Ref类。而我们主要用到的时属于Action派生的FiniteTimeAction(有限时间的动作类)类所派生的类。</strong></div>
<div><strong>FiniteTimeAction中得有限时间类又分为两个部分，一个部分是瞬时动作类(ActionInstant),也就是执行时你是看不到过程，只能看到结果。一部分是ActionInterval(持续动作类)，这类动作都是有持续时间的。</strong></div>
<div><strong style="color: #ff0000;">1.框架：</strong></div>
<div><strong>Action类派生出:FiniteTimeAction</strong></div>
<div><strong>#FiniteTimeAction类派生出:ActionInstant类和ActionInterval类</strong></div>
<div><strong>##ActionInstant类派生出:CallFunc类、FlipX、Hide、Place(这里只是列出我常用的)</strong></div>
<div><strong>##ActionInterval类派生出:又分为两大类，一大类是纯持续动作类、一大类是动作包装类（这是我自己细分的）</strong></div>
<div><strong>其中纯持续动作类包括：BezierBy(To)(贝兹尔曲线动作)、Blink(闪烁动作)、FadeIn(Out)、JumpBy(To)(跳转动作，指定起跳位置、高度、次数)、RotateBy(To)、ScaleBy(To)(拉伸动作)。</strong></div>
<div><strong>其中一般By是相对的意思当前位置或者倍数，To是指定绝对。第一个参数都是指定持续时间。</strong></div>
<div><strong>其中动作包装类包括：：Repeat、RepeatForever、Sequence、Spawn，动作包装类对所包装的动作有一定副作用，其副作用一般可顾名思义。</strong></div>
<div><strong>如上，Repeat包装后的动作就是重复指定次数被包装的动作、RepeatForever则是持续不断、Sequence可以包装多个动作、其副作用是让多个动作顺序执行</strong></div>
<div><strong>Spawn包装后的动作的副作用是，所有动作一起执行。</strong></div>
<div><strong><br />
</strong></div>
<div><strong style="color: #ff0000;">2.动作的创建：</strong></div>
<div><strong>一般动作的创建是调用相应动作的类的create工厂方法。</strong></div>
<div><strong><br />
</strong></div>
<div><strong style="color: #ff0000;">3.动作的执行：</strong></div>
<div><strong>一般动作的是发送runAction消息给指定的Sprite对象，传入参数就是动作对象。</strong></div>
<div><br />
</div>
<div><strong style="color: #ff0000;">4.几个重要动作Sequence、Spawn、CallFunc</strong></div>
<div><strong>Sequence动作的使用就是如代码:</strong></div>
<div><strong>auto actions = Sequence::create(action1,action2,...,actionN, NULL);</strong></div>
<div><strong>sprite-&gt;runAction(actions);</strong></div>
<div><strong>Spawn的使用也一样，知识把关键字替换掉</strong></div>
<div><strong>CallFunc动作是我们就称为回调动作把(或者说是</strong><strong style="color: #ff0000;">把函数转化为动作</strong><strong>)，传入的第二个函数指针需要通过callFunc_selector格式化该函数指针。</strong></div>
<div><strong>auto actionCF= CallFunc::create(this, callFunc_selector(HelloWord::sayLove));</strong></div>
<div><br />
</div><img src ="http://www.cppblog.com/sixleaves/aggbug/208443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2014-09-28 16:13 <a href="http://www.cppblog.com/sixleaves/archive/2014/09/28/208443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx(0)-sceneDemo</title><link>http://www.cppblog.com/sixleaves/archive/2014/07/30/207858.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Wed, 30 Jul 2014 07:49:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2014/07/30/207858.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/207858.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2014/07/30/207858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/207858.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/207858.html</trackback:ping><description><![CDATA[这是我自己总结的cocos2dx，方便自己查看和复习。所以不一定适合您。<br />
<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;ImageScene.h<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;sceneDemo<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;Created&nbsp;by&nbsp;sixleaves&nbsp;on&nbsp;14-7-29.<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; "><br />
</span><span style="color: #008000; ">//<br />
</span><br />
#ifndef&nbsp;__sceneDemo__ImageScene__<br />
<span style="color: #0000FF; ">#define</span>&nbsp;__sceneDemo__ImageScene__<br />
<br />
#include&nbsp;"cocos2d.h"<br />
<span style="color: #0000FF; ">class</span>&nbsp;ImageScene&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;cocos2d::Layer<br />
{<br />
<br />
<span style="color: #0000FF; ">public</span>:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;cocos2d::Scene&nbsp;*&nbsp;createScene();<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;CREATE_FUNC(ImageScene);<br />
};<br />
<br />
<span style="color: #0000FF; ">#endif</span>&nbsp;/*&nbsp;defined(__sceneDemo__ImageScene__)&nbsp;*/<br />
<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />
&nbsp;总结:<br />
&nbsp;知识点一:<br />
&nbsp;Scene场景类、Layer层的概念<br />
&nbsp;其实Scene是一对多得关系,一个场景类可以有多个Layer层。<br />
&nbsp;实质上Scene就是由Layer层构成的。他们的关系,你可以看成<br />
&nbsp;是树的结构，而且Scene和Layer都继承自Node类，所以其都<br />
&nbsp;能有addChild方法,所以Scene可以把Layer添加进去。<br />
&nbsp;<br />
&nbsp;知识点二:宏定义的两个应用<br />
&nbsp;1.在预编译时期的过滤应用(防御性措施)<br />
&nbsp;#ifndef&nbsp;__xxXXxxX_H__<br />
&nbsp;#define&nbsp;__xxXXxxX_H__<br />
&nbsp;insert&nbsp;#include&nbsp;code<br />
&nbsp;#endif<br />
&nbsp;这样在当包含两次时，就会过滤掉下一次包含。<br />
&nbsp;2.宏函数<br />
&nbsp;可以查看CREATE_FUNC的定义:<br />
&nbsp;如下<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CREATE_FUNC(__TYPE__)&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;__TYPE__*&nbsp;create()&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__TYPE__&nbsp;*pRet&nbsp;=&nbsp;new&nbsp;__TYPE__();&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pRet&nbsp;&amp;&amp;&nbsp;pRet-&gt;init())&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRet-&gt;autorelease();&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pRet;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pRet;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRet&nbsp;=&nbsp;NULL;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NULL;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&#8220;\&#8221;号的意义:首先宏函数其实本质上必须写成一行，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而\只是在编程中对于不方便写在一行的代码的格式化<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它告诉编译器，我这一行还没结束,把下面的继续整合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上来成为一行。而在此处，这样写是为了提高可读性。<br />
该函数的作用:创建指定对象，并且调用这个对象的构造函数(init)。<br />
&nbsp;<br />
知识点三:C++中的多态<br />
对于同一个父类的类，调用的方法，取决于对象，这种形式的多态<br />
需要将父类中相应地方法定义为virutal即可。其实这就是java<br />
中的尽量使用借口引用的原因、其就是为了适应多态，区别在于C++<br />
中比较啰嗦，而java是默认就是有virtual这种功能的。不用你再写<br />
明。<br />
所以为了能够在创建这个对象后调用其构造函数init。需要重写它<br />
这就是为什么其父类将其声明为virtual的原因。至于createScene<br />
纯粹就是工厂方法。<br />
&nbsp;</span><span style="color: #008000;">*/<br />
<br />
</span></div>createScene主要还是分别调用Scene类和自定义layer类的工厂方法create创建对象，让后将其添加到Scene对象中。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; "><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;ImageScene.cpp<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;sceneDemo<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; "><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;Created&nbsp;by&nbsp;sixleaves&nbsp;on&nbsp;14-7-29.<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; "><br /></span><span style="color: #008000; ">//<br /></span><br />#include&nbsp;"ImageScene.h"<br />USING_NS_CC;<br /><br />Scene&nbsp;*&nbsp;ImageScene::createScene()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;auto&nbsp;scene&nbsp;=&nbsp;Scene::create();<br />&nbsp;&nbsp;&nbsp;&nbsp;auto&nbsp;imageScene&nbsp;=&nbsp;ImageScene::create();<br />&nbsp;&nbsp;&nbsp;&nbsp;scene-&gt;addChild(imageScene);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;scene;<br />}<br /><br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;ImageScene::init()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;Size&nbsp;size&nbsp;=&nbsp;Director::getInstance()-&gt;getVisibleSize();<br />&nbsp;&nbsp;&nbsp;&nbsp;auto&nbsp;sprite&nbsp;=&nbsp;Sprite::create("CloseSelected.png");<br />&nbsp;&nbsp;&nbsp;&nbsp;sprite-&gt;setPosition(size.width/2,&nbsp;size.height/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;addChild(sprite);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}</div><img src ="http://www.cppblog.com/sixleaves/aggbug/207858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2014-07-30 15:49 <a href="http://www.cppblog.com/sixleaves/archive/2014/07/30/207858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏开发(2)-cocos2dx框架下mac上编译成antroid</title><link>http://www.cppblog.com/sixleaves/archive/2014/07/07/207549.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Sun, 06 Jul 2014 16:10:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2014/07/07/207549.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/207549.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2014/07/07/207549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/207549.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/207549.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><br />cocos2dx因其得天独厚的跨平台性，得以受到众多开发者的晴菜，包括我在内。那么如何在osx系统中编译成antroid程序呢？</span><br /><span style="font-size: 12pt;">我们知道android的开发工具google已经打包提供给我们，其里面有完整的定制好的eclipse，所以我们需要google给我打包好的</span><br /><span style="font-size: 12pt;">这个安装包adt-bundleXXX。再者我们需要java的运行环境，jdk。还有一个很重要的是ndk。所以你的第一步是到google上下载.</span><br /><span style="font-size: 12pt; color: #ff0000;">first step</span><br /><span style="font-size: 12pt; color: #339966; background-color: #ffffff;">&nbsp; &nbsp; &nbsp; &nbsp;1.Go to google and download adt、ndk。</span><br /><span style="font-size: 12pt; color: #339966; background-color: #ffffff;">&nbsp; &nbsp; &nbsp; &nbsp;2.Go to Oracle and download jdk（一般苹果默认自带jdk，除非版本太久，不然不用自己下载了）</span><br /><br /><span style="font-size: 12pt;">把安装准备好之后，把他们分别解压到对应文件夹，我是解压到dev（development的简写）文件夹（cocos2dx也在这个文件夹里面）。</span><br /><span style="font-size: 12pt;">接着打开终端编辑/etc/profile文件，用命令sudo vim&nbsp;/etc/profile,进入后，按i进入编辑状态，在最后一行输入</span><br /><span style="font-size: 12pt;">export NDK_ROOT="这里填写上你的ndk根目录"，然后按Esc按键，输入wq!保存并退出既可以。接着还得输入source /etc/profile</span><br /><span style="font-size: 12pt;">让这个配置文件中设置的环境变量立即生效。</span><br /><span style="font-size: 12pt; color: #ff0000;">second step</span><br /><span style="font-size: 12pt; color: #339966;">&nbsp; &nbsp; &nbsp; &nbsp;1.sudo vim /etc/profile and input &#8220;export NDK_ROOT="这里填写上你的ndk根目录&#8220;"</span><br /><span style="font-size: 12pt; color: #339966;">&nbsp; &nbsp; &nbsp; &nbsp;2.source /etc/profile</span><br /><br /><span style="font-size: 12pt; color: #ff0000;">thirdth step&nbsp;</span><span style="font-size: 12pt;">在终端中建立工程，指定编程语言，包名，存放位置</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">python</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">cocos</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">.</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">py</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">new</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">HelloWorldDemo</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: bold; font-style: inherit; vertical-align: baseline;">-</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">p</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">com</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">.</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">coco2dx</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">.</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">org</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: bold; font-style: inherit; vertical-align: baseline;">-</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">l</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">cpp</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: bold; font-style: inherit; vertical-align: baseline;">-</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">d</span><span style="color: #333333; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 13px; line-height: 19px; background-color: #f8f8f8;"> </span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: bold; font-style: inherit; vertical-align: baseline;">~/</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">Desktop</span><span style="color: #333333; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;"><br /><br /></span><span style="color: #ff0000; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">fourth step</span><span style="color: #333333; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">，</span><span style="color: #339966; font-family: inherit; font-size: 12pt; line-height: 19px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline;">打开HelloWorldDemo项目，</span><span style="font-size: 12pt; color: #339966;">cocos2d/cocos/platform/android/java/src/org/cocos2dx/lib，将其这个库复制到anroid开发平台的源代码目录下：</span><br /><p><span style="font-size: 12pt; color: #339966;">HelloWorldDemo/proj.android/src/org/cocos2dx/目录下</span><span style="font-size: 12pt;">，其实这些都不要强记，第四步也很好理解，因为当我们把这个工程导入eclipse时其找不到要引用</span><br /><span style="font-size: 12pt;">的这些包，所以要将其拷贝到那个目录下，至于怎么记忆，理解了就容易，在项目中一共有五个平台，对应五个文件夹，我们关注的是antroid，所以有关键字android</span><br /><span style="font-size: 12pt;">的那个文件夹就是对应android平台的，进入我们要到其源代码目录下，其实也就是src。而拷贝的包是在cocos框架下的所以我们要进入这个框架，进入之后肯定有对应于</span><br /><span style="font-size: 12pt;">个给平台所对应的库，所以我们关注platform这个关键字，找到后进入，找到antroid平台，在进入其src下，一直进入知道找到lib这个文件夹，将其拷贝到刚才说的地方。<br /></span><br /><span style="font-size: 12pt; color: #ff0000;">finally step</span></p> <p><span style="font-size: 12pt;">最后一步就是打开eclipse，选着android工程，将我们创建的那个项目中的andoird.projXXX什么这个文件夹导入，然后你就可以编译，运行，这就完成了转换到antroid平台的<br />转换。</span></p><img src ="http://www.cppblog.com/sixleaves/aggbug/207549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2014-07-07 00:10 <a href="http://www.cppblog.com/sixleaves/archive/2014/07/07/207549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏开发(1)-cocos2dx开发环境在mac下的搭建</title><link>http://www.cppblog.com/sixleaves/archive/2014/07/06/207543.html</link><dc:creator>swp</dc:creator><author>swp</author><pubDate>Sun, 06 Jul 2014 08:28:00 GMT</pubDate><guid>http://www.cppblog.com/sixleaves/archive/2014/07/06/207543.html</guid><wfw:comment>http://www.cppblog.com/sixleaves/comments/207543.html</wfw:comment><comments>http://www.cppblog.com/sixleaves/archive/2014/07/06/207543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sixleaves/comments/commentRss/207543.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sixleaves/services/trackbacks/207543.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt;">关于cocos2dx开发环境的搭建，在其官方网站其实有详细的说明，这里进行进一步封装和提取。<br /></span><br /><span style="font-size: 14pt;">1.由于cocos2dx-3.0版本中用到了python来构建项目，所以首先你的</span><span style="font-size: 14pt; color: #ff0000;">系统要具有python开发环境。</span><br /><span style="font-size: 14pt;">first step:去下载python2.7.7版本。但是mac默认其实已经自带了，就可以不用在去下载安装了。</span><br /><br /><span style="font-size: 14pt;">2.由于我们可以通过python写的命令行程序很方便的构造工程，所以我们有必要学习其构造工程的命令</span><br /><span style="font-size: 14pt;">将tools/cocos2d-console/bin添加到系统环境变量或者直接cd&nbsp;tools/cocos2d-console/bin到该目录下</span><br /><span style="font-size: 14pt;">然后执行python cocos.py 这个python运行程序，</span><span style="font-size: 14pt; color: #ff0000;">我们需要说明我们工程的名字，用new指定。需要说明包名，用-p 指定包名</span><br /><span style="font-size: 14pt; color: #ff0000;">用-l 指定语言 -d指定这个项目文件放在哪里</span><span style="font-size: 14pt;">。如下：</span><br /><span style="font-size: 14pt; color: #339966;">python cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ～/Desktop</span><br /><span style="font-size: 14pt;">也就是创建HelloWorldDemo这个项目，把它放在桌面，其编写语言用c++、其包名为</span><span style="color: #339966; font-size: 19px;">com.coco2dx.org<br /></span><span style="font-size: 14pt;">这样我们就创建了一个工程项目。<br /><br /></span><span style="font-size: 14pt;">3.用Xcode打开工程，进入HelloWorldDemo里面的proj.ios_mac文件夹里面，后缀为xcodeproj的文件，其名字就是刚才创建的工程名称。</span><br /><br /><span style="font-size: 14pt;">2014.07.06 周日</span><br /><span style="font-size: 14pt;">16：37：00</span><br /><span style="font-size: 14pt;">于福州 创建 </span><img src ="http://www.cppblog.com/sixleaves/aggbug/207543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sixleaves/" target="_blank">swp</a> 2014-07-06 16:28 <a href="http://www.cppblog.com/sixleaves/archive/2014/07/06/207543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>