Cocos2D结合CoreGraphics实现RPG人物中空黑洞吸入效果

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)



之前的博文中我们实现了RPG人物的复古效果.

现在我们再完点high的,我们准备实现这么一种效果:

人物从中心点开始形成一个空洞,洞的边缘产生一种吸入变形效果.

有了上一篇的铺垫,我们可以很快搞定它.

首先看一下Apple对其CIHoleDistortion滤镜的说明:

Creates a circular area that pushes the image pixels outward, distorting those pixels closest to the circle the most.

Localized Display Name
Hole Distortion

inputImage
A CIImage object whose display name is Image.
inputCenter
A CIVector object whose attribute type is CIAttributeTypePosition and whose display name is Center.

Default value: [150 150]
inputRadius
An NSNumber object whose attribute type is CIAttributeTypeDistance and whose display name is Radius.

Default value: 150.00

以上是滤镜对应的3个参数,很简单:

第一个是输入图片,第二个是黑洞的中心点,最后一个是黑洞的半径.

官方网站还给出了应该显示的效果:

好了,下面我们把它放到游戏中去:

//将CGImage转换为CIImage
    CIImage *ciImage = [CIImage imageWithCGImage:_image.CGImage];
    //用过滤器生成新的CIImage
    CIFilter *filter = [CIFilter filterWithName:@"CIHoleDistortion"];
    CIVector *vector = [CIVector vectorWithX:sz.width*_image.scale/2
                                           Y:sz.height*_image.scale/2];
    [filter setValue:ciImage forKey:@"inputImage"];
    [filter setValue:vector forKey:@"inputCenter"];
    [filter setValue:@(10.0) forKey:@"inputRadius"];
    CIImage *outputImage = [filter outputImage];

以上我们选择RPG人物的中心点为黑洞的中心,且黑洞的半径为10.

编译运行游戏,效果如下:

放大一点看一下效果:

可以看到上图中的狗狗的肚子里出现了背景草地上一朵小花.

一般来说要想实现该效果,需要自己写OpenGL ES的端点和片段着色器,但是我们通过Cocoa提供的滤镜,避免了较底层的方法,而且实现起来非常简单.

时间: 2024-10-23 15:09:31

Cocos2D结合CoreGraphics实现RPG人物中空黑洞吸入效果的相关文章

奇幻RPG(人物构造 与 Abstract Factory模式)

在前一节,我们介绍了Strategy模式,并使用此模式实现了一个根据角色的职业来分配技能的范例(实际也就是动态地为类分配方法).作为一款奇幻RPG,有了职业,我们还应当可以为角色选择种族,比如说:人类(Human).精灵(Elf).矮人(Dwarf).兽人(Orc)等等.而这四个种族又有着截然不同的外形,精灵皮肤灰白.有着长长的耳朵.没有体毛和胡须:矮人的皮肤与人类近似,但是身材矮小.通常留着浓密的胡子:兽人则有着绿色的皮肤和高大的身躯,并且面目丑陋.本文将讨论如何使用GOF的Abstract

SpriteBuilder&Cocos2D使用CCEffect特效实现天黑天亮过度效果

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 在动作或RPG类游戏中我们有时须要天黑和天亮过度的效果来完毕场景的过度,有非常多种方法比方用场景切换的过渡类来实现.可是在这里我们使用另外的方法:CCEffect特效节点来实现. 打开SpriteBuilder,在CCB场景中加入一个CCEffectNode节点,按例如以下设置: 注意上图有2个Brightness效果,实际仅仅用一个,还有一个是做其它測试用的

cocos2dx 3.x(实现帧动画(人物动画,跑马灯效果)的几种方法)

1 //创建一个跑酷的精灵? 2  auto sprite = Sprite::create("1.png");? 3 //设置精灵的坐标? 4 sprite->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));? 5 //添加到当前层? 6 this->addChild(sprite);? 7 //创建序列帧动画? 8 auto animation = Animation::create();? 9 /

Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在游戏App中为了衬托气氛我们往往使用一些特殊的图形效果,粒子效果无疑是其中最为常用,也最为方便的一种. 正常使用下,粒子效果的确很稳定,但是本猫最近在RPG游戏里却遇到了粒子效果不能显示的问题,调试着实花了一些功夫.现将问题现象,分析以及解决方法记录下来和大家一起分享,也便于以后回忆查找. 问题现象很简单,就是粒子效果不显示-但也不是所有粒子效果都不显示,只

cocos2d基础入门

HelloCpp中Classes目录下放开发者自己的类: win32:平台相关,coco2d已默认创建:coco2d-x目录下,samples/cpp/HelloCpp/(工程根目录)图片放置位置:根目录下/Resources目录下;什么是场景:场景是占据屏幕的界面:什么是锚点:锚点如何设置: CCSprite * leftdoor = CCSprite::create("loading/door.png"); leftdoor->setAnchorPoint(ccp(1,0.5

Flash美术资源

之所以写这个文章,是因为自己在这些年的AS前端开发中,逐渐发现了关于Flash美术的大量的"陷阱"和"流氓资源".当然,AS编写中,也存在类似的事情.但本章值谈论Flash.另外,还有一个原因,很多的小公司的美术都不注意这些问题. 1,关于图片问题 ①:关于as链接: 这玩意,可以将RPG人物的动作及美术的文字加到SWF中进行压缩及加密.然后由AS3进行提取.但是如你的Flash版本是CS6以下.则,AS3是获取不到图片的.要注意. ②:关于纯粹的图片 其实这个东西

SAF 中抽象工厂的实现

本文是<Developing Application Frameworks in .NET>的读书笔记.SAF 是书中的一个范例框架,意为 Simple Application Framework(简单应用程序框架).这篇文章主要向大家说明了SAF中抽象工厂模式的实现方式. 设计思想概述 抽象工厂是很常用的一种创建型模式,它的主要作用在于向程序员屏蔽了创建对象的复杂细节,在获取对象时,只需要在工厂类上调用 GetXXX(),或者 CreateXXX(),便可以得到一个类型实例,而不是通常所使用

PS教程1000例

http://www.missyuan.com/thread-446934-1-1.html Photoshop绘制逼真头发发丝效果http://www.missyuan.com/thread-446912-1-1.html Photoshop合成在空中漂移的陆地http://www.missyuan.com/thread-446909-1-1.html Photoshop制作漂亮的紫色水晶字效果http://www.missyuan.com/thread-446908-1-1.html Pho

cocos2d-x 3.6 mac下的试用(粒子,触摸事件,图片)

戏说 虽然公司再如何如何,咱程序员在干好课外学习的情况下也是要努力做好本职工作的. 工作中的lua也写多了,深入了解Cocos2d-x当然还是要倒腾倒腾C++,对于一个C#用了这么多年,工作用lua的小菜来说,C++还真是不习惯. Cocos2d-x不知不觉的更新到了3.6版本,真是万人大吐槽,2d还没做清楚又开始弄3d了,触控大神们就不能专心做好一件事情吗,多少大坑没填好,又是各种改命名,每次更新都向学习新库一样...Orz....吐槽完毕还是要好好工作的. 演义 3.6中引入了Frame架构