如何在Cocos2D 1.0 中掩饰一个精灵(六)
来源:互联网 发布:java实现身份证的验证 编辑:程序博客网 时间:2024/05/15 07:50
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)
掩饰一个精灵:实现代码
打开HelloWorldLayer.m并且在init方法上方添加如下方法:
- (CCSprite *)maskedSpriteWithSprite:(CCSprite *)textureSprite maskSprite:(CCSprite *)maskSprite { // 1 CCRenderTexture * rt = [CCRenderTexture renderTextureWithWidth:maskSprite.contentSizeInPixels.width height:maskSprite.contentSizeInPixels.height]; // 2 maskSprite.position = ccp(maskSprite.contentSize.width/2, maskSprite.contentSize.height/2); textureSprite.position = ccp(textureSprite.contentSize.width/2, textureSprite.contentSize.height/2); // 3 [maskSprite setBlendFunc:(ccBlendFunc){GL_ONE, GL_ZERO}]; [textureSprite setBlendFunc:(ccBlendFunc){GL_DST_ALPHA, GL_ZERO}]; // 4 [rt begin]; [maskSprite visit]; [textureSprite visit]; [rt end]; // 5 CCSprite *retval = [CCSprite spriteWithTexture:rt.sprite.texture]; retval.flipY = YES; return retval;}
让我们一段一段的看:
- 用和掩饰精灵相同的宽和高创建CCRenderTexture.
- 将掩饰精灵和纹理精灵放置到左下0,0的位置.
- 为之前描述的每一个精灵设置混合函数.
- 调用begin去在CCRenderTexture中开始绘制,绘制掩饰图片然后是纹理,最后调用end去结束绘制.
- 基于CCRenderTexture的精灵纹理创建一个新的精灵,因为该纹理是上下翻转的,所以需要在y坐标轴上翻转它.
在我们讨论的所有东西之后,现在让我们来实际使用它!用一下代码替换BEGINTEMP和ENDTEMP之间的代码:
CCSprite * mask = [CCSprite spriteWithFile:@"CalendarMask.png"]; CCSprite * maskedCal = [self maskedSpriteWithSprite:cal maskSprite:mask];maskedCal.position = ccp(winSize.width/2, winSize.height/2);[self addChild:maskedCal];
该代码用我们新的函数去掩饰日历精灵,并且添加掩饰后的版本到场景中.
编译运行,你应该看到一个被Cocos2D 1.0掩饰后的精灵!
关于CCRenderTexture方法的缺点
对于这个简单的例子app来说工作的不错,但是这里该方法有一些缺点你可能会在更复杂的app中注意到:
- 每一次你应用一个掩饰图片都会在内存中创建额外的纹理.纹理内存在iPhone中是非常受限制的,所以你必须非常小心对待你一次可以添加多少纹理到内存中去.如果一次添加少量纹理那表示没什么问题,但是如果你必须掩饰100张图片呢?
- 绘制会耗费时间.用CCRenderTexture绘制并非毫无代价(特别是你的纹理尺寸变大的时候).如果你频繁的做这些事,你可能注意到性能上的冲击.
就像我前面提到的那样,在OpenGL ES 1.0中据我所知没有办法绕过这些缺点.但在OpenGL ES 2.0中你可以通过着色器掩饰的更有效率 — 但是那是另一段旅程的主题了! ;)
0 0
- 如何在Cocos2D 1.0 中掩饰一个精灵(六)
- 如何在Cocos2D 1.0 中掩饰一个精灵(一)
- 如何在Cocos2D 1.0 中掩饰一个精灵(二)
- 如何在Cocos2D 1.0 中掩饰一个精灵(三)
- 如何在Cocos2D 1.0 中掩饰一个精灵(四)
- 如何在Cocos2D 1.0 中掩饰一个精灵(五)
- Cocos2d-x中,如何通过触摸来移动一个精灵
- 如何添加一个cocos2d-x精灵
- 如何移动一个cocos2d-x精灵
- 如何添加一个cocos2d-x精灵
- 如何移动一个cocos2d-x精灵
- 在cocos2d里面如何拖拽精灵
- cocos2d-js中怎么删除一个精灵
- 关于在cocos2d-x中一个精灵移动到 另外一个地点的实现方法。
- Cocos2d 创建一个精灵
- 在cocos2d里拖拽精灵
- 如何添加一个cocos2d-x精灵之二
- 如何移动一个cocos2d-x精灵 之三
- iOS新闻客户端开发教程6-二级栏目导航条
- 第十二周 项目四(3) 利用遍历思想求解图问题
- tstring转换成string
- (第七周项目1)建立顺序环形队列算法库
- L的那些天
- 如何在Cocos2D 1.0 中掩饰一个精灵(六)
- __autoload && set_hander php的错误异常处理机制以及自动加载机制
- 在线拍照功能JQuery.webCap.plugin 实现
- JSP:JSP动作标签
- 解决NDK开发中Eclipse报错“Unresolved inclusion jni.h”的最终方法
- Aidl跨进程通信机制-android学习之旅(87)
- Android 学习博客
- 移动互联网迅猛发展,连接人与服务成为重要趋势
- Android--异步保存图片