Cocos2dx 3.0 过渡篇(二十四)死不了的贪食蛇(重力版)
来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:36 点击:次
近来cocos2dx的论坛刮起了一阵制作贪食蛇的潮流,我也打算来凑个热闹。不过主要目的还是因为在写3.0过渡篇的系列博客时讲的都是理论,缺少实践。这次就用贪食蛇的例子较为系统的介绍3.0与2.0的一些不同之处。(当然了,有的人肯定会说我是冲沈大海老师的书来了,这种事坚决不能忍!,我慎重说明:我的收货地址是...)
------------------
贪食蛇嘛,大家都懂的,就是那条又长又细、可伸缩自如外加弹性还OK的..蛇啦。
首先介绍下游戏制作流程:
1、游戏中有三个场景,分别是主菜单界面(HelloWorld),帮助界面(GameHelp),游戏界面(GameLayer)。
2、进入游戏场景要处理的事件有:
a、开启重力感应,在onAcceleration()回调函数里判断蛇应该往哪个方向移动;
b、用draw()方法来自定义图层显示内容,如界面中的格子,蛇头,身体,食物等;
c、通过update定时器来实时更新蛇的位置
3、请继续往下看.......
代码实现如下:
先看.h头文件:
头文件的注释描述的还算清楚,所以大家看完后应该会对游戏的流程有了一定的概念,继续往下走。
1、创建主菜单界面的主要代码如下:
------------------
贪食蛇嘛,大家都懂的,就是那条又长又细、可伸缩自如外加弹性还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* event);//重力事件的回调 void logic01(float t);//update的回调 CREATE_FUNC(GameLayer); protected: SnakeNode *sHead; //贪食蛇px py SnakeNode *sFood; //食物 cocos2d::Vector allBody;//蛇的身体,放到容器Vector中 // cocos2d::Texture2D * chead; }; #endif // __HELLOWORLD_SCENE_H__
头文件的注释描述的还算清楚,所以大家看完后应该会对游戏的流程有了一定的概念,继续往下走。
1、创建主菜单界面的主要代码如下:
//添加项菜单进入游戏游戏、帮助、退出游戏的按钮 auto labelstart = LabelTTF::create("startGame","宋体",24); auto labelhelp = LabelTTF::create("GameHelp","宋体",24); auto labelexit = LabelTTF::create("exitGame","宋体",24); //进入游戏按钮 auto mi01 = MenuItemLabel::create(labelstart,[](Ref* sender) { CCLOG("go to game"); Director::getInstance()->replaceScene(GameLayer::createScene());//跳转到游戏场景 }); mi01->setPosition(Point(100,200)); //帮助按钮 auto mi02 = MenuItemLabel::create(labelhelp,[](Ref* sender) { CCLOG("go to help"); Director::getInstance()->replaceScene(GameHelp::createScene());//跳转到帮助场景 }); mi02->setPosition(Point(100,150)); //结束游戏 auto mi03 = MenuItemLabel::create(labelexit,[](Ref* sender) { CCLOG("exit the game"); Director::getInstance()->end();//退出游戏 }); mi03->setPosition(Point(100,50)); auto pMenu = Menu::create(mi01,mi02,mi03, NULL); pMenu->setPosition(Point::ZERO); this->addChild(pMenu, 1);
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>