近来cocos2dx的论坛刮起了一阵制作贪食蛇的潮流,我也打算来凑个热闹。不过主要目的还是因为在写3.0过渡篇的系列博客时讲的都是理论,缺少实践。这次就用贪食蛇的例子较为系统的介绍3.0与2.0的一些不同之处。(当然了,有的人肯定会说我是冲沈大海老师的书来了,这种事坚决不能忍!,我慎重说明:我的收货地址是...)
------------------
贪食蛇嘛,大家都懂的,就是那条又长又细、可伸缩自如外加弹性还OK的..蛇啦。
首先介绍下游戏制作流程:
1、游戏中有三个场景,分别是主菜单界面(HelloWorld),帮助界面(GameHelp),游戏界面(GameLayer)。
2、进入游戏场景要处理的事件有:
a、开启重力感应,在onAcceleration()回调函数里判断蛇应该往哪个方向移动;
b、用draw()方法来自定义图层显示内容,如界面中的格子,蛇头,身体,食物等;
c、通过update定时器来实时更新蛇的位置
3、请继续往下看.......
代码实现如下:
先看.h头文件:
------------------
贪食蛇嘛,大家都懂的,就是那条又长又细、可伸缩自如外加弹性还OK的..蛇啦。
首先介绍下游戏制作流程:
1、游戏中有三个场景,分别是主菜单界面(HelloWorld),帮助界面(GameHelp),游戏界面(GameLayer)。
2、进入游戏场景要处理的事件有:
a、开启重力感应,在onAcceleration()回调函数里判断蛇应该往哪个方向移动;
b、用draw()方法来自定义图层显示内容,如界面中的格子,蛇头,身体,食物等;
c、通过update定时器来实时更新蛇的位置
3、请继续往下看.......
代码实现如下:
先看.h头文件:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
USING_NS_CC;
//枚举类型DIR_DEF,分别标识贪食蛇的移动方向
typedef enum {
UP=1,
DOWN,
LEFT,
RIGHT
}DIR_DEF;
//蛇每个节点都有自己的移动方向,因此,在节点类SnakeNode的定义中包含了行、列和方向3个成员
class SnakeNode :public cocos2d::Ref
{
public:
int row;//行
int col;//列
int dir;//方向
};
//游戏欢迎画面,这个大家很熟的
class HelloWorld : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();//获取欢迎画面的Scene
virtual bool init();
virtual void onEnter();
virtual void onExit();
CREATE_FUNC(HelloWorld);
};
//游戏帮助画面
class GameHelp :public cocos2d::Layer
{
public :
virtual bool init();
virtual void onEnter();
virtual void onExit();
static cocos2d::Scene * createScene();//获取帮助画面
CREATE_FUNC(GameHelp);
};
//游戏画面
class GameLayer :public cocos2d::Layer
{
public :
static cocos2d::Scene * createScene();//获取游戏画面
virtual bool init();
virtual void onEnter();
virtual void onExit();
virtual void draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated) override;//实现当前Layer的定义
void onAcceleration(Acceleration* acc, Event* ev