﻿<?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++博客-张运涛-文章分类-cocoa2d</title><link>http://www.cppblog.com/zhangyuntaoshe/category/14364.html</link><description>c++</description><language>zh-cn</language><lastBuildDate>Fri, 02 Sep 2011 22:00:18 GMT</lastBuildDate><pubDate>Fri, 02 Sep 2011 22:00:18 GMT</pubDate><ttl>60</ttl><item><title>一个CCSprite所需要耗费内存分析</title><link>http://www.cppblog.com/zhangyuntaoshe/articles/154671.html</link><dc:creator>张运涛</dc:creator><author>张运涛</author><pubDate>Tue, 30 Aug 2011 02:02:00 GMT</pubDate><guid>http://www.cppblog.com/zhangyuntaoshe/articles/154671.html</guid><wfw:comment>http://www.cppblog.com/zhangyuntaoshe/comments/154671.html</wfw:comment><comments>http://www.cppblog.com/zhangyuntaoshe/articles/154671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhangyuntaoshe/comments/commentRss/154671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhangyuntaoshe/services/trackbacks/154671.html</trackback:ping><description><![CDATA[<p>一个CCSprite所需要耗费内存分析<br />已有 335 次阅读 2011-5-4 14:54 |个人分类:技术<br />Just copy from</p>
<p><a href="http://www.cocoachina.com/bbs/simple/?t56479.html">http://www.cocoachina.com/bbs/simple/?t56479.html</a></p>
<p><br />一个CCSprite所需要耗费内存分析</p>
<p>加载一张图片的过程 所发生的函数:<br />1.[CCSprite spriteWihtFile:@"xxxx"];&nbsp; //函数内部用 CCTexureCache&nbsp; 创建一个CTexture2D对象.</p>
<p>2.[CCTexureCache sharedTexure] addImage:@"xxxx"];&nbsp; //首次创建,则加载图片创建纹理,并缓存.<br />UImage* img =&nbsp; [UImage initWithContentsOfFile:@"xxxx"]; //需要一些内存,这些内存是暂时的.创建纹理后被释放.<br />[CCTexure2D initWithImage:img];&nbsp; <br />//这个函数内部会转换图片的像素格式,并向OpenGL分配纹理需要的空间.<br />//分配空间大小的规则是: (2^n&nbsp; x 2 ^n x 4)BYTE ,例如:加载一张128*128的图片 和 加载一张 128 * 100 或 99 * 99 的图片需要的内存大小相同。<br />//如果加载一张513*129的图片,就会以1024*512来分配内存。<br />//所以这里用ZWoptex来排列所有非规则( 大小不为 2^n&nbsp; x 2 ^n )小图片是比较省内存的.</p>
<p>3.[CCTexure2D initWithData:(void*) xx]; //这个函数主要是对函数2转换后的位图数据(RGBXXXX),进行纹理加载.<br />//这里用到了OpenGL函数的 glGenTexures(产生一个纹理对象) glBindTexture(绑定为OPENGL当前纹理) glTexImage2D(给纹理加载位图数据) <br />//其中glTexImage2D内部会调用 gfxAllocateTextureLevel 函数分配内存.如果是1024*1024则是4M的大小. Instruments可以监控到 内存的分配函数gfxAllocateTextureLevel.</p>
<p>//*********&nbsp; 以上是加载一张纹理的大小 ****************</p>
<p><br />//*********&nbsp; 以下是绘画一张纹理的大小 *****************<br />//OpenGL绘画纹理还需要消耗内存.<br />在CCSprite 的 draw 函数中:<br />glDrawArrays 函数内部调用 gldLoadTextureLevelBuffer . Instruments可以监控到 内存的分配函数 gldLoadTextureLevelBuffer .<br />这里需要的内存为:实际绘画纹理大小的规则大小.<br />例如:一张大小为800*600的图片 需要 1024*1024*4 = 4M 内存用于纹理加载。<br />如果只绘画这张图片的 某个 28*28大小的 区域, 那么还需要一个 32 * 32 *4 = 4K 大小的内存. 共用4.004M内存<br />如果需要绘画800*600的全部区域,则需要1024*1024 = 4M内存. 共用8M内存</p>
<p><br />//*********&nbsp; 以下是关于CCTextureCache 的使用建议 *****************<br />1.纹理缓存 有个 purgSharedTexureCache可以删除当前纹理缓存,释放当前纹理缓存,但其他CCSprite有对纹理的引用,所以这个函数不会真的释放内存,而且再次加载已经存在的纹理的时候又需要大量内存. <br />不建议使用 purgSharedTexureCache. removeAllTextures也是一样的情况.</p>
<p>2.使用removeUnusedTexutres 来释放已经没有其他对象引用的纹理.</p>
<p>3.非重复性图片不建议使用CCTexureCache来缓存纹理.直接用CCTexture2D创建纹理. 比如,一些内存资源比较紧缺的设备,处理非重复性图片(某些单一对话框背景)不缓存.</p>
<p><br />//**********************&nbsp;&nbsp; 仅供参考&nbsp; ******************<br /></p><img src ="http://www.cppblog.com/zhangyuntaoshe/aggbug/154671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhangyuntaoshe/" target="_blank">张运涛</a> 2011-08-30 10:02 <a href="http://www.cppblog.com/zhangyuntaoshe/articles/154671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[iphone-cocos2d]关于Loading的若干处理和讨论</title><link>http://www.cppblog.com/zhangyuntaoshe/articles/142789.html</link><dc:creator>张运涛</dc:creator><author>张运涛</author><pubDate>Sun, 27 Mar 2011 05:33:00 GMT</pubDate><guid>http://www.cppblog.com/zhangyuntaoshe/articles/142789.html</guid><wfw:comment>http://www.cppblog.com/zhangyuntaoshe/comments/142789.html</wfw:comment><comments>http://www.cppblog.com/zhangyuntaoshe/articles/142789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhangyuntaoshe/comments/commentRss/142789.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhangyuntaoshe/services/trackbacks/142789.html</trackback:ping><description><![CDATA[<h1>转：[iphone-cocos2d]关于Loading的若干处理和讨论</h1>
<br>(<span style="COLOR: #b80fa2">id</span>) init<br><br>{<br><br>&nbsp; &nbsp; <span style="COLOR: #b80fa2">self</span> = [<span style="COLOR: #b80fa2">super</span> <span style="COLOR: #3c0f81">init</span>];<br><br>&nbsp; &nbsp; <span style="COLOR: #b80fa2">if</span> ( <span style="COLOR: #b80fa2">self</span> )<br><br>&nbsp; &nbsp; {&nbsp;&nbsp; <br><br>// Add the Label (in cocos2D universe)<br><br>&nbsp; &nbsp; &nbsp; &nbsp; <span style="COLOR: #508187">BitmapFontAtlas</span> *label = [<span style="COLOR: #508187">BitmapFontAtlas</span>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitmapFontAtlasWithString:&nbsp;<span style="COLOR: #cf231d">@"Initializing Game"</span>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fntFile: <span style="COLOR: #cf231d">@"comic_atlas.fnt"</span>&nbsp;<br><font face="monospace,  "><font size=3><font size=1></font></font></font>&nbsp;alignment: <span style="COLOR: #3c0f81">UITextAlignmentCenter</span>];<br><br>&nbsp; &nbsp; &nbsp; &nbsp; label.<span style="COLOR: #508187">position</span> = <span style="COLOR: #77482b">*****</span>(<span style="COLOR: #2500d8">240</span>, <span style="COLOR: #2500d8">160</span>);<br><br>&nbsp; &nbsp; &nbsp; &nbsp; label.<span style="COLOR: #508187">opacity</span> = <span style="COLOR: #2500d8">0</span>;<br><br>&nbsp; &nbsp; &nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">addChild</span>: label <span style="COLOR: #33595d">z</span>: <span style="COLOR: #2500d8">0</span> <span style="COLOR: #33595d">tag</span>: kInitializingLabel];<br><br>// Add the UIActivityIndicatorView (in UIKit universe)<br><br><span style="COLOR: #000000"></span><span style="COLOR: #b80fa2">self</span><span style="COLOR: #000000">.activityIndicatorView = [[[</span><span style="COLOR: #6f32a9">UIActivityIndicatorView</span><span style="COLOR: #000000"></span>alloc<span style="COLOR: #000000">]&nbsp;</span><br><span style="COLOR: #000000"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initWithActivityIndicatorStyle<span style="COLOR: #000000">:&nbsp;</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UIActivityIndicatorViewStyleWhiteLarge<span style="COLOR: #000000">] </span>autorelease<span style="COLOR: #000000">];</span><br><br>&nbsp; &nbsp; &nbsp; &nbsp; activityIndicatorView.<span style="COLOR: #6f32a9">center</span> = <span style="COLOR: #77482b">*****</span>(<span style="COLOR: #2500d8">190</span>,<span style="COLOR: #2500d8">240</span>);<br><br>&nbsp; &nbsp; &nbsp; &nbsp; [activityIndicatorView <span style="COLOR: #3c0f81">startAnimating</span>];<br><br>&nbsp; &nbsp; &nbsp; &nbsp; [[<span style="COLOR: #b80fa2">self</span> battleView] <span style="COLOR: #3c0f81">addSubview</span>: activityIndicatorView];<br><br>&nbsp; &nbsp; &nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">schedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingInit)];<br><br><br><span style="COLOR: #000000"></span>// At this point, the cocos2d rendering is fine.<br><br>&nbsp; &nbsp; }<br><br><span style="COLOR: #000000"></span>return<span style="COLOR: #000000"></span>self<span style="COLOR: #000000">;</span><br><br><br>}<br><br><br>- (<span style="COLOR: #b80fa2">void</span>) loadingInit<br>{<br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">unschedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingInit)];<br><br><br><br><span style="COLOR: #000000"></span>// Fade in nicely<br><br><br>&nbsp; &nbsp; <span style="COLOR: #508187">BitmapFontAtlas</span> *label = (<span style="COLOR: #508187">BitmapFontAtlas</span>*)[<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">getChildByTag</span>: kInitializingLabel];<br><br><br><span style="COLOR: #000000">[label </span>runAction<span style="COLOR: #000000">: [</span><span style="COLOR: #508187">FadeIn</span>actionWithDuration<span style="COLOR: #000000">: </span><span style="COLOR: #2500d8">.25</span><span style="COLOR: #000000">]];</span><br><br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">schedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingStep0) <span style="COLOR: #33595d">interval</span>: <span style="COLOR: #2500d8">.25</span>];<br><br><br>}<br><br><br>- (<span style="COLOR: #b80fa2">void</span>) loadingStep0<br><br>{<br><br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">unschedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingStep0)];<br><br>// Add you own code to load texture, sounds etc...<br><br><span style="COLOR: #000000"></span>// The cocos2D thread will be waiting (since it"s the same as&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the main thread) but the UIKit thread will keep running in parallel<br>// Can do multiple steps or just one<br><br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">schedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingStep1) <span style="COLOR: #33595d">interval</span>: <span style="COLOR: #2500d8">.5</span>];<br><br>}<br><br>- (<span style="COLOR: #b80fa2">void</span>) loadingStep1<br><br>{<br><br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">unschedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingStep1)];<br><br><br><span style="COLOR: #000000"></span>// Add you own code to load texture, sounds etc...<br><br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">schedule</span>: <span style="COLOR: #b80fa2">@selector</span>(loadingDone) <span style="COLOR: #33595d">interval</span>: <span style="COLOR: #2500d8">.1</span>];<br><br><br>}<br><br>- (<span style="COLOR: #b80fa2">void</span>) loadingDone<br><br>{<br><br>&nbsp; &nbsp; gameIsReady = <span style="COLOR: #b80fa2">YES</span>;<br><br>&nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span>.activityIndicatorView <span style="COLOR: #3c0f81">removeFromSuperview</span>];<br><br>&nbsp; &nbsp; <span style="COLOR: #508187">BitmapFontAtlas</span> *label = (<span style="COLOR: #508187">BitmapFontAtlas</span>*)[<span style="COLOR: #b80fa2">self</span> <span style="COLOR: #33595d">getChildByTag</span>: kInitializingLabel];<br><br><br>&nbsp; &nbsp; [label <span style="COLOR: #3c0f81">setString</span>: <span style="COLOR: #77482b">NSLocalizedString</span>(<span style="COLOR: #cf231d">@"Tap to start!"</span>, <span style="COLOR: #b80fa2">nil</span>)];<br><br><span style="COLOR: #000000">[label </span>runAction<span style="COLOR: #000000">: [</span><span style="COLOR: #508187">RepeatForever</span><span style="COLOR: #000000"></span>actionWithAction<span style="COLOR: #000000">:&nbsp;</span><br><br><br><span style="COLOR: #000000">[</span><span style="COLOR: #508187">Sequence</span><span style="COLOR: #000000"></span>actionOne<span style="COLOR: #000000">: [</span><span style="COLOR: #508187">EaseInOut</span><span style="COLOR: #000000"></span>actionWithAction<span style="COLOR: #000000">:&nbsp;</span><br><span style="COLOR: #000000">[</span><span style="COLOR: #508187">MoveTo</span><span style="COLOR: #000000"></span>actionWithDuration<span style="COLOR: #000000">: </span><span style="COLOR: #2500d8">.6</span><span style="COLOR: #000000"></span>position<span style="COLOR: #000000">: </span><span style="COLOR: #77482b">*****</span><span style="COLOR: #000000">(</span><span style="COLOR: #2500d8">210</span><span style="COLOR: #000000">, </span><span style="COLOR: #2500d8">160</span><span style="COLOR: #000000">)] </span>rate<span style="COLOR: #000000">: </span><span style="COLOR: #2500d8">2</span><span style="COLOR: #000000">]&nbsp;</span><br><span style="COLOR: #000000"><span style="COLOR: #626262"><span style="COLOR: #000000"></span><span style="COLOR: #33595d">two</span>: [<span style="COLOR: #508187">EaseInOut</span> <span style="COLOR: #33595d">actionWithAction</span>:&nbsp;</span></span><br><span style="COLOR: #000000"><span style="COLOR: #626262">[<span style="COLOR: #508187">MoveTo</span> <span style="COLOR: #33595d">actionWithDuration</span>: <span style="COLOR: #2500d8">.6</span> <span style="COLOR: #33595d">position</span>: <span style="COLOR: #77482b">*****</span>(<span style="COLOR: #2500d8">270</span>, <span style="COLOR: #2500d8">160</span>)] <span style="COLOR: #33595d">rate</span>: <span style="COLOR: #2500d8">2</span>]</span></span> ] ]];<br><br>}<br><br>- (<span style="COLOR: #b80fa2">BOOL</span>)ccTouchesEnded:(<span style="COLOR: #6f32a9">NSSet</span> *)touches withEvent:(<span style="COLOR: #6f32a9">UIEvent</span> *)event<br><br>{<br><br>&nbsp; &nbsp; <span style="COLOR: #b80fa2">if</span> ( gameIsReady )<br><br>&nbsp; &nbsp; {<br><br>&nbsp; &nbsp; &nbsp; &nbsp; [<span style="COLOR: #b80fa2">self</span> openGame];<br><br>&nbsp; &nbsp; }<br><br><span style="COLOR: #b80fa2">return</span>kEventHandled<span style="COLOR: #000000">;</span><br>}<br><br><br>2。<br><font size=2><font face="arial,sans-serif "><span style="COLOR: #222222"></span></font></font><br><font face="courier new ">CGRect texRect = CGRectMake( (barPngWidth/2)*(1-loadPercentage), 0, barPngWidth/2, barPngHeight);<br>[barAtlasSprite setTextureRect:textRect];<br><br></font>My&nbsp;loadPercentage&nbsp;var should be comprised between 0 and 1. <br>You definitely don"t have to use an animation nor the&nbsp;setDisplayFrame&nbsp;function.<br><br><br>3。<a id=url_1 onclick="return checkUrl(this)" href="http://stackoverflow.com/questions/1133123/multi-threaded-opengl-programming-in-cocos2d-iphone" target=_blank><font color=#0000ff>http://stackoverflow.com/questions/1133123/multi-threaded-opengl-programming-in-cocos2d-iphone</font></a><br><br>[/pre]
<img src ="http://www.cppblog.com/zhangyuntaoshe/aggbug/142789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhangyuntaoshe/" target="_blank">张运涛</a> 2011-03-27 13:33 <a href="http://www.cppblog.com/zhangyuntaoshe/articles/142789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>速度与动作</title><link>http://www.cppblog.com/zhangyuntaoshe/articles/121734.html</link><dc:creator>张运涛</dc:creator><author>张运涛</author><pubDate>Fri, 30 Jul 2010 14:40:00 GMT</pubDate><guid>http://www.cppblog.com/zhangyuntaoshe/articles/121734.html</guid><wfw:comment>http://www.cppblog.com/zhangyuntaoshe/comments/121734.html</wfw:comment><comments>http://www.cppblog.com/zhangyuntaoshe/articles/121734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhangyuntaoshe/comments/commentRss/121734.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhangyuntaoshe/services/trackbacks/121734.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">速度变化&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;基本劢作和组合劢作实现了针对精灵癿各种运劢、劢画效果癿改变，但这样癿改变癿速&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>度是丌变癿，通过CCEaseAction&nbsp;为基类癿类系和CCSpped&nbsp;类我们可以很方便癿修改精灵&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>执行劢作癿速度：由快至慢还是由慢至快。（ZYG003&nbsp;，CCEaseActionLayer&nbsp;提供示例代码）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseIn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由慢至快。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseOut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由快至慢&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseInOut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由慢至快再由快至慢。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseSineIn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由慢至快。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseSineOut&nbsp;&nbsp;&nbsp;&nbsp;由快至慢&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseSineInOut&nbsp;由慢至快再由快至慢。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseExponentialIn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由慢至极快。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseExponentialOut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由极快至慢。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>EaseExponentialInOut&nbsp;&nbsp;&nbsp;由慢至极快再由极快至慢。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Speed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;人工设定速度，还可通过SetSpeed&nbsp;丌断调整。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>扩展动作&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们已经掌握了执行各种各样癿劢作，也可以按照丌同癿快慢修改劢作执行癿时间，&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Cocos2D</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">iPhone&nbsp;还提供了针对现有劢作癿扩展，以实现各种灵活癿效果。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.延时劢作&#8211;Delay&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;在劢作序列中增加一个时间间歇：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;OnDelay:(id)&nbsp;sender&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_654_928_Open_Image onclick="this.style.display='none'; Codehighlighter1_654_928_Open_Text.style.display='none'; Codehighlighter1_654_928_Closed_Image.style.display='inline'; Codehighlighter1_654_928_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_654_928_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_654_928_Closed_Text.style.display='none'; Codehighlighter1_654_928_Open_Image.style.display='inline'; Codehighlighter1_654_928_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_654_928_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_654_928_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CCMoveBy&nbsp;actionWithDuration:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;position:ccp(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">)];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[ac1&nbsp;reverse];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;实现一个等待间歇&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sprite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runAction:[Sequence&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actions:ac1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DelayTime&nbsp;&nbsp;actionWithDuration:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;ac2,&nbsp;nil]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.&nbsp;函数&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在劢作序列中间戒者结束调用某个函数，执行任何需要执行癿任务：劢作、状态修&nbsp;改等。代码如下：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;OnCallFunc:(id)&nbsp;sender&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_1048_1344_Open_Image onclick="this.style.display='none'; Codehighlighter1_1048_1344_Open_Text.style.display='none'; Codehighlighter1_1048_1344_Closed_Image.style.display='inline'; Codehighlighter1_1048_1344_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1048_1344_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1048_1344_Closed_Text.style.display='none'; Codehighlighter1_1048_1344_Open_Image.style.display='inline'; Codehighlighter1_1048_1344_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1048_1344_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1048_1344_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CCMoveBy&nbsp;actionWithDuration:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;position:ccp(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">)];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[ac1&nbsp;reverse];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;acf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CCCallFunc&nbsp;actionWithTarget:self&nbsp;selector:@selector(CallBack1)];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sprite&nbsp;runAction:[CCSequence&nbsp;actions:ac1,&nbsp;acf,&nbsp;ac2,&nbsp;nil]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;对应癿函数为：（再做一个劢作，这就实现了劢作、劢作序列癿任意扩展和连接）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;CallBack1&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_1425_1530_Open_Image onclick="this.style.display='none'; Codehighlighter1_1425_1530_Open_Text.style.display='none'; Codehighlighter1_1425_1530_Closed_Image.style.display='inline'; Codehighlighter1_1425_1530_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1425_1530_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1425_1530_Closed_Text.style.display='none'; Codehighlighter1_1425_1530_Open_Image.style.display='inline'; Codehighlighter1_1425_1530_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1425_1530_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1425_1530_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sprite&nbsp;runAction:[CCTintBy&nbsp;actionWithDuration:</span><span style="COLOR: #000000">0.5</span><span style="COLOR: #000000">&nbsp;red:</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">&nbsp;green:</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;blue:</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.带对象参数&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用自定义函数时，传递当前对象。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;OnCallFuncN:(id)&nbsp;sender&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_1622_1918_Open_Image onclick="this.style.display='none'; Codehighlighter1_1622_1918_Open_Text.style.display='none'; Codehighlighter1_1622_1918_Closed_Image.style.display='inline'; Codehighlighter1_1622_1918_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1622_1918_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1622_1918_Closed_Text.style.display='none'; Codehighlighter1_1622_1918_Open_Image.style.display='inline'; Codehighlighter1_1622_1918_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1622_1918_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1622_1918_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CCMoveBy&nbsp;actionWithDuration:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;position:ccp(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">)];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[ac1&nbsp;reverse];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;acf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CallFuncN&nbsp;actionWithTarget:self&nbsp;selector:@selector(CallBack2:)];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sprite&nbsp;runAction:[CCSequence&nbsp;actions:ac1,&nbsp;acf,&nbsp;ac2,&nbsp;nil]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对应癿自定义函数：（这里，我们直接使用了该对象）&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;CallBack2:(id)sender&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_2007_2110_Open_Image onclick="this.style.display='none'; Codehighlighter1_2007_2110_Open_Text.style.display='none'; Codehighlighter1_2007_2110_Closed_Image.style.display='inline'; Codehighlighter1_2007_2110_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2007_2110_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2007_2110_Closed_Text.style.display='none'; Codehighlighter1_2007_2110_Open_Image.style.display='inline'; Codehighlighter1_2007_2110_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2007_2110_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2007_2110_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sender&nbsp;runAction:[CCTintBy&nbsp;actionWithDuration:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;red:</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">&nbsp;green:</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;blue:</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.带对象、数据参数&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;调用自定义函数时，传递当前对象和一个常量（也可以是指针）。&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;OnCallFuncND:(id)&nbsp;sender&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_2222_2538_Open_Image onclick="this.style.display='none'; Codehighlighter1_2222_2538_Open_Text.style.display='none'; Codehighlighter1_2222_2538_Closed_Image.style.display='inline'; Codehighlighter1_2222_2538_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2222_2538_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2222_2538_Closed_Text.style.display='none'; Codehighlighter1_2222_2538_Open_Image.style.display='inline'; Codehighlighter1_2222_2538_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2222_2538_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2222_2538_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CCMoveBy&nbsp;actionWithDuration:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;position:ccp(</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">)];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;ac2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[ac1&nbsp;reverse];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;acf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[CCCallFuncND&nbsp;actionWithTarget:self&nbsp;selector:@selector(CallBack3:data:)&nbsp;data:(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sprite&nbsp;runAction:[CCSequence&nbsp;actions:ac1,&nbsp;acf,&nbsp;ac2,&nbsp;&nbsp;nil]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对应癿自定义函数，我们使用了传递癿对象和数据：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;CallBack3:(id)sender&nbsp;data:(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)data&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_2642_2761_Open_Image onclick="this.style.display='none'; Codehighlighter1_2642_2761_Open_Text.style.display='none'; Codehighlighter1_2642_2761_Closed_Image.style.display='inline'; Codehighlighter1_2642_2761_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2642_2761_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2642_2761_Closed_Text.style.display='none'; Codehighlighter1_2642_2761_Open_Image.style.display='inline'; Codehighlighter1_2642_2761_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2642_2761_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2642_2761_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[sender&nbsp;runAction:[CCTintBy&nbsp;actionWithDuration:(NSInteger)data&nbsp;red:</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">&nbsp;green:</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;blue:</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">]];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span></div>
<img src ="http://www.cppblog.com/zhangyuntaoshe/aggbug/121734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhangyuntaoshe/" target="_blank">张运涛</a> 2010-07-30 22:40 <a href="http://www.cppblog.com/zhangyuntaoshe/articles/121734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动作</title><link>http://www.cppblog.com/zhangyuntaoshe/articles/121732.html</link><dc:creator>张运涛</dc:creator><author>张运涛</author><pubDate>Fri, 30 Jul 2010 14:15:00 GMT</pubDate><guid>http://www.cppblog.com/zhangyuntaoshe/articles/121732.html</guid><wfw:comment>http://www.cppblog.com/zhangyuntaoshe/comments/121732.html</wfw:comment><comments>http://www.cppblog.com/zhangyuntaoshe/articles/121732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhangyuntaoshe/comments/commentRss/121732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhangyuntaoshe/services/trackbacks/121732.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 基本动作瞬时动作，延时动作，动作速度-(Action*)runAction:(Action*)action调用动作://creation&nbsp;actionid&nbsp;actionTo=[CCMoveTo&nbsp;actionWithDuration:2&nbsp;position:cpp(s.width-40,s.height-40)];//use&nbsp;action&nbsp;t...&nbsp;&nbsp;<a href='http://www.cppblog.com/zhangyuntaoshe/articles/121732.html'>阅读全文</a><img src ="http://www.cppblog.com/zhangyuntaoshe/aggbug/121732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhangyuntaoshe/" target="_blank">张运涛</a> 2010-07-30 22:15 <a href="http://www.cppblog.com/zhangyuntaoshe/articles/121732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocoa2d基础</title><link>http://www.cppblog.com/zhangyuntaoshe/articles/121726.html</link><dc:creator>张运涛</dc:creator><author>张运涛</author><pubDate>Fri, 30 Jul 2010 13:20:00 GMT</pubDate><guid>http://www.cppblog.com/zhangyuntaoshe/articles/121726.html</guid><wfw:comment>http://www.cppblog.com/zhangyuntaoshe/comments/121726.html</wfw:comment><comments>http://www.cppblog.com/zhangyuntaoshe/articles/121726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhangyuntaoshe/comments/commentRss/121726.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhangyuntaoshe/services/trackbacks/121726.html</trackback:ping><description><![CDATA[<p>游戏引擎：<span style="COLOR: red"><br>一。场景CCScene</span><br>1.展示类场景&nbsp; 2. 选项类场景&nbsp; 3.游戏场景<br>每个场景都是通过不同的层(layer)的叠加和组和来实现 不同的功能的。因此，通常生个场景都是有一个或者几个层组成的。<br><span style="COLOR: red">二。层CCLayer</span><br>层是我们写游戏的重点，我们大约99%以上的时间是在层上实现我们的游戏内容。<br>eg:一个游戏主菜单画面是由3个层叠加实现的:Background layer Animation layer Menu layer<br>为了让不同的层可以组合产生统一的效果，这些层基本上都是透明或者半透明的，层的叠加有顺序的，如同事件响应机制。<br>Cocoa2d从技术实现角度提供一些公用层:处理菜单的菜单层(Menu),处理颜色的颜色层(ColorLayer)等.<br>每一层又可以包含很多各式各样的内容要素：文本(Label) 链接(HTMLLabel) 精灵(Sprite) 地图等。<br><span style="COLOR: red">三。精灵 CCSprite</span><br>精灵是整个游戏开发处理的主要对象，地方的飞机。坦克是系统AI控制的精灵，代表玩家控制的我方飞机也是精灵。甚至随机飞过的一片云，一只鸟都是精灵。<br>特点：位置移动 旋转 放大缩小 运动<br><span style="COLOR: red">四.导演 CCDirector</span><br>精灵不应该依赖层，层不应该依赖场景，场景不应该依赖流程。<br>导演代表流程，负责游戏全过程的场景切换，接受层对象/场景的要求，按照预先设计好的流程来终止，压桡，激活当前场景，引导下一个场景。但导演通常只有一个，这个是间例(singleton).Coco2D框架已经预定义了该实例，不需创建，直接使用即可。<br>任何时间，只有一个Scene对象实例处于运行激活状态，该对象可以作为当前游戏内容的对象的整体包容对象，对于Menu（菜单对象，继承Layer对象),通常属于当前场景的主层。<br><br>Cocos2D-iPhone的实现类<br><span style="COLOR: red">CCDirector<br></span>负责创建，管理应用程序、游戏的主窗口，在特定的条件下显示执行某个场景。<br>设置主程序窗口显示属性。<br>管理，显示场景。<br>&nbsp;&nbsp;&nbsp; Director 对象管理场景的方法主要有以下几个：&nbsp;&nbsp;&nbsp;<br>&nbsp; 1.&nbsp; 主程序启劢，显示第一个场景的方法：(void) runWithScene:(Scene*) scene ；&nbsp;&nbsp;&nbsp;<br>&nbsp; 2. 挂起当前当前正在运行的场景并压栈到代执行场景队列。将传入场景设置为当前执&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行场景：(void) pushScene:(Scene*) scene;&nbsp;&nbsp;<br>&nbsp; 3.&nbsp; 执行代执行场景队列中的最后一个场景，当前场景被释放：(void) popScene;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当代执行队列中没有代执行场景时，系统自劢退出，调用end 方法。&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp; 4.&nbsp; 直接用一个场景取代当前执行场景，释放当前场景：(void) replaceScene:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Scene*) scene;返个凼数是经常使用的。&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp; 5.&nbsp; 结束场景运行：(void) end;&nbsp;&nbsp;<br>&nbsp; <span>6.&nbsp; 暂停场景运行：(</span>void) pause;画面迓存在，时间任务停止。&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp; 7.&nbsp; 恢复场景运行：-(void) resume; <br><span style="COLOR: red">CCScene</span><br>当前版本基本上没有附加任何特殊功能,基本上可以看成是层Layer对象的一个容器。<br><span style="COLOR: red">CCLayer</span><br>功能:接收iPone上的屏幕触摸touch操作输入<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接收动力感知输入<br>直接提供了以下三个层:<br>&nbsp;ColorLayer颜色层(可以通过setContentSize设置层大小,改变颜色块的尺寸)<br>&nbsp;Menu菜单层(实例必须是MenueItem类或者子类的实例)<br>&nbsp;MultiplexLayer复合层 可以包含多个层的复合层。<br><span style="COLOR: red">CCSprite</span><br>一个独立的图像块，通常情况它是运动的(Action):移动 旋转 放大缩小 等效果。<br>我们可以设置Sprite的属性让它运动，也可以通过动作Action来达到同样的目的。(95%内容是精灵实现模拟)<br>1.缓存图像内容，减少相同内容文件的读取次数<br>2.批量提交绘画，减少OpenGL函数的调用次数。<br>迓有一个叫CCSpriteFrameCache 类。该类用亍管理劢画效果的全部帧图像，该类直 接提供针对一个简单的图像处理工具 <a href="http://zwoptex.zwopple.com/">http://zwoptex.zwopple.com/</a>输出文件支持。<br>&nbsp;</p>
<p>&nbsp;</p>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/zhangyuntaoshe/aggbug/121726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhangyuntaoshe/" target="_blank">张运涛</a> 2010-07-30 21:20 <a href="http://www.cppblog.com/zhangyuntaoshe/articles/121726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>