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)
{}
Cocos2dx学习报告2的更多相关文章
- Linux内核分析第一次学习报告
Linux内核分析第一次学习报告 学生 黎静 学习内容 1.存储程序计算机工作模型 冯诺依曼体系结构:核心思想为存储程序计算机. CPU抽象为for循环,总是执行下一条指令,内存保存指令和数据,CPU ...
- 关于对Access数据库的学习报告
学习Access数据库的报告 一.前言 一开始我对access一窍不通,甚至不知道它是干什么的,后来经过网上资料的查阅对它略有了解.microsoft office access是由微软发布的关联式数 ...
- 《Linux内核分析》第二周学习报告
<Linux内核分析>第二周学习报告 ——操作系统是如何工作的 姓名:王玮怡 学号:20135116 第一节 函数调用堆栈 一.三个法宝 二.深入理解函数调用堆栈 三.参数传递与局部变量 ...
- 《Linux内核分析》第三周学习报告
<Linux内核分析>第三周学习报告 ——构造一个简单的Linux系统MenuOS 姓名:王玮怡 学号:201351 ...
- 201621123018《Java程序设计》第1周学习报告
1.<Java程序设计>第1周学习报告 1.本周学习报告 关键字:Java的发展.Java语言的特点.JDK.JRE.JVE.Java开发工具.Java环境配置.Java是一种面向对象的程 ...
- [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND
原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...
- [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND
原文:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUA ...
- 基于Cocos2d-x学习OpenGL ES 2.0之多纹理
没想到原文出了那么多错别字,实在对不起观众了.介绍opengl es 2.0的不多.相信介绍基于Cocos2d-x学习OpenGL ES 2.0之多纹理的,我是独此一家吧.~~ 子龙山人出了一个系列: ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)
在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...
随机推荐
- WPF原生环形图表
原文:WPF原生环形图表 版权声明:欢迎转载.转载请注明出处,谢谢 https://blog.csdn.net/wzcool273509239/article/details/56480963 主要利 ...
- JS DOM 实例(5大常用实例)
第1个实例:循环单击变色 <html lang="en"> <head> <meta charset="UTF-8"> &l ...
- linux内核(五)虚拟文件系统
虚拟文件系统(VFS)是linux内核和具体I/O设备之间的封装的一层共通访问接口,通过这层接口,linux内核可以以同一的方式访问各种I/O设备. 虚拟文件系统本身是linux内核的一部分,是纯软件 ...
- SQL SERVER-安装和卸载
卸载后无法正常安装SQL SERVER 删除了本机的SQL SERVER以后,我发现我本机的SQL SERVER 再也安装不上了,这个一个比较严重的问题,要每天定时备份数据库到指定的地方才能防止数据丢 ...
- jms及active(jdk api)的实现
在企业中,分布式的消息队列需要实现的问题: 1.不同的业务系统分别处理同一个消息(订阅发布),同一个业务系统负载处理同一类消息(队列模式) 2.消息的一致性问题,在互联网公司中一般不要求强一致性,一般 ...
- java中StringBuilder、StringBuffer、String类之间的关系
今天在CSDN的高校俱乐部里看到了"Java基础水平測试(英文)".感觉自己学了java这么久,想看下自己的java水平究竟是个什么样.測试结果就不说了,反正是慘不忍睹. 看了一下 ...
- Android使用有道翻译API实如今线翻译功能
在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API. 使用有道翻译API.首先要申请一个key,申请地址为:path=data-mode">有道翻译API申请地址 ...
- JAVA设计模式之【代理模式】
代理模式 通过代理对象间接访问 代购 客户端不想或者不能直接访问一个对象,可以通过一个称为代理的第三者来实现间接访问,该方案称为代理模式 角色 抽象主题角色Subject 声明真实主题类与代理类的公共 ...
- m_Orchestrate learning system---十三、thinkphp的验证器支持多语言么
m_Orchestrate learning system---十三.thinkphp的验证器支持多语言么 一.总结 一句话总结:支持,不仅验证器支持,其它的插件应该都支持 不仅thinkphp支持多 ...
- tensorfllow MNIST机器学习入门
MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...