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

如何在Cocos2D 1.0 中掩饰一个精灵(六),第1张

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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坐标轴上翻转它. @H_403_101@

在我们讨论的所有东西之后,现在让我们来实际使用它!用一下代码替换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中你可以通过着色器掩饰的更有效率 — 但是那是另一段旅程的主题了! ;)

总结

以上是内存溢出为你收集整理的如何在Cocos2D 1.0 中掩饰一个精灵(六)全部内容,希望文章能够帮你解决如何在Cocos2D 1.0 中掩饰一个精灵(六)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1074957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存