Web/Game/Programming/Life etc.
由于比较喜欢 run’n’jump 类的 2D platform 游戏,我最近研究了一些与 tile map 相关的知识。先前从 tonypa 的 tile based game 系列文章中了解技术层面的东西。但是他没有提到技术与艺术衔接的过程。后来得知了 tiled 这款开源的地图编辑器后,便有了机会窥探艺术与技术的结合方法。现在我更想知道艺术方面是如何配合这个过程来打造丰富的游戏世界的。
于是我在网上搜索了一些以前玩过的一些游戏的素材,发现了一些非常有趣的网站:The VG Resource 上面有很多从游戏包中分解出来的资源,适合学习使用。
最近一个月深入学习了一下 OpenGL ES 2.0 和 GLSL,终于把以前一直想尝试的一些效果给理解清楚了。
例如一些塔防/空战游戏中的激光,使用的效果名为 bloom effect 或者叫 glow effect,实现方式是将游戏画面实时高斯模糊,然后以 gl.blendFunc(gl.ONE, gl.ONE) 的混合模式叠加至原图中,达到高光的效果:GPU GEMS - Chapter 21. Real-Time Glow。
刀塔传奇手游中的场景切换非常灵活:玩家可以通过任务窗口跳转至其它界面,甚至可以通过角色界面中缺失的材料顺滕摸瓜进入关卡界面,然后通过战斗获得自己需要的物品,最后重新回到角色界面——之前打开的窗口依然在那里,就像你没有离开过一样。如果你无聊,可以从任务窗口一层又一层的周转于各个界面,然后在任意时刻都能回退到之前的场景,这种无限后退的能力非常有趣。然而手机的内存是有限的,如何组织程序,保存之前的“现场”则是一种考验。显然由 cocos2d 框架提供的基于 Director/Scene 的场景管理不足以直接实现这样的需求。
开发手机游戏时常常需要对不同的设备进行分辨率适配。在 PC 游戏开发中,一种比较直截了当的作法——全屏显示游戏,将屏幕锁定在一个预设好的分辨率中即可。但这在当下的移动设备中无法做到。由于生产标准不一,市场上有各种让人零乱的 Android 设备尺寸,即便是规格较统一的 iOS 设备,如今也正走向多分辨率分裂的格局:
为了应对不同的屏幕,Cocos2d-x 游戏引擎提供了一组分辨率适配策略:
详细的使用方法可参见此官方文档。这些策略通过一些妥协使得游戏在不同的设备上得以较完整的显示。文档中提到一个重要概念叫“设计分辨率”(Design Resolution),表示设计组在这个尺寸下进行游戏素材的设计。在这里对于这些显示策略的优势与不足作一些简单的介绍: