木匣子

Web/Game/Programming/Life etc.

CCTMXTiledMap 与热更机制的冲突

本文涉及的 cocos2d-x 开发版本:cocos2d-x 3.2 / cocos2d-js 3.0 final

最近一个月在项目中新增加了类大富翁玩法,使用了 CCTMXTiledMap 来实现地图背景。由于热更资源的时候只提交了修改过的 tmx 地图数据文件,导致 CCTMXLayer 根据「相对路径」无法加载到地图图集(Tilesets)。解决方案有两种:

  1. 热更的时候连 tilesets 相关图片一起提交;
  2. 修复引擎底层加载图集的机制。

角色动作练习:idle/walk/run

一晃已经出来工作两年了。最近一个月赶项目忙得不可开交,可是仔细想想并没有什么实质性的收获。所幸每天的晚上还有几个小时的时间可以继续向着自己的 indie game 梦想慢慢前行。

这两天研究了一下简单的 2D Platform Game 中需要用到的人物素材,并尝试着自己鼠绘了几个简单的动作。

Maplestory 图块分析

由于比较喜欢 run’n’jump 类的 2D platform 游戏,我最近研究了一些与 tile map 相关的知识。先前从 tonypa 的 tile based game 系列文章中了解技术层面的东西。但是他没有提到技术与艺术衔接的过程。后来得知了 tiled 这款开源的地图编辑器后,便有了机会窥探艺术与技术的结合方法。现在我更想知道艺术方面是如何配合这个过程来打造丰富的游戏世界的。

于是我在网上搜索了一些以前玩过的一些游戏的素材,发现了一些非常有趣的网站:The VG Resource 上面有很多从游戏包中分解出来的资源,适合学习使用。

Bloom Effect

最近一个月深入学习了一下 OpenGL ES 2.0 和 GLSL,终于把以前一直想尝试的一些效果给理解清楚了。

例如一些塔防/空战游戏中的激光,使用的效果名为 bloom effect 或者叫 glow effect,实现方式是将游戏画面实时高斯模糊,然后以 gl.blendFunc(gl.ONE, gl.ONE) 的混合模式叠加至原图中,达到高光的效果:GPU GEMS - Chapter 21. Real-Time Glow

使用 PureMVC 和 Cocos2d-js 构建游戏项目

Demand

刀塔传奇手游中的场景切换非常灵活:玩家可以通过任务窗口跳转至其它界面,甚至可以通过角色界面中缺失的材料顺滕摸瓜进入关卡界面,然后通过战斗获得自己需要的物品,最后重新回到角色界面——之前打开的窗口依然在那里,就像你没有离开过一样。如果你无聊,可以从任务窗口一层又一层的周转于各个界面,然后在任意时刻都能回退到之前的场景,这种无限后退的能力非常有趣。然而手机的内存是有限的,如何组织程序,保存之前的“现场”则是一种考验。显然由 cocos2d 框架提供的基于 Director/Scene 的场景管理不足以直接实现这样的需求。

疯狂伐木工与别踩白块儿

前段时间手机上有两款休闲游戏很火:别踩白块儿疯狂伐木工,其玩法简单有趣:

别踩白块儿

别踩白块儿

一些色块分成四列,每操作一次,屏幕往下移动一格。你需要以最快的速度点击最下面的色块所在的列。点到白块即失败。

疯狂伐木工

timberman

一个壮汉在树下,每操作一次,树被砍掉一截,然后上面的树干往下落。下落的树干的左侧或者右侧会带有树枝,快速砍树并移动壮汉,必避被树枝压死。

简单的 cocos2d-x 屏幕适配策略

开发手机游戏时常常需要对不同的设备进行分辨率适配。在 PC 游戏开发中,一种比较直截了当的作法——全屏显示游戏,将屏幕锁定在一个预设好的分辨率中即可。但这在当下的移动设备中无法做到。由于生产标准不一,市场上有各种让人零乱的 Android 设备尺寸,即便是规格较统一的 iOS 设备,如今也正走向多分辨率分裂的格局:

  • iPhone4S 960×640
  • iPhone5/5S 1136×768
  • iPad 1024×768
  • iPad retina 2048×1536
  • and so forth…

为了应对不同的屏幕,Cocos2d-x 游戏引擎提供了一组分辨率适配策略:

  • Show All
  • No Border
  • Exact Fit
  • Fixed Width
  • Fixed Height

详细的使用方法可参见此官方文档。这些策略通过一些妥协使得游戏在不同的设备上得以较完整的显示。文档中提到一个重要概念叫“设计分辨率”(Design Resolution),表示设计组在这个尺寸下进行游戏素材的设计。在这里对于这些显示策略的优势与不足作一些简单的介绍: