不知道各位有没有用最新的2.2引擎把游戏移植到wp8上去,这些天一直在研究这个,确实麻烦,问题多多,所以想后面还是得多多分享一下移植windows phone 8的过程中一些问题。
我在提交到windows phone应用商店的时候,有一款游戏没有审核通过,给我的错误报告就指出,返回键没有处理,需要给玩家一些信息提示才行,于是我就一脸黑线,然后就无语了,其实我也没想到会有这个问题。
在cocos2dx里面,针对ios和android平台提供了相应的 keyBackClicked和keyMenuClicked 的处理函数,去响应返回back键和菜单home键,原本以为这个也是支持wp8平台的,但是测试了一下没有效果,即使使用了平台选择,这样:
void HelloWorld::keyBackClicked() { #if(CC_TARGET_PLATFORM==CC_PLATFORM_WP8) { //doThings(); } #endif }
按了返回键也是基本无解的,还是会被强行关闭的。
由于我没有接触过windows phone开发,完全不懂微软的这一套开发,所以只好查了一下api,百度了一下,逛了一下论坛,在cocos2dx的论坛里,确实也有人提问到这个问题,不过没有人给出解决方案,网上一搜也是一大堆原生的返回键监听。cocos2dx这一套已经很成熟了,不可能这个问题没有考虑到,所以只有再重新从解决方案中寻找方法。
后来在这里找到了答案,在自己项目中,有一个同项目名的cpp文件
确实,没有好好看过这个cpp文件,刚做移植的时候只想匆匆让它跑起来,没有深究这里面的代码组成。在这cpp文件里面,有一个方法就是专门解决返回键监听的问题。
如果文件没有修改过,应该在108行可以看到这样的一个方法
void FirstGame::OnBackButtonPressed(Object^ sender, BackPressedEventArgs^ args) { // Leave args->Handled set to false and the app will quit when user presses the back button on the phone }
方法中的注释说明的很清楚,只要args->Handled为false,那么按返回键程序就会退出了,当然这个默认是为false的
比如我们想在游戏中让其按返回键不退出游戏,只需要设置成true即可
void FirstGame::OnBackButtonPressed(Object^ sender, BackPressedEventArgs^ args) { args->Handled = true; }
当然这样是不行的,游戏会在各个场景都没法按返回键退出的,所以最好的办法就是用一个单例,如果场景处在游戏主菜单界面的时候,按返回键有响应,其他状态就无响应
void FirstGame::OnBackButtonPressed(Object^ sender, BackPressedEventArgs^ args) { if(游戏为主菜单) { args->Handled = true; //doThings(); } else args->Handled = false; }
这样就可以啦~