Cocos2d-x学习入门之HelloWorld程序

一、前言:

Cocos2d-x是目前非常流行的开源移动2D游戏框架。本文HelloWorld示例程序中使用的Cocos2d-x版本是2.0,主要实现一个简单的入门程序。

二、HelloWorld程序:

HelloWorld程序是很多编程语言的入门程序,对于程序员来说非常重要。
打开本文项目后可以看到AppDelegate.h/.cpp和HelloWorldScene.h/.cpp四个文件,比一般初学编程看到的HelloWorld要稍显复杂。

具体代码如下:

#include "AppDelegate.h"
#include "HelloWorldScene.h"
USING_NS_CC;
AppDelegate::AppDelegate() {
}
AppDelegate::~AppDelegate()
{
}
bool AppDelegate::applicationDidFinishLaunching() {
  // 初始化CCDirector对象
  CCDirector* pDirector = CCDirector::sharedDirector();
  // 初始化CCEGLView对象,CCEGLView是显示窗口,负责窗口级别的功能管理和实现,包括坐标和缩放管理、画图工具、按键事件
  CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
  // 将pEGLView传递给pDirector
  pDirector->setOpenGLView(pEGLView);
  // 打开状态显示,包括FPS等
  pDirector->setDisplayStats(true);
  // 设置FPS,每秒刷新多少帧画面,默认是1秒60帧,帧数越高画面越流畅,但也越耗电
  pDirector->setAnimationInterval(1.0 / 60);
  // 创建一个HelloWorld场景,能够自动释放
  CCScene *pScene = HelloWorld::scene();
  // 运行HelloWorld场景
  pDirector->runWithScene(pScene);
  return true;
}
// 来电或者应用进入手机后台将调用此方法
void AppDelegate::applicationDidEnterBackground() {
  // 停止所有动画
  CCDirector::sharedDirector()->stopAnimation();
  // 如果使用了SimpleAudioEngine(控制背景音乐等),在此处调用暂停
  // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
// 当应用从后台恢复至前台将调用此方法
void AppDelegate::applicationWillEnterForeground() {
  // 恢复所有动画
  CCDirector::sharedDirector()->startAnimation();
  // 在此处调用SimpleAudioEngine的恢复
  // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

AppDelegate对Cocos2d-x引擎进行了初始化,并对进行一些全局性的设置。
但是在这个里面并没有看到具体的界面实现,因为界面实现都在HelloWorldScene中。

#include "HelloWorldScene.h"
USING_NS_CC;
CCScene* HelloWorld::scene()
{
  // 创建一个Scene
  CCScene *scene = CCScene::create(); 

  // 创建一个HelloWorld的图层(HelloWorld继承自CCLayer)
  HelloWorld *layer = HelloWorld::create(); 

  // 将创建的HelloWorld图层添加至之前创建的场景中
  scene->addChild(layer); 

  // 返回创建的场景
  return scene;
} 

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
  /////////////////////////////
  // 1. 调用父类的初始化,如果初始化失败,则不会继续往下执行
  if ( !CCLayer::init() )
  {
    // 返回false表示初始化失败
    return false;
  }
  //获取可显示区域大小
  CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  //获取可显示区域坐标起点
  CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
  /////////////////////////////
  // 2. 添加一个可点击的菜单按钮,点击后关闭程序
  // 创建一个图片菜单选项
  CCMenuItemImage *pCloseItem = CCMenuItemImage::create(// 调用创建方法
                    "CloseNormal.png",// 设置未点击时菜单图片
                    "CloseSelected.png",// 设置点击时候菜单图片
                    this,// ?这个参数是什么
                    menu_selector(HelloWorld::menuCloseCallback));// 设置菜单点击时间的回调监听
  // 设置菜单的位置坐标,pCloseItem->getContentSize()用来获取菜单选项大小
  pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,
                origin.y + pCloseItem->getContentSize().height/2));
  // 创建菜单(菜单选项需要添加到菜单里才能使用),create函数中可以添加多个菜单选项,以NULL结束添加
  CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
  // 设置菜单的坐标(CCPointZero是坐标(0,0))
  pMenu->setPosition(CCPointZero);
  // 将菜单添加至HelloWorld图层中,1是菜单在HelloWorld图层中Z轴位置,数值越大,显示的层级越高,不易被遮挡
  this->addChild(pMenu, 1);
  /////////////////////////////
  // 3. 添加文字控件和背景图片
  // 创建一个文件控件,create函数中参数分别是“控件需要显示的文字”,“控件文字字体”,“控件文字字号”
  CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);
  // 设置文件控件位置(此公式计算的位置为屏幕中央)
  pLabel->setPosition(ccp(origin.x + visibleSize.width/2,
              origin.y + visibleSize.height - pLabel->getContentSize().height));
  // 将文字控件添加至HelloWorld图层中
  this->addChild(pLabel, 1);
  // 创建一个精灵(后续将介绍精灵的具体用处,这里精灵是背景图片的载体)
  CCSprite* pSprite = CCSprite::create("HelloWorld.png"); 

  // 设置背景图片位置(此公式计算的位置为屏幕中央)
  pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
  // 将背景图片添加至HelloWorld图层中,并设置Z轴为0,置于菜单和文字之下
  this->addChild(pSprite, 0);
  // 返回true表示初始化成功
  return true;
}
// 关闭按钮的回调函数,pSender传递的是调用了该函数的对象
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// 宏定义,判断是否是WinRT或者WP8设备
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
  // 弹出对话框,提示文字信息
  CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
  // 调用CCDirector的end()函数,结束游戏
  CCDirector::sharedDirector()->end();
// 宏定义,判断是否是IOS设备
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
  // 直接调用exit(0)结束游戏
  exit(0);
#endif
#endif
}

HelloWorldScene文件是整个HelloWorld工程的核心,从代码中我们不难发现,在Cocos2d-x的坐标系计算中,默认将屏幕左下角设置为坐标原点,向上方和右方递增Y轴X轴。而设置控件位置的时候,是以控件的中心为锚点,当然,锚点是可以通过代码改变的,这里我们需要调用setAnchorPoint()函数。

希望本文所述实例对于大家学习Cocos2d-x能起到一定的帮助作用。

(0)

相关推荐

  • 用于cocos2d-x引擎(ndk)中为android项目生成编译文件列表

    复制代码 代码如下: package com.leeass.generate; import java.io.File;import java.io.FileFilter;import java.io.FileNotFoundException; /** * 用于cocos2d-x引擎中android项目编译文件列表生成 * @author leeassamite * */public class GenerateAndroidMakefile { /** 分隔符 */ private stat

  • Cocos2d-x 3.0多线程异步加载资源实例

    Cocos2d-x从2.x版本到上周刚刚才发布的Cocos2d-x 3.0 Final版,其引擎驱动核心依旧是一个单线程的"死循环",一旦某一帧遇到了"大活儿",比如Size很大的纹理资源加载或网络IO或大量计算,画面将 不可避免出现卡顿以及响应迟缓的现象.从古老的Win32 GUI编程那时起,Guru们就告诉我们:别阻塞主线程(UI线程),让Worker线程去做那些"大活儿"吧. 手机游戏,即便是休闲类的小游戏,往往也涉及大量纹理资源.音视频资

  • Win7上搭建Cocos2d-x 3.1.1开发环境

    开发工具的准备 搭建开发环境需要安装工具包括 Visual Studio python ---(本教程以python2.7.3版本为例),下载地址:http://www.python.org/download/releases/2.7.3/. Cocos2d-x ---(本教程以cocos2d-x-3.0版本为例),下载地址:http://www.cocos2d-x.org/download/version#Cocos2d-x . 安装配置过程 Visual Studio 的安装过程这里就不介绍

  • Cocos2d-x入门教程(详细的实例和讲解)

    智能终端上的游戏目前风头正劲,试问哪个智能手机上没有几款企鹅公司出品的游戏呢!之前从未涉猎过游戏开发,但知道游戏开发前要挑选一款合适的游戏引擎,自己从头开始敲代码的时代已经out了.在寻觅游戏引擎之前,我需要回答三道摆在我面前的选择题: 1.2D引擎还是3D引擎?    2.平台专用引擎还是跨平台引擎?    3.收费引擎还是开源引擎? 作为入门级选手,2D游戏显然更适合上手一些,另外适合果果这个年龄段的幼教类的游戏也多以2D游戏居多.3D游戏本身也太难了,不仅要 Programming能力,还

  • Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决

    给自己的手机游戏增加些社交分享功能,有助于游戏宣传和提升知名度,是一种不错的社交营销手段.国内这方面的第三方插件有不少,比如ShareSDK.友 盟分享组件.Baidu分享组件等,之前在研究2.2.2版本时,集成了ShareSDK这个组件,这次迁移到Cocos2d-x 3.0rc2依旧选择集成ShareSDK,这里就来说说集成的过程,遇到的一些问题以及解决方法.这里仅以Android平台游戏集成为例. 一.功能描述.SDK版本和帐号准备 功能大致是这样的:在游戏中设置一个按钮,点击这个按钮,弹出

  • Cocos2d-x的内存管理总结

    Cocos2d-x引擎的核心是用C++编写的,那对于所有使用该引擎的游戏开发人员来说,内存管理是一道绕不过去的坎. 关于Cocos2d-x内存管理,网上已经有了许多参考资料,有些资料写的颇为详实,因为在内存管理这块我不想多费笔墨,只是更多的将思路描述清楚. 一.对象内存引用计数 Cocos2d-x内存管理的基本原理就是对象内存引用计数,Cocos2d-x将内存引用计数的实现放在了顶层父类CCObject中,这里将涉及引用计数的CCObject的成员和方法摘录出来: 复制代码 代码如下: clas

  • 从Cocos2d-x2迁移到Cocos2d-x3的过程分享

    核心代码迁移相对顺利,大致流程如下: 一.创建项目 1) cd cocos2d-x-3.0rc0:    2) 执行setup.py,设置引擎依赖的环境变量,脚本会将COCOS_CONSOLE_ROOT和ANT_ROOT写入到~/.bash_profile中: 执行source ~/.bash_profile使得环境变量生效:    3) 在cocos2d-x-3.0rc0下建立projects目录:    4) 利用cocos2d-console工具建立新项目: cocos new GameD

  • Cocos2d-x学习入门之HelloWorld程序

    一.前言: Cocos2d-x是目前非常流行的开源移动2D游戏框架.本文HelloWorld示例程序中使用的Cocos2d-x版本是2.0,主要实现一个简单的入门程序. 二.HelloWorld程序: HelloWorld程序是很多编程语言的入门程序,对于程序员来说非常重要. 打开本文项目后可以看到AppDelegate.h/.cpp和HelloWorldScene.h/.cpp四个文件,比一般初学编程看到的HelloWorld要稍显复杂. 具体代码如下: #include "AppDelega

  • JSP入门之HelloWorld程序实例

    本文实例讲述了JSP入门之HelloWorld程序.分享给大家供大家参考,具体如下: 这里讲述第一个JSP-HelloWorld!每一次的"初恋"都带着神秘感,揭开JSP神秘的面纱! JSP也是j2ee的一个规范. JSP(java  service Page),是由sun公司倡导.许多公司参与一起建立的动态网页技术标准. JSP与html的区别是在网页中嵌入java代码和JSP标记,形成.jsp的文件. JSP开发的web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运

  • Android编程入门之HelloWorld项目目录结构分析

    本文实例讲述了Android编程入门之HelloWorld项目目录结构.分享给大家供大家参考,具体如下: 我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Android项目的目录结构.本文的主要主题如下: 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.assets 1.5.res文件夹 1.6.AndroidManifest.xml 1.7

  • Android中利用xml文件布局修改Helloworld程序

    Android环境布置完毕,直接就是一个Helloworld程序,详情请看<利用adt-bundle轻松搭建Android开发环境与Hello world(Linux)>这使得很多人难以理清整个Android项目的基本结构.其实安卓项目,与其它Java工程的项目,SSH.Servlet等,都是采取Java与XML文件联合的方式,形成一个工程的. 有几个文件是需要熟知的.如下图: MainActivity.java是整个安卓工程的入口, 其中,里面的protected void onCreate

  • 手把手带你入门微信小程序新框架Kbone的使用

    Kbone 框架 前些天在微信上收到了微信开发者公众号的文章推送<揭开微信小程序Kbone的神秘面纱>,心想:微信小程序有新框架了?抱着学习的态度点进去看了一眼,看过之后觉得这框架也太宠开发者了吧,不愧是微信团队出品. 原来这个框架早在去年就已经发布了,看完只恨自己没有早点知道消息开始学习这个框架.我写本文的目的也是为了跟个风,想要让更多的人能够知道这个框架,感受它的便利,希望好学的你可以停下脚步看看~ Kbone 是什么? 看到这里我也不多说了,简单介绍一下 Kbone 是什么.用官方高大上

  • 易语言编程入门第一个程序

    目录 易语言的优点: 最早接触易语言是三年前的事情了,那时候是因为DNF这个游戏我才知道了易语言这个编程语言,当时对他就非常的憧憬.只不过那时候易语言的学习资源比较少,而且自身的学业比较重就没有仔细的了解了. 最近几日再回归DNF的时候突然想到了易语言,所以决定抽点空闲时间学习一下,先定一个小目标:做一个DNF的辅助工具!(也许最终都无法完成也说不定) 这是第一天学习的内容 易语言的优点: 1.     代码是中文的,降低了学习的门槛 2.     全可视化编程,即输即画减少了代码出错的可能 3

  • Python-OpenCV深度学习入门示例详解

    目录 0. 前言 1. 计算机视觉中的深度学习简介 1.1 深度学习的特点 1.2 深度学习大爆发 2. 用于图像分类的深度学习简介 3. 用于目标检测的深度学习简介 4. 深度学习框架 keras 介绍与使用 4.1 keras 库简介与安装 4.2 使用 keras 实现线性回归模型 4.3 使用 keras 进行手写数字识别 小结 0. 前言 深度学习已经成为机器学习中最受欢迎和发展最快的领域.自 2012 年深度学习性能超越机器学习等传统方法以来,深度学习架构开始快速应用于包括计算机视觉

  • React组件化学习入门教程讲解

    目录 模块化 模块 模块化 组件化 组件 组件化 函数式组件 创建函数组件 Props参数传递(重点) 复合函数组件 类式组件 创建实例 用户自定义组件 模块化 模块 理解:向外提供特定功能的js程序,一般就是一个js文件. 为什么:要拆成模块,随着业务逻辑增加,代码越来越多且复杂. 作用:复用js,简化js的编写,提高js运行效率. 模块化 当应用的js都以模块来编写,这个应用就是一个模块化的应用 组件化 组件 理解:用来实现局部功能效果的代码和资源的集合(html/css/js/img等等)

  • node.js入门实例helloworld详解

    本文实例讲述了node.js入门实例helloworld.分享给大家供大家参考,具体如下: 将下面的代码保存为:server.js存到E盘下面的node目录中. var http = require('http'); function myNode(request, response){ response.writeHead(200, {'Content-type':'text/plain'}); response.write('hello world'); //hello world resp

  • 深度学习入门之Pytorch 数据增强的实现

    数据增强 卷积神经网络非常容易出现过拟合的问题,而数据增强的方法是对抗过拟合问题的一个重要方法. 2012 年 AlexNet 在 ImageNet 上大获全胜,图片增强方法功不可没,因为有了图片增强,使得训练的数据集比实际数据集多了很多'新'样本,减少了过拟合的问题,下面我们来具体解释一下. 常用的数据增强方法 常用的数据增强方法如下: 1.对图片进行一定比例缩放 2.对图片进行随机位置的截取 3.对图片进行随机的水平和竖直翻转 4.对图片进行随机角度的旋转 5.对图片进行亮度.对比度和颜色的

随机推荐