cocos2d-x 开头配置(Windows 平台)中,介绍了新建工程,这篇就介绍下 cocos2d-x 的一些概念。(前提是需要有C++的面向对象的基本知识和C++11的常用知识)

层,场景,导演,精灵,菜单

打开新建的工程(不管是VS,XCODE, Eclipse对 cocos2d-x 都一样),在 Classes 下找到

AppDelegate.h  AppDelegate.cpp  HelloWorldScene.h  HelloWorldScene.cpp

暂时先不管 AppDelegate.h  AppDelegate.cpp 这两个,先看看 HelloWorldScene.h 这个文件

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__ // 引入 cocos2d-x
#include "cocos2d.h" class HelloWorld : public cocos2d::Layer
{
public:
// 创建场景的静态函数
static cocos2d::Scene* createScene(); // 初始化
virtual bool init(); // 菜单回调函数
void menuCloseCallback(cocos2d::Ref* pSender); // 添加默认的静态创建函数
CREATE_FUNC(HelloWorld);
}; #endif // __HELLOWORLD_SCENE_H__

没几行,就是定义了一个 HelloWorld 的类,继承 Layer ,而 Layer 就是 ,同样 HelloWorld 也是 ;HelloWorld 还声明四个函数(最后一个也是,后面说)。

接着看 CPP 文件前几行

#include "HelloWorldScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
// 创建场景
auto scene = Scene::create(); // 创建层 新建 HelloWorld 对象
auto layer = HelloWorld::create(); // 添加层
scene->addChild(layer); // return the scene
return scene;
}

USING_NS_CC; 使用 cocos2d-x 的命名空间,这样就不用像头文件 cocos2d::Layer 那样

scene->addChild(layer);  向场景中添加子节点

cocos2d-x 采用了类似 OC 的内存管理机制,导演,场景,层,精灵,菜单 都继承自 节点 Node 都有这个函数,还有很多其他函数。

HelloWorld::create(); 是头文件中 CREATE_FUNC(HelloWorld);  宏添加的静态函数,自动调用 init();

所以不定义 bool init(); 会编译出错。

create(); 函数是  cocos2d-x 中一个十分重要的函数 cocos2d-x 的大部分类都使用它或者衍生形式来创建对象,不能使用 new Layer();这种方式,这么做是为了引擎的内存管理能正确的工作。

接着看 初始化 函数

bool HelloWorld::init()
{
// 1. super init first
// 先调用父类的
if ( !Layer::init() )
{
return false;
}
// 导演第一次出现 获取屏幕大小
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin(); // 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// 添加个按钮
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/ ,
origin.y + closeItem->getContentSize().height/)); // 添加菜单
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu, ); // 3. add your codes below...
// 添加标题,使用字体
auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", );
// 设置位置
label->setPosition(Vec2(origin.x + visibleSize.width/,
origin.y + visibleSize.height - label->getContentSize().height));
this->addChild(label, ); //添加精灵
auto sprite = Sprite::create("HelloWorld.png");
sprite->setPosition(Vec2(visibleSize.width/ + origin.x, visibleSize.height/ + origin.y));
this->addChild(sprite, ); return true;
}

这里第一次出现导演,导演是单例, 使用

Director::getInstance();

获得惟一的对像,可以在程序任意位置使用,十分方便,导演控制着场景转换,管理游戏的开始,暂停,获取必要的系统信息,功能强大。

AppDelegate.cpp 中应用初始化完成的最后一步就是跑游戏的第一个场景

// run
director->runWithScene(scene);
下面添加按钮,菜单

auto closeItem = MenuItemImage::create(
                                       "CloseNormal.png",
                                       "CloseSelected.png",
                                       CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

auto menu = Menu::create(closeItem, NULL);

按钮的 create 三个参数分别是正常显示的图片,按钮按下时的图上,按下按钮的回调函数:

void HelloWorld::menuCloseCallback(Ref* pSender)  //回调函数的参数类型固定,定义时注意匹配
{ // 结束游戏
Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit();
#endif
}

菜单的 create 的参数是可变的,可以添加多个按钮,要以 NULL(推荐使用 nullptr)结束。

cocos2d-x 的在线API可以找到这些函数原型,cocos2d-x 的命名清晰,大部分情况下可以做到见名知意,也可以利用编译器进入到引擎内部看源码,多看这些API和源码可以加快理解引擎的机制。

添加个标题,标题是文字, Lable 是引擎中显示文字的类,这里用到的是 create 的衍生版本

auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);

三个参数分别是 显示的内容,字体和字号

auto sprite = Sprite::create("HelloWorld.png");

创建精灵,创建精灵的参数很简单就是张图片。

精灵和上面的一样都有几个创建的函数,一种是函数重载,有几个参数不同的同名函数,别一种是带有 With..  的衍生版本

精灵最大的特点在于它可以执行多种多样的动作(后面再说)

把游戏比做精彩的戏剧,精灵无疑是出场最多的演员可谓是当之无愧的主角,字体,菜单按钮时常出来跑个龙套,层则剧场中不可或缺的布景,道具,场景就是在这之下的根基,导演则在一边指挥演出。

cocos2d-x 中的基本概念的更多相关文章

  1. 如何在Cocos2D游戏中实现A*寻路算法(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  2. WebLogic 中的基本概念

    完全引用自: WebLogic 中的基本概念 WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来, ...

  3. Web开发中的主要概念

    一.Web开发中的主要概念1.静态资源:一成不变的.html.js.css2.动态资源:JavaWeb.输出或产生静态资源.(用户用浏览器看到的页面永远都是静态资源) 3.JavaEE:十三种技术的集 ...

  4. 理解SQL Server中索引的概念

    T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他   简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...

  5. PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念

    PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念 据我个人所知,windows下的cmd shell除了能够通过修改系统参数来对其中的环境变量 ...

  6. OC中协议的概念以及用法

    OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习 ...

  7. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  8. Unity编程标准导引-Unity中的基本概念-2.1界面概览

    Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...

  9. Unity编程标准导引-2.2Unity中的基本概念

    2.2Unity中的基本概念 上述介绍提到了几个概念:游戏对象.场景.资源.相机,这个小节我们来深入了解,同时进行一些实践性操作.不过首先,我们需要大概了解一下Unity的工程文件夹. 2.2.1工程 ...

  10. Mycat中的核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...

随机推荐

  1. Linux操作系统备份之一:使用LVM快照实现Linux操作系统数据的在线备份

    这里我们讨论Linux操作系统的备份. 在生产环境,客户都会要求做全系统的数据备份,用于系统崩溃后的一种恢复手段.这其中就包含操作系统数据的备份恢复. 由于是生产环境,客户都会要求备份不中断业务,也就 ...

  2. VS2010调试Qt5的相关设置

    1.windows环境,下载离线安装包安装: 2.安装Qt5 Visual Studio Add-in并安装: 3.环境变量里设置QTDIR=D:\LIB\Qt\Qt5.3.2\5.3\msvc201 ...

  3. ubuntu 在mac 的 Parallels 的分辨率问题

    安装 ubuntu系统,刚开始安装成功的时候分辨率只有800*600. 设置里面只有800*600一个选项. http://linuxbsdos.com/2014/10/31/solutions-fo ...

  4. [转] 停止支持的老版本ubuntu源列表-old-releases

    我使用的是ubuntu 9.10,在网上找了大半个月之后,今天终于找到了可用的源地址.感谢这位cgjcgs仁兄. 点击阅读原文 ubuntu的普通版本支持的时间都有限,过了支持的时间,更新源都会被停用 ...

  5. PHPwind高级伪静态规则及方法

    phpwind iis下伪静态规则[ISAPI_Rewrite]RewriteRule ^(.*)/(.*)-htm-(.*)-(.*)\.html$ $1/$2\.php\?$3=$4Rewrite ...

  6. Prince2和PMP的区别,大多数人都没有搞清楚!

    [涨姿势]Prince2和PMP的区别,大多数人都没搞清楚!   项目管理领域有2个流行的知识体系:☑ 一个是美国项目管理协会(PMI)开发的"项目管理知识体系(PMBOK,Project ...

  7. AOJ 0121: Seven Puzzle (BFS DP STL 逆向推理)(转载)

    转载自:  http://m.blog.csdn.net/blog/Enjoying_Science/42008801 题目链接:http://acm.hust.edu.cn/vjudge/probl ...

  8. linux 防火墙配置

    vi /etc/sysconfig/iptables # Generated by iptables-save v1. :: *nat :PREROUTING ACCEPT [:] :POSTROUT ...

  9. Kanzi Studio中的概念

    Kanzi Studio是Kanzi的UI编辑器,功能非常强大.在使用Kanzi Stadio之前,首先要先熟悉编辑器中的概念. Kanzi Studio中主要分project窗格,property窗 ...

  10. javascript 函数声明和函数表达式的区别(学习笔记)

    javascript中声明函数的方法有两种:函数声明式和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函 ...