Cocos2D添加精灵纹理滤镜实现图像复古效果的转换

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



大家知道Cocos2d本身是一个非常强悍的2d游戏引擎,其中自带了很多使用的图像处理功能,但是别忘了Apple自带的Core Graphics里也有很多强大的图像处理功能,比如滤镜 CIFilter.

Apple在iOS上提供了近百种不同的滤镜效果,可以用来方便快捷的渲染图像.至于CIFilter的具体使用大家可以参考苹果CG编程相关的书籍,这里由于篇幅原因不深入介绍了.

在这些滤镜中,我们选择一个复古类型的滤镜(CISepiaTone)来说明使用方法:

CIImage *ciImage = [CIImage imageWithCGImage:cgImage];
    CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
    [filter setValue:ciImage forKey:@"inputImage"];
    [filter setValue:@(0.9) forKey:@"inputIntensity"];
    CIImage *outputImage = [filter outputImage];

寥寥几行代码实现了将样板图像转换为滤镜效果的输出文件.

接下来的关键就是如何将精力的纹理转换为图片,下面是转换方法:

-(UIImage*)convertSpriteToImage:(CCSprite*)sprite{
    CGSize size = sprite.contentSize;
    _rt = [CCRenderTexture renderTextureWithWidth:size.width height:size.height];
    [_rt begin];
    [sprite visit];
    [_rt end];
    return [_rt getUIImage];
}

显示通过精灵大小设置对应渲染器的渲染大小,然后取得渲染后精灵的图片文件.

因为用滤镜处理图片对性能有不小的影响,所以为了效率因素,我们接下来写一个缓存用来存放滤镜过滤后的效果:

-(CCSpriteFrame*)getSF{
    CCSpriteFrame *sf = self.spriteFrame;
    for (NSDictionary *dict in _sfMDict.allKeys) {
        NSString *name = dict[@"Name"];
        CGRect rect = [dict[@"Rect"] CGRectValue];

        if ([sf.textureFilename isEqualToString:name] &&
            CGRectEqualToRect(sf.rect, rect)) {
            return _sfMDict[dict];
        }
    }
    return nil;
}

大家可以看到只有在缓存中找不到对应CCSpriteFrame时才实际处理图片(返回nil表示不在缓存中),否则直接使用之前处理过的图片,这样可以极大的提升效率.

最后需要在Sprite的精灵帧改变的时候调用滤镜处理方法,所以我们重载其setSpriteFrame方法:

-(void)setSpriteFrame:(CCSpriteFrame *)spriteFrame{
    [super setSpriteFrame:spriteFrame];
    if (_isRTCaused) {
        _isRTCaused = NO;
        return;
    }
    [self transferSF];
}

因为在滤镜处理后也要修改精灵的SpriteFrame所以这里用一个BOOL类型的变量_isRTCaused区分一下,否则必定死循环也 ;)

下面我们看一下实际的效果,这是正常游戏人物的显示:

下面是应用复古滤镜后人物的效果:

最后是实际游戏运行的效果,注意这是在模拟器上运行略有卡顿,在真机上还是很顺畅的:

可以看到所有游戏人物的显示都被复古化了,包括游戏界面按钮中的人物,因为我是在GC类上做的效果.

有了Cocoa中强大的图像处理能力更是对Cocos2D如虎添翼,后面如果大家感兴趣我们再说说其他特效,比如马赛克效果,曝光效果等等,see you ;)

时间: 2024-10-30 21:19:42

Cocos2D添加精灵纹理滤镜实现图像复古效果的转换的相关文章

android cocos2d 添加精灵后黑屏

问题描述 android cocos2d 添加精灵后黑屏 android cocos2d 添加精灵后黑屏,在手机上运行没有问题 , 在pad上运行涉及到添加精灵的地方就会黑屏 ,这是为什么呢? 使用的 cocos2d-android jar包 解决方案 断点调试过吗?或者有报什么错误信息

《Cocos2d 跨平台游戏开发指南(第2版)》一1.5 添加精灵到场景

1.5 添加精灵到场景 为了在屏幕上显示图像,并对图像进行处理,你需要使用CCSprite类把图像添加到场景中.与普通图像不同,精灵拥有多种属性,例如移动.缩放.旋转等,它们可以用来对图像进行处理. 1.5.1 准备工作 为了把精灵添加到场景中,我们需要先把背景图像导入到项目中. 1.5.2 操作步骤 前面我们已经在init函数中添加了有关backgroundColorNode的代码,紧接其下,添加如下代码. //Basic CCSprite - Background Image CCSprit

Cocos2D中的纹理(textures)的解释

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作! 你的图片文件(PNG,PVR)载入后转换为GPU可以理解的OpenGL ES纹理格式.Cocos2D精灵被你连接到这些纹理上,在你的游戏中被Cocos2D的Director和

运用OpenGL ES 2.0实现各种各样图像滤镜(图像处理)效果,多达50多种效果。

实现各种各样图像滤镜(图像处理)效果,多达50多种效果,基本囊括了最常见的图像处理效果.包括:contrast,hue,gamma,brightness,sharpness,emboss,saturation,exposure,shadow,blend等等. 由于需要用到OpenGL ES 2.0,所以,仅能在真机中测试.可以载入本地相册的照片或者直接拍照后进行照片处理. 源码下载地址:http://download.csdn.net/detail/gulaer/6576371 转载地址:htt

PS滤镜制作液态玻璃效果

教程介绍使用滤镜制作液态玻璃效果.制作的时候几乎都用到各种滤镜效果,不同的滤镜制作的纹理及效果各有不同,只要能够好好的组合起来就可以制作出各种绚丽的效果. 最终效果 1.新建图像,用默认颜色执行[滤镜_渲染_分层云彩],并按[CTRL_F]重复若干次,效果如下图.  2.执行[滤镜_艺术效果_干画笔],设定如下左图.然后执行[滤镜_扭曲_极坐标],设定如下中图.按[CTRL_F]重复执行极坐标滤镜三四次,效果如下右图.分类: PS滤镜教程

用 FireWorks运动模糊滤镜制作下雨动画效果

丝丝小雨,带给我们多少温柔与浪漫,这篇教程里,我们将会用Fireworks里的运动模糊滤镜来制作出丝小雨的动画特效.希望大家在网页设计中能有帮助. 第一步.先选择一张做为背景的图片. 第二步.转换到层面板添加一个新图层. 第三步.选中第二层,回到图片编辑窗口,用图形工具在图片上方拉出一个大出画布,然后填充为黑色的长方形. 第四步.保持长方形选中的状态,为其添加效果:效果?杂点?新增杂点,设置数量为:400 第五步.得到的效果应该这样的. 第六步.再为其添加滤镜效果:滤镜?模糊?运动模糊. 第七步

PS液化滤镜的各种参数效果有什么不同?

  PS液化滤镜的各种参数效果有什么不同?         PS液化滤镜介绍: 使用Liquify(液化)滤镜所提供的工具,我们可以对图像任意扭曲,还可以定义扭曲的范围和强度.还可以将我们调整好的变形效果存储起来或载入以前存储的变形效果,总之,液化命令为我们在photoshop中变形图像和创建特殊效果提供了强大的功能. 调节参数: A-变形工具:可以在图像上拖拽像素产生变形效果. B-湍流工具:可平滑的移动像素,产生各种特殊效果. C-顺时针旋转扭曲工具:当你按住鼠标<按钮或来回拖拽时顺时针旋转

图像处理------图像梯度效果

基本思想: 利用X方向与Y方向分别实现一阶微分,求取振幅,实现图像梯度效果. 使用的两种微分算子分别为Prewitt与Sobel,其中Soble在X, Y两个方向算子分别为: Prewitt在X, Y方向上梯度算子分别为: 二:程序思路及实现 梯度滤镜提供了两个参数: – 方向,用来要决定图像完成X方向梯度计算, Y方向梯度计算,或者是振幅计算 – 算子类型,用来决定是使用sobel算子或者是prewitt算子. 计算振幅的公式可以参见以前<图像处理之一阶微分应用>的文章  三:运行效果 原图

photoshop利用滤镜制作彩色光环效果教程

给各位photoshop软件的使用者们来详细的解析分享一下利用滤镜制作彩色光环效果的教程. 教程分享:   新建一个 800*800 像素文档 . (别问我为什么,教程就这么写的).   2.选择菜单:滤镜 > 渲染 > 镜头光晕   3.选择菜单:滤镜 > 艺术效果 > 塑料包装.   4.选择菜单: 滤镜>扭曲>波纹   5.滤镜>扭曲>旋转扭曲   6.CTRL+T将光环变形.   7.添加一个蒙版,将画笔设置成黑色,笔刷硬度0%,大小为280左右,在