基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行

一、版本迁移中的问题

1.游戏元素Sprite、Label、Action等等的创建函数名都改为create。

2.函数的回调
callfunc_selector
callfuncN_selector
callfuncND_selector
callfuncO_selector
menu_selector
改为使用C++11的新特性std::bind和std::function配合使用:
CC_CALLBACK_0
CC_CALLBACK_1
CC_CALLBACK_2
CC_CALLBACK_3

MenuItemLabel *pauseItem = MenuItemLabel::create(
Label::create("pause", "Adobe Ming Std L", ),
this,
menu_selector(MyLayer::menuPauseCallback)); MenuItemLabel *pauseItem = MenuItemLabel::create(
Label::create("pause", "Adobe Ming Std L", ),
CC_CALLBACK_1(MyLayer::menuPauseCallback,this));

3.内部类名都去掉了前缀CC,使用 clone 替代 copy,单例类采用了 getInstance 和 destroyInstance,使用了 Ref 代替了 Object,这是因为cocos2dx官方的去OC化行为

4.模板容器
使用 cocos2d::Map<> 替代了 CCDictionary ;

使用 cocos2d::Vector<> 替代了 CCArray;

5.LabelTTF / LabelBMFont / LabelAtlas三种标签类被合并成一个类Label:

 //Label
Label* Label1 = Label::createWithSystemFont("","YouYuan",);
Label* Label2 = Label::createWithTTF("","YouYuan",);
Label* Label3 = Label::createWithBMFont("font/font.fnt","");

6.消息的处理方式都改为触发器模式:

         // 键盘消息可用
auto listenerKey = EventListenerKeyboard::create();
listenerKey->onKeyPressed = CC_CALLBACK_2(PlaneWarGame::onKeyPressed, this);
listenerKey->onKeyReleased = CC_CALLBACK_2(PlaneWarGame::onKeyReleased, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listenerKey, this);

7.将所有标记为废弃的API替换为新的API,消除项目编译过程中的警告。

二、移植到Android平台

最初移植到Android平台时是这个样子的:

基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行

原因是Android手机分辨率太大了,修改AppDelegate::applicationDidFinishLaunching() 函数即可:

 static cocos2d::Size largeSize = cocos2d::Size(,);
static cocos2d::Size designResolutionSize = cocos2d::Size(, ); bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create("planeGame");
// mi3手机分辨率:1920x1080
glview->setFrameSize(largeSize.width,largeSize.height);
director->setOpenGLView(glview);
glview->setDesignResolutionSize(, , ResolutionPolicy::NO_BORDER);
} director->setContentScaleFactor(0.5f); // turn on display FPS
director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this
director->setAnimationInterval(1.0 / ); // create a scene. it's an autorelease object
auto scene = PlaneWarMenu::scene(); // run
director->runWithScene(scene); return true;
}

改完之后,游戏就可以更好的适配Android屏幕了。

基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行

上一篇:怎样在Android开发中FPS游戏实现的两种方式比较


下一篇:【第四篇章-android平台MediaCodec】解决Observer died. Quickly, do something, ... anything...