Cocos2dx学习报告2

来源:互联网 发布:reactnative native.js 编辑:程序博客网 时间:2024/05/21 14:00

记录二:创建项目,其名曰DFJ(仿照微信打飞机)

上一个记录我们说到开发环境的配置以及怎样去建立自己的项目。现在我们就通过之前说所的方法来建立一个项目。这里我就不再截图了。

建立了自己的项目之后,我们就可以开始动工编写自己的代码了。这里我不对已有的HelloWorldScene的文件做修改。我们自己建立自己的场景来开始我们自己的游戏之旅。

首先在这里说明一下,由于后面多是代码编写的工作,所以后面的记录多数会用代码的形式展示给大家,需要记录的地方我会通过注释来向大家说明。

----------本次记录的任务—完成开始场景,开始界面已经开始界面到游戏界面的跳转。----------

在代码开始之前,我来简单说一下这个实例游戏的大体框架结构,如下图。


StartScene.h

/************************************************************************//* 开始场景                                                                     *//************************************************************************/#ifndef _StartScene_h_#define _StartScene_h_/************************************************************************//* 引入需要用到的头文件                                                                     *//************************************************************************/#include "cocos2d.h"#include "cocos-ext.h"#include "StartLayer.h"//开始界面/************************************************************************//* 添加要用到命名空间                                                                     *//************************************************************************/using namespace cocos2d;using namespace cocos2d::extension;/************************************************************************//* 开始场景,游戏的第一个场景,继承CCScene                                                                     *//************************************************************************/class StartScene:public CCScene{public:/************************************************************************//* StartScene的构造                                                                     *//************************************************************************/StartScene(void);/************************************************************************//* StartScene的析构                                                                     *//************************************************************************/virtual ~StartScene(void);/************************************************************************//* StartScene的初始化,返回false则表示初始化失败,true则表示成功                                                               *//************************************************************************/virtual bool init();/************************************************************************//* 使我们能够通过StartScene::create()方法来创建scene                                                                     *//************************************************************************/CREATE_FUNC(StartScene);protected:private:};#endif

StartScene.cpp

#include "StartScene.h"/************************************************************************//* 构造函数,在这里我们可以将一些需要赋初值的全局变量进行赋初值的操作                                                                     *//************************************************************************/StartScene::StartScene(void){}/************************************************************************//* 析构函数,在这个场景消亡的时候会进入这个函数                                                                     *//************************************************************************/StartScene::~StartScene(void){}/************************************************************************//* 初始化函数,在这个函数里我们可以进行一些界面上控件的初始摆放                                                                     *//************************************************************************/bool StartScene::init(){bool bRet = false;/************************************************************************//* 因为StartScene继承自CCScene,这里进行一个CCScene初始化的判断来判断StartScene能不能成功创建                                                                     *//************************************************************************/if (!CCScene::init()){/*如果CCScene初始化失败,则表示StartScene将不会成功创建,则返回false*/return bRet;}/*这里我们来打个Log来看我们是不是尽到了StartScene*/CCLog("Now,I'm in StartScene!");/*CCScene初始化成功后,我们可以继续后面的操作来进行StartScene的设计*/bRet = true;/*根据我之前说的大体框架结构,scene下添加layer,这里我们将添加StartLayer,他是开始场景中的主角,开始场景界面上显示的控件都来自他*///获取屏幕窗体的大小,便于一些控件的定位CCSize Winsize = CCDirector::sharedDirector()->getWinSize();CCLayer *pstartLayer = StartLayer::create();pstartLayer->setPosition(ccp(Winsize.width/2,Winsize.height/2));//给Layer进行设置位置,为以后的一些处理做准备addChild(pstartLayer);return bRet;}


StartLayer.h

/************************************************************************//* 游戏开始界面,是游戏场景的内容展示,即游戏开始场景中所看到的控件都是在这里面摆放,事件的触发与处理都是在这里面进行的         *//************************************************************************/#ifndef _StartLayer_h_#define _StartLayer_h_//头文件引入#include "cocos2d.h"#include "cocos-ext.h"//命名空间using namespace cocos2d;using namespace cocos2d::extension;/************************************************************************//* 游戏的开始界面,继承自CCLayer                                                                     *//************************************************************************/class StartLayer:public CCLayer{public:StartLayer(void);//构造virtual ~StartLayer(void);//析构virtual bool init();//初始化CREATE_FUNC(StartLayer);/************************************************************************//* 屏幕触摸事件,这里我写的是多点触摸的触摸事件,分别有Began(开始)、Moved(移动)、Ended(结束)、Canceled(取消,这个事件我不怎么用,所以下面代码中我没有写)                                                            *//************************************************************************/virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);//触摸开始virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);//触摸移动virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);//触摸结束protected:private:/************************************************************************//*点击按钮跳转到游戏场景的回调,这个跳转我们是先跳转到GameScene中,然后GameScene中的GameLayer来展示GameScene的内容,这样就形成点击按钮开始游戏的感觉                                                                *//************************************************************************/void gotoGame(CCObject *pSender);};#endif


StartLayer.cpp

#include "StartLayer.h"StartLayer::StartLayer(void){}StartLayer::~StartLayer(void){}bool StartLayer::init(){bool bRet = false;if (!CCLayer::init()){return bRet;}bRet = true;CCLog("Now,I'm in StartLayer!");//这个页面我们写的是多点触控,所以要开启以下代码开能相应页面的触摸事件setTouchEnabled(true);//定义一个文字按钮来实现点击跳转CCMenuItemLabel *pButton = CCMenuItemLabel::create(CCLabelTTF::create("Start Game", "Arial", 25), this, menu_selector(StartLayer::gotoGame));/************************************************************************//* 关于按钮,我这里是通过Menu+MenuItem来实现一个按钮的。MenuItem可以独自被添加到Layer上,如果那样做的话MenuItem的回调事件将不会被响应,塔就如同一个CCSprite一样了。但是如果将MenuItem添加到Menu上在把Menu添加到Layer上,MenuItem的回调就可以被响应。需要注意的是,MenuItem添加到了Menu上就不能再把MenuItem添加到layer上了,因为那样会造成Parent不唯一,会报错的。                                                                     *//************************************************************************/CCMenu *pMenu = CCMenu::create(pButton, NULL);//将MenuItem添加到menu上,也可以先创建一个空的Menu然后再在后面addchild(menuitem)pMenu->setAnchorPoint(ccp(0,0));//设置Menu的锚点为(0,0)pMenu->setPosition(ccp(0,0));//设置Menu的坐标为(0,0)addChild(pMenu);//将Menu添加到layer上return bRet;}void StartLayer::gotoGame(CCObject *pSender){//To Do//跳转至游戏场景CCScene *pgameScene = CCScene::create();CCDirector::sharedDirector()->replaceScene(pgameScene);}void StartLayer::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent){}void StartLayer::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent){}void StartLayer::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent){}



0 0