[Cocos2d-x For WP8]Hello world

Cocos2d-x For WP8使用C++开发,使用cocos2d-xv0.13同样的接口,Cocos2d-x For WP8的相关项目代码可以从下面的网址下载到:

https://github.com/cocos2d-x/cocos2dx-win8/tree/wp8

http://cocos2d-x.googlecode.com/files/cocos2dx-0.13.0-wp8-0.8.zip

打开了项目中的Hello World项目我们可以看到下面的项目结构,这里我把多余的东西删除掉了。

图片:

那么在WP8里面的Cocos2d-x框架其实还是要基于WP8的DirectX进行封装而成的,然后映射到了Cocos2d-x框架相关的接口。

(1)程序的入口

在这个项目里面我们先来关注下cocos2dorig.cpp文件,这里封装了程序的入口相关的信息,main方法就是程序的入口。在这个程序入口里面把原来的WP8的DirectX的初始化方法注释掉了,换成了Cocos2d-x所封装的程序实例AppDelegate类。

//游戏的入口
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^)
{
//auto direct3DApplicationSource = ref new Direct3DApplicationSource();
//CoreApplication::Run(direct3DApplicationSource);
//创建程序的实例
AppDelegate App;
auto frameworkViewSource = ref new CCApplicationFrameworkViewSource();
Windows::ApplicationModel::Core::CoreApplication::Run(frameworkViewSource); return ;
} ref class CCApplicationFrameworkViewSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource
{
public:
virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView()
{
//cocos2d::getSharedCCApplicationFrameworkView()封装了WP8 DirectX游戏的初始化逻辑
return cocos2d::getSharedCCApplicationFrameworkView();
}
};

(2)程序的实例

那么我们可以把AppDelegate类看作是程序的实例,因为程序的实例初始化,完成加载,程序进入休眠状态和程序回到前台的相关处理方法,类似于WP8应用程序App类的功能。

//程序初始化实例
bool AppDelegate::initInstance()
{
bool bRet = false;
do
{ #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN8_METRO) // fix bug: 16bit aligned
void* buff=_aligned_malloc(sizeof(CCEGLView),);
CCEGLView* mainView = new (buff) CCEGLView();
mainView->Create();
//mainView->setDesignResolution(480, 320);
//mainView->setDesignResolution(640, 1066);
CCLOG("Device Res:%d", m_deviceResolutionInPixels);
//根据三种分辨率创建主视图
switch (m_deviceResolutionInPixels)
{
case DeviceResolutionInPixels_WVGA:
{
mainView->setDesignResolution(, );
break;
}
case DeviceResolutionInPixels_720p:
{
mainView->setDesignResolution(, );
break;
}
case DeviceResolutionInPixels_WXGA:
{
mainView->setDesignResolution(, );
break;
}
} #endif // CC_PLATFORM_WIN8_METRO bRet = true;
} while ();
return bRet;
}
//程序启动
bool AppDelegate::applicationDidFinishLaunching()
{
// 初始化导演对象
CCDirector *pDirector = CCDirector::sharedDirector(); //设置主视图
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); // turn on display FPS
//pDirector->setDisplayFPS(false);
//设置屏幕方向
pDirector->setDeviceOrientation(CCDeviceOrientationLandscapeLeft);
// set FPS. the default value is 1.0/60 if you don't call this
//pDirector->setAnimationInterval(1.0 / 60); // 创建scene
CCScene *pScene = HelloWorld::scene(); // 用导演对象运行scene run
pDirector->runWithScene(pScene); return true; } //进入休眠
void AppDelegate::applicationDidEnterBackground()
{
CCDirector::sharedDirector()->pause();
} //从休眠回到程序
void AppDelegate::applicationWillEnterForeground()
{
CCDirector::sharedDirector()->resume();
}

(3)游戏的界面和逻辑

那么HelloWorld类就是处理我们游戏的界面和逻辑的类了,话说你可以把它当做成是MainPage类。在这里定义了默认的游戏场景。Cocos2d的游戏结构可以简单地概括为场景、层、精灵,而这两个文件就是Hello World场景的实现文件。每个游戏组件都可以添加到另一个组件中,形成层次关系,例如场景中可以包含多个层,层中可以包含多个精灵。

HelloWorldScene中定义了一个HelloWorld类,该类继承自CCLayerColor,CCLayerColor也就是继承自 CCLayer,因此HelloWorld本身是一个层。

在AppDelegate::applicationDidFinishLaunching()方法里面我们看到了调用了HelloWorld::scene()的方法,那么这个就是创建游戏的场景。

CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{ // 'scene'是一个可以自动释放的对象
scene = CCScene::create();
//创建失败跳出循环
CC_BREAK_IF(! scene);
// 'layer'是一个可以自动释放的对象
HelloWorld *layer = HelloWorld::create();
//创建失败跳出循环
CC_BREAK_IF(! layer);
// 添加layer到scene上面
scene->addChild(layer);
} while (); // 返回scene
return scene;
}

在上面的代码中我们看到了调用了HelloWorld::create()的方法,那么在HelloWorldScene.h头文件里面我们找到了该方法的定义,实际上就是调用了init()方法。

// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);
/**
* define a create function for a specific type, such as CCLayer
* @__TYPE__ class type to add create(), such as CCLayer
*/
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}

下面我们再来看看init()方法是怎么对游戏进行初始化的。

//在init方法里面初始化当前的实例
bool HelloWorld::init()
{
bool bRet = false;
do
{
//CCLayer进行初始化,初始化失败跳出循环
if ( !CCLayer::init() )
{
break;
}
//获取手机屏幕的大小
CCSize size = CCDirector::sharedDirector()->getWinSize();
//创建文字Label
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Times New Roman", );
//设置文字Label的位置
pLabel->setPosition( ccp(size.width * 0.5, size.height * 0.5) );
//设置文字Label的颜色
pLabel->setColor(ccc3(, , ));
//添加到当前的界面上
this->addChild(pLabel, );
bRet = true;
} while ();
//返回成功
return bRet;
}

游戏的运行如下图所示:

[Cocos2d-x For WP8]Hello world的更多相关文章

  1. Cocos2d-x游戏移植到WP8之路 -- c++和c#交互

    Cocos2d-x是眼下最流行的手机游戏引擎之中的一个,开源.轻量.多平台等的诸多特性使得它被非常多国内外手游开发人员所喜爱. 利用Cocos2d-x来开发Windows Phone 8的游戏相同也是 ...

  2. 【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜

    接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView . 这个名字应该是从 IOS 里的 UITableView来的,其实是跟WP8 ...

  3. [Cocos2D-x For WP8]CocosDenshion音频播放

    Cocos2D-x的音频分为长时间的背景音乐和短的音效两种,我们可以通过SimpleAudioEngine::sharedEngine()方法来获取音频播放的引擎,然后调用对音频相关的操作方法就可以了 ...

  4. [Cocos2D-x For WP8]Box2D物理引擎

    物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现.然而, ...

  5. [Cocos2d-x For WP8]EaseActions缓动动作

    我们用Silverlight框架开发WP8的应用程序的时,编写动画可以使用缓动效果来实现缓动动画对吧,那么在Cocos2d-x框架里面我们一样是可以缓动动作(缓动动画),其实技术的东西都是想通的,如果 ...

  6. [Cocos2d-x for WP8学习笔记] HelloWorld结构分析

    先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...

  7. Cocos2d-x项目移植到WP8小记

    Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...

  8. 在WP8上搭建cocos2d-x开发环境

    在WP8上搭建cocos2d-x开发环境 转自:https://github.com/koowolf/cocos-docs/blob/master/manual/framework/native/in ...

  9. cocos2d-x on wp8架构简单介绍

    1,基于C++的开发架构 支持3大移动平台以及3大桌面平台. 分为图形,声音,物理3大模块,另外还有脚本的导出. 在wp8/win32上的图形是基于d3d的,而在其它平台是基于opengl/openg ...

随机推荐

  1. Tor

    参考: http://www.douban.com/group/topic/67555786/ http://blog.sina.com.cn/s/blog_72a7ac670101km46.html ...

  2. 21.左旋转字符串[LeftRotateString]

    [题目] 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部.如把字符串AB1234 左旋转2位得到字符串1234AB.请实现字符串左旋转的函数.要求时间对长度为n的字符串操作的复杂度 ...

  3. 利用jQuery.validate异步验证用户名是否存在

    转:http://www.cnblogs.com/linzheng/archive/2010/10/14/1851781.html HTML头部引用: <script type="te ...

  4. codeforces B. Eight Point Sets 解题报告

    题目链接:http://codeforces.com/problemset/problem/334/B 一开始看到题目,有点怯,理解了题目后,其实并不难.这句话是突破口 three distinct ...

  5. 【python】format函数格式化字符串的用法

    来源:http://www.jb51.net/article/63672.htm 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式 ...

  6. OSG 初始化为非全屏窗口

    OSG默认的窗口时全屏的,调试的时候不方便. 在网上看到一段代码,可以非全屏显示 int _tmain(int argc, _TCHAR* argv[]){ osgViewer::Viewer vie ...

  7. [MAC] Mac OS X下快速复制文件路径的方法

    在windows上复制当前目录的路径有一个特别方便的方式,只需要用鼠标点击路径栏,它就会自动变成像”D:\Downloads\tmp”这样的路径,如果要复制文件路径,只需要将目录路径和文件名拼接起来即 ...

  8. [MAC] Mac下的SVN命令行

    转载自: http://www.cnblogs.com/snandy/p/4072857.html Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.1 ...

  9. 【读书笔记】读《JavaScript模式》 - 函数复用模式之类式继承模式

    实现类式继承的目标是通过构造函数Child()获取来自于另外一个构造函数Parent()的属性,从而创建对象. 1.类式继承模式#1 —— 默认方式(原型指向父函数实例) function Paren ...

  10. 原始套接字(SOCK_RAW)

    本文转载:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html,在此感谢 原始套接字(SOCK_RAW). 应用原始套接字,我 ...