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头文件:

#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);
	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1