• 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) {}




  • 相关阅读:
    关于hibernate中多对多关系
    选择排序
    Offer是否具有法律效力?
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    序列相关的趣题 之三
    windows的定时任务设置
    Maven pom.xml 配置详解
    PS 图像特效-非线性滤波器
    PS 滤镜算法原理——拼贴
    PS 滤镜算法原理——曝光过度
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7054372.html
Copyright © 2020-2023  润新知