对于事先制作好的背景图片,我想你已经非常熟知如何把它们添加进游戏里面了。但是,你有没有想过动态地创建背景图片并且修改它们的颜色,梯度(gradients)及实时改变效果呢?
如果你玩过App Store 上面,由Andreas Illiger制作的Tiny Wings游戏的话,实际上你已经体验过上面提及的想法了。
在这个系列的教程中,你将会学习到所有这些技术要点:
如何用代码实时动态创建纹理
如何使用Gimp创建无缝拼接的纹理
如何混合阴影和光照来增强现实效果
如何创建带状纹理
如何制作重复纹理
还有更多!
这个教程是基于Sergey Tikhonov在cocos2d论坛里面讨论“如何制作Tiny Wings”时所制作的一个样例工程来制作的。
Sergey在demo工程上面做了一件非常好的工作,因此,为了不重复发明轮子,我将把他的代码转换成一个系列的教程,同时还添加了一些很酷的特性。
这个教程假设你对于cocos2d已经非常熟悉了。如果你对cocos2d还很陌生的话,建议你先看看我博客上面的其它cocos2d 教程。
使用CCRenderTexture来动态创建纹理
Tiny Wings有一个很酷的特性就是,每一天都会改变纹理,就如同下面的游戏截屏一下:
但是,你怎么在cocos2d里面来动态创建纹理呢?好吧,其实有一个很酷的类,叫CCRenderTexture,它允许你来动态创建纹理,并且可以在游戏中重用这些纹理。
使用 CCRenderTexture非常简单 – 你只需要做以下5步就行了:
创建一个新的CCRenderTexture. 这里,你可以指定将要创建的纹理的宽度和高度。.
调用 CCRenderTexture:begin. 这个方法会启动OpenGL,并且接下来,任何绘图的命令都会渲染到CCRenderTexture里面去,而不是画到屏幕上。
绘制纹理. 你可以使用原始的OpenGL调用来绘图,或者你也可以使用cocos2d对象里面已经定义好的visit方法。(这个visit方法就会调用一些opengl命令来绘制cocos2d对象)
调用 CCRenderTexture:end. 这个方法会渲染纹理,并且会关闭渲染至CCRenderTexture的通道。
从生成的纹理中创建一个sprite. 你现在可以用CCRenderTexture的sprite.texture属性来轻松创建新的精灵了。
让我们来实践一下具体这个过程是如何工作的,我们先来创建一个简单的单色的纹理。
但是,首先,你需要一个新的工程!因此,打开Xcode,点击File\New\New Project,然后选择 iOS\cocos2d\cocos2d_box2d template。尽管这个教程并没有使用到box2d,但是,我们后续的教程会用到,所以,我在这里就提前先建立好。
把工程命名为TinySeal,点击Next,然后选择磁盘上的一个文件夹并点击Create。