zoukankan      html  css  js  c++  java
  • Cocos2dx学习报告2

    记录二:创建项目,其名曰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:
    	/************************************************************************/
    	/*点击button跳转到游戏场景的回调,这个跳转我们是先跳转到GameScene中。然后GameScene中的GameLayer来展示GameScene的内容。这样就形成点击button開始游戏的感觉                                                                */
    	/************************************************************************/
    	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);
    	
    	//定义一个文字button来实现点击跳转
    	CCMenuItemLabel *pButton = CCMenuItemLabel::create(CCLabelTTF::create("Start Game", "Arial", 25), this, menu_selector(StartLayer::gotoGame));
    	/************************************************************************/
    	/* 关于button,我这里是通过Menu+MenuItem来实现一个button的。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) {}




  • 相关阅读:
    智器SmartQ T7实体店试用体验
    BI笔记之SSAS库Process的几种方案
    PowerTip of the Day from powershell.com上周汇总(八)
    PowerTip of the Day2010071420100716 summary
    PowerTip of the Day from powershell.com上周汇总(十)
    PowerTip of the Day from powershell.com上周汇总(六)
    重新整理Cellset转Datatable
    自动加密web.config配置节批处理
    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable
    在VS2003中以ClassLibrary工程的方式管理Web工程.
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7054372.html
Copyright © 2011-2022 走看看