此次更新主要针对以下几点:
File
类更名为 Path
类,因为这个类只提供一些系统路径、数据保存路径等。
时隔两个月,我们又将 Listener(监听器)这一概念加了进来,它配合 Input
类可以达到监听用户按键和鼠标消息的功能。
监听器的执行方式和定时器类似,在监听到用户输入时执行回调函数。你需要先创建一个回调函数。
1 | void GetInput() |
然后创建一个监听器,并启动它。
1 | // 创建监听器 |
监听器启动后,当检测到用户按键时,它会自动执行 GetInput 函数,判断用户按下的是否是右键,如果是,移动精灵。
如果你觉得创建监听器的方法太繁琐,可以直接使用 Input::add
函数添加一个监听器。
1 | // 添加监听器 |
Input::add
函数把 GetInput 函数添加到了监听队列中,检测到用户输入时自动执行 GetInput 函数。
为了让 Shape(形状)更好使用,现在每个节点都默认包含了一个矩形形状。
让我们看看 FlappyBird 游戏中展现的效果。调用场景的 Scene::setShapeVisiable
函数,让形状可见,如下图所示
可以看到,即使没有创建 Shape,所有的图形边框也都被显示了出来。这在 Debug 时很有帮助,同时也能更好的帮助我们观察游戏中物体的运动。
之前 Shape 类是为了检测物体间碰撞存在的,现在所有节点都有 Shape,为了防止碰撞的频繁发生,也为了游戏性能,碰撞检测默认是关闭的,可以通过 ShapeManager::setCollisionEnable
函数重新启用。开启后,当 ShapeManager 检测到碰撞发生时,会自动调用发生碰撞节点和其所在场景的 onCollide
函数。
如果你不想让节点包含默认形状,可以通过 Node::setDefaultShapeEnable
函数开启或关闭。关闭后,新建的节点将不包含默认形状。
Data
类用来保存用户的数据,它将数据和键值对应保存,当用户需要取出数据时,可以根据键值取出相应的数据。键值和数据的关系就像钥匙和抽屉,一把钥匙对应一个抽屉,一个键值也对应一个数据。
现在,Data 增加了 字段
这个新属性,就好比柜子,一个柜子有很多个抽屉,你可以把数据放置到不同的柜子里。这样,用同一把钥匙,可以在不同的柜子打开不同的抽屉。
Data 保存的文件名也可以通过 Data::setDataFileName
设置(注意:不应有特殊字符和后缀名),就好比房间的概念。
简单来说,一个房间里面有很多个柜子,柜子里有很多个抽屉,一个抽屉里面放着一个物品。
对应到 Data 上,一个数据文件有很多个字段,字段里有很多个键值,一个键值对应一个数据。