展会信息港展会大全

Cocos2d-x学习入门之HelloWorld程序
来源:互联网   发布日期:2015-09-28 10:48:17   浏览:2346次  

导读: 一、前言: Cocos2d-x是目前非常流行的开源移动2D游戏框架。本文HelloWorld示例程序中使用的Cocos2d-x版本是2.0,主要实现一个简单的入门程序。 二、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能起到一定的帮助作用。

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港