Cocos2d-x学习入门之HelloWorld程序_C 语言

一、前言:

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能起到一定的帮助作用。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索cocos2d-x
helloworld
,以便于您获取更多的相关知识。

时间: 2024-12-30 09:34:33

Cocos2d-x学习入门之HelloWorld程序_C 语言的相关文章

JSP入门之HelloWorld程序实例_JSP编程

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

C语言之没有main函数的helloworld示例_C 语言

几乎所有程序员的第一堂课都是学习helloworld程序,下面我们先来重温一下经典的C语言helloworl 复制代码 代码如下: /* hello.c */  #include <stdio.h>    int main()  {      printf("hello world!\n");      return 0;  }  这是一个简单得不能再单的程序,但它包含有一个程序最重要的部分,那就是我们在几乎所有代码中都能看到的main函数,我们编译成可执行文件并查看符号表

Cocos2d-x学习笔记之Hello World!_C 语言

首先我们要为vs2010安装一个cocos2d-x的插件,有了这个插件,当我们打开vs2010,单击文件->新建->项目的时候,在已安装的模板一栏就能看到cocos2d-x了,方便了我们的编写.那么这个插件在什么地方呢,由于cocos2d-x的版本不同,在有的版本中是不包含这个插件的,我已经为大家准备好了,大家单击下载就可以了(下载cocos2d-x模板插件).下载好这个插件以后,双击InstallWizardForVS2010.js就可以了,如果你是vs2012,找对应的文件,双击.然后打开

6个变态的C语言Hello World程序_C 语言

下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过. hello1.c #define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #define ______ _______(){ #define __ ______ _(0x48)_(0x65

分析C语言一个简单程序_C 语言

首先给大家一个简单的例子,让读者有个整体的认识,代码如下: #include <stdio.h> int main() { puts(""); return 0; } 函数的概念 先来看第4行代码,这行代码会在显示器上输出"".前面我们已经讲过,puts 后面要带( ),字符串也要放在( )中. 在C语言中,有的语句使用时不能带括号,有的语句必须带括号.带括号的称为函数(Function) . C语言提供了很多功能,例如输入输出.获得日期时间.文件操作等

使用C语言编写圣诞表白程序_C 语言

快到圣诞节啦,男票女票都有了嘛?没有的话,有没有喜欢的女孩子或者男孩子啊?今天就给你们分享一个圣诞节的表白程序,希望你们喜欢咯,效果是这样的: 圣诞节快到了,让我们用C语言制作一个圣诞表白程序 具体代码如下咯: // GreetingCardDemoDlg.cpp : 实现文件 // #include "stdafx.h" #include "GreetingCardDemo.h" #include "GreetingCardDemoDlg.h"

C++入门概览和尝试创建第一个C++程序_C 语言

C++程序的构成和书写形式1) 一个C++程序可以由一个程序单位或多个程序单位构成.每一个程序单位作为一个文件.在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元. 2) 在一个程序单位中,可以包括以下几个部分: 预处理命令.上节4个程序中都包括#include命令. 全局声明部分(在函数外的声明部分).在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义. 函数.函数是实现操作的部分,因此函数是程序中必须有的和最基本的组成部分.每一个程序必须包括一个或

如何利用Emacs来调试C++程序_C 语言

俗话说,Emacs是神的编辑器,而Vim是编辑器之神.高手程序员都是用这两样神器进行开发.本人觉得,Emacs之所以厉害,是因为许多在其他编辑器下必须用鼠标点选很多步的操作,在Emacs下都可以通过键盘来完成.大大地节省了你在显示器上找按钮的时间.Emacs在Linux上运行感觉比windows流畅些,用Emacs编辑程序时,手基本不用离开键盘,就可以完成所有的工作.那么今天就让我们看看如何利用Emacs来调试C++程序. 一.安装Emacs和GCC 下载地址:Emacs:http://www.

用VC++6.0的控制台实现2048小游戏的程序_C 语言

首先感谢这位大侠的无私分享,仔细学习这个程序以后收获很多,试着添加一些注释 源程序是从开源中国看到的,原作者是 刘地(sir?) 地址为http://www.oschina.net/code/snippet_593413_46040 geek_monkey于2015年3月5日为拜读该程序,受益匪浅 为了方便自己,以及更多初学者阅读,我试着写了写了注释供参考 我是C语言初学者,如有错误希望指正.轻喷 复制代码 代码如下: #include <stdlib.h> #include <stdi