快速过渡到 Universal App -- Cocos2dx 游戏移植到 Windows Phone8 之通用应用篇

Universal Windows App即通用窗口应用是微软2014年推出的最重要的技术之一。在全新8.1的Windows XAML app framework下,使用统一的 Windows 运行时和 Visual Studio IDE 同时针对所有Windows 设备进行开发(包括Windows Phone),真正做到一套代码全平台共用,极大地提高了开发效率,节省开发成本。进一步的知识大家可以参考如下链接:

Cocos2dx的最新版本提供了对于Universal Windows App(以下简称UAP)的支持。针对这个全新的开发模式,很多开发者还不是太熟悉。所以本文罗列了一些基本信息,帮助大家快速过渡。

1. Cocos2dx支持UAP的版本:

  • 3.x的话:需要3.3版本
  • 2.x的话:官网版本尚不支持UAP,需要MSOpenTech分支的2.2.5版本

2.获取支持UAP的Cocos2dx代码:

Git clone https://github.com/MSOpenTech/cocos2d-x.git

cd cocos2d-x

git checkout v2-universal

git submodule update –init

download-deps.py   (should be downloading from msopentech and not cocos2d)

 

3.系统要求:

安装 Visual Studio 2013 Update 4 

 

4.创建支持UAP工程:

方法和以前完全相同,不需要特别的步骤

3.x版本:

Cocos new -l cpp -d D:\ MyGame  MyGame 

 

2.x版本:

cd tools\project-creator

create_project.py -project MyGame -package com.foo.bar -language cpp

 

5.构建UAP工程:

proj.win8.1-universal目录下打开“xxx.sln”工程文件,根据需要的环境把XXX.Windows (Windows 8.1) 或者XXX.WindowsPhone (Windows Phone8.1) 设置为启动工程,运行即可

 

6.常见的一些问题:

问题1

问:编译后会有如下很多LinkError,如何解决?

 

2>XamlTypeInfo.g.obj : error LNK2001: 无法解析的外部符号 "public: __cdeclcocos2d::KeyBoardWinRT::~KeyBoardWinRT(void)" (??1KeyBoardWinRT\@cocos2d\@\@Q$AAA\@XZ)2>OpenGLES.obj : error LNK2001: 无法解析的外部符号 "public: __cdeclcocos2d::KeyBoardWinRT::~KeyBoardWinRT(void)" (??1KeyBoardWinRT\@cocos2d\@\@Q$AAA\@XZ)

答:必须安装Visual Studio 2013 update 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

问题2

问:UAP模式如何增加回退键处理?

答:可以按以下步骤增加HardwareButtons::BackPressed处理:

1. 在App.xaml.cpp中加入头文件:

usingnamespaceWindows::Phone::UI::Input;

 

2. 在App()中加入BackPressed处理:

App::App()

{

InitializeComponent();

Suspending += refnewSuspendingEventHandler(this, &App::OnSuspending);

Resuming += refnewEventHandler<Object^>(this, &App::OnResuming);

HardwareButtons::BackPressed += refnewEventHandler<BackPressedEventArgs^>(this, &App::HardwareButtons_BackPressed);

}

 

3.在App.xaml.h中加入HardwareButtons_BackPressed() 声明

voidHardwareButtons_BackPressed(Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ e);

 

4.在App.xaml.cpp中加入HardwareButtons_BackPressed() 定义(函数内部可以根据自己的要求修改):

void App::HardwareButtons_BackPressed(Object^ sender, BackPressedEventArgs^ e)

{

Frame^ rootFrame = dynamic_cast<Frame^>(Window::Current->Content);

if (rootFrame != nullptr&&rootFrame->CanGoBack)

{

rootFrame->GoBack();

e->Handled = true;

}

}

问题3

问:为什么UAP模式没有Master版本?

答:目前只提供Release版本

问题4

问:如何发布UAP的应用?

答:使用VSStore菜单下的商店功能

 

谢谢!

梅颖广