9.【cocos2d翻译系列】Actions, Transformations and Effects--Effect actions

Effects (特效)

介绍

特效是一种特殊的actions。它不是修改像透明度,位置,旋转或者缩放这些一般的属性,而是修改一种新的属性:grid(网格) 属性。

grid属性就像矩阵,它是一个网络线,相互交叉,形成了一系列的正方形或矩形。

这种特殊的动作可以将任何CCNode的对象渲染成网格,你可以通过移动他们的顶点变换这些网格。

这里有两种œ网格:tiled 网格 和non-tiled 网格。两者的区别在于tiled的网格由独立的tile组成,但是non-tiled网格是由顶点组成。

网格有两个维度:行和列,但是每一个网格有三个维度:x,y,z.所以你可以通过变换一个tiled-grid-3D或者-grid-3D来创建一个2D或3D的特效。

你可以通过增加grid的大小来提高特效的质量,但是特效的速度将会降低。

一个大小是(16,12)的网格几乎在大多数机器上运行都很快,但是看起来效果不会很好。但是一个(32,24)的网格看起来就会

漂亮多了,但是对硬件要求又比较高。


他们怎样工作

屏幕的每一帧都会渲染成纹理,纹理将被装换成顶点数组,而这个顶点数组被网格特效变换,最后顶点数组被渲染到屏幕上。


要知道更多地关于内部参考

  • CCTiledGrid3D和CCTiledGrid3DAction
  • ccGrid3D和CCGrid3DAction

例如,如果你的屏幕和layer上渲染了这张图片:

我们可以使用CCRipple3D动作来变换成如下样子。同样你可以看到连线的图片,它使用了一个32*24的正方形网格并且这个网格

是non-tiled(所有的tile都是一起的)。




或者我们可以使用CCFadeOutTRTiles动作变换成如下样子。同样你可以看到连线的图片,它使用一个16*12的正方形网格,并且网格是tiled的。


3D actions(3D 动作)

actions中名字带有3D后缀的,意味着它们通过修改网格的z坐标产生一个栩栩如生的3D特效。

如果你要使用任何一个3D的action,你都需要先使用深度缓存。一个简单地方法就是:
// IMPORTANT: Call this function at the very beginning, before running your 1st scene
// Create a depth buffer of 24 bits
// These means that openGL z-order will be taken into account
[[CCDirector sharedDirector] setDepthBufferFormat:kDepthBuffer16];
在某些情况下,你可能想设置RGBA8888像素格式,这将使你的特效有透明度
// IMPORTANT: Call this function at the very beginning, before running your 1st scene
// Use this pixel format to have transparent buffers
[[CCDirector sharedDirector] setPixelFormat:kPixelFormatRGBA8888];

grid特效索引:

  • CCFlipX3D 
  • CCFlipY3D 
  • CCLens3D
  • CCLiquid
  • CCRipple3D
  • CCShaky3D
  • CCTwirl
  • CCWaves
  • CCWaves3D

可用的CCTiledGrid3DAction动作:

  • CCFadeOutBLTiles
  • CCFadeOutTRTiles
  • CCFadeOutUpTiles
  • CCFadeOutDownTiles
  • CCJumpTiles3D
  • CCShakyTiles3D
  • CCShatteredTiles3D
  • CCShuffleTiles
  • CCSplitCols
  • CCSplitRows
  • CCTurnOffTiles
  • CCWavesTiles3D
例子:
// execute a Waves action on sprite 1
id waves = [CCWaves actionWithWaves:5 amplitude:20 horizontal:YES vertical:NO grid:ccg(15,10) duration:5];
[sprite1 runAction: [CCRepeatForever actionWithAction: waves]];
// and execute a Shaky3D action on sprite 2
id shaky = [CCShaky3D actionWithRange:4 shakeZ:NO grid:ccg(15,10) duration:5];
[sprite2 runAction: [CCRepeatForever actionWithAction: shaky]];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值