如何在Cocos2D 1.0 中掩饰一个精灵(四)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)



为了完成需要的效果,我们将使用如下策略:

  1. 我们将首先绘制掩饰精灵,源的颜色(mask)设置为GL_ONE,目的颜色(一个空的缓存)设置为GL_ZERO.所以我们基本上原样显示掩饰图片.
  2. 我么将绘制日历精灵,源颜色(日历精灵)为GL_DST_ALPHA.你可以把它想象为好比是”根据当前缓存中alpha的值(the mask).当它为不透明时,让日历显示出来,如果是透明的,则不显示任何东西!”.目的颜色(the mask)为GL_ZERO,so之前绘制已存在的掩码好像消失了一样.

太好了!你可能认为你只要一个接一个的在Cocos2D中绘制如上2个精灵,并且设置合适的混合模式就可以了搞定了 — 但是你错了.

问题是上面的混合算法在运行中如果在你绘制的精灵下面有其他东西 — 比如背景或其他精灵,就会发生问题.这是因为它假设在第1步之后的图片缓存中只有mask图片 — 没有其他图片数据.

所以我们需要一些办法在绘制掩饰纹理的时候有一块”空白石板”(blank slate).这就得靠我们的CCRendererTexture朋友来拯救我们了!

时间: 2024-10-25 15:51:03

如何在Cocos2D 1.0 中掩饰一个精灵(四)的相关文章

如何在Cocos2D 1.0 中掩饰一个精灵(一)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原帖来自Ray Wunderlich写的精彩的文章 How To Mask a Sprite with Cocos2D 1.0,地址在: http://www.raywenderlich.com/4421/how-to-mask-a-sprite-with-cocos2d-1-0 有时在你的游戏中,你可能需要找到便利的方法去显示精灵的一部分. 一种办法是使用第二

如何在Cocos2D 1.0 中掩饰一个精灵(六)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并且在init方法上方添加如下方法: - (CCSprite *)maskedSpriteWithSprite:(CCSprite *)textureSprite maskSprite:(CCSprite *)maskSprite { // 1 CCRenderTexture * rt = [CCRe

如何在Cocos2D 1.0 中掩饰一个精灵(五)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰和CCRenderTexture CCRenderTexture是一个让你在屏幕以外缓存中绘制的类. 它的便捷有很多理由 - 你可以使用它去在你的游戏中截屏,用户绘制更为高效的缓存,在运行时动态创建精灵表集(sheets),或者我们将用来这个目的 - 帮助我们掩饰一个精灵. 为了使用CCRenderTexture,你要执行以下步骤: 创建CCRenderTe

如何在Cocos2D 1.0 中掩饰一个精灵(二)

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 让我们开始吧 打开Xcode,从New Project中选择cocos2d模板,点击下一步.命名新项目为MaskedCal,点击下一步,选择目标文件夹,然后点击Create. 接下来下载该项目的资源文件: http://haosou.xqiju.com/browse.php?u=sDrnThWlVVAzW8rIeQpXWRtJQhNB2ji0W8bJoRwh3e

如何在EF 5.0 中做带外键的数据新增

问题描述 如何在EF 5.0 中做带外键的数据新增 各位大牛好,我有一个EF的问题: 我有一张主表,包含2个子表,是用外键关联的,但是其中一张子表又是另一个子表的子表,也是用外键关联的,请问在EF中如何新增这3张表的记录.

ejb方法调用-EJB3.0中怎么一个类调用另外一个类的方法

问题描述 EJB3.0中怎么一个类调用另外一个类的方法 我做得的是struts+ejb3.0,在EJB中我想用BIZ调用dao,是直接New还是有别的方法...求大神指教..... 这是BIZ的方法 public List queryPet(String pelName,String pelZr,String pelType ,String px) { System.out.println("aaaaaaaaaaaaaaaaaaaa"); IDao dao=new IDaoImpl()

c#画图 如何在c# Form窗体中画一个圆!

问题描述 c#画图 如何在c# Form窗体中画一个圆! 怎么样在c#窗体中画出下图这样的图图片说明 解决方案 http://download.csdn.net/detail/yuping_liu/2343322 解决方案二: http://download.csdn.net/detail/yzl417020551/8629301 解决方案三: http://bbs.csdn.net/topics/390063048 解决方案四: http://blog.csdn.net/xianfajushi

vb6.0-VB6.0中定义一个rdoEnvironment时总是显示用户定义类型未定义

问题描述 VB6.0中定义一个rdoEnvironment时总是显示用户定义类型未定义 rt,VB6.0中定义一个rdoEnvironment时总是显示用户定义类型未定义

ActionScript3.0中建立一个帧频计数器

在这个教程中,你将学会如何测量Flash中当前的帧频,并将其显示出来. 帧频的重要性每一帧上都是一幅静止的图片,快速连续的帧会产生动画,每秒的帧数越多,展现的动画也就越流畅. 测帧频能让我们检测动画的进程,如果需要的话还可以优化动画. 当在不同的运行环境中测试动画时这个是非常有用的,例如浏览器中,电脑中,电视或手机中. 我们可以通过使用getTime()方法测帧频,并即时的在舞台中创建文本域来输出结果. --------------------------– 第一步:创建新文档打开Flash并创