cocos2dx-安卓多分辨率适配方案

#include "AppDelegate.h"
#include "HelloWorldScene.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
// Layer
#include "OperateLayer.h"
#include "LoginMainLayer.h"
#include "OperateUILayer.h"
#include "GameSettlementLayer.h"
#include "LoadingLayer.h"
#include "GameFileLayer.h"

#include "ResourceManager.h"
#include "SaveMemoryManager.h"
#include "TimeLogicManager.h"
#include "GameDBManager.h"
#include "EntireManage.h"
#include "TextJonsManager.h"
#include "PhpManager.h"
#include "GameConfigManager.h"

//sdk
#include "SDKConfig.h"

#include "RunGameScene.h"
#include "AppMacros.h"
#include "Utils.h"

//audio
#include "SimpleAudioEngine.h"
#elif(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
// Layer
#include "LayerUI/OperateLayer.h"
#include "LayerUI/LoginMainLayer.h"
#include "LayerUI/OperateUILayer.h"
#include "LayerUI/GameSettlementLayer.h"
#include "LayerUI/Load/LoadingLayer.h"
#include "LayerUI/GameFileLayer.h"

#include "Manager/ResourceManager.h"
#include "Manager/SaveMemoryManager.h"
#include "Manager/TimeLogicManager.h"
#include "Manager/GameDBManager.h"
#include "Manager/EntireManage.h"
#include "Manager/TextJonsManager.h"
#include "Manager/PhpManager.h"
#include "Manager/GameConfigManager.h"
#include "Messager/NotifyMessage.h"
//sdk
#include "SDK/SDKConfig.h"

#include "Scenes/RunGameScene.h"

#include "AppMacros.h"
#include "Common/Utils.h"
#include "platform/CCFileUtilsHelp.h"
#include "LayerUI/SelectMapLayer.h"

//audio
#include "cocos/audio/include/SimpleAudioEngine.h"
#endif

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
//#include "MobClickCpp.h"
#endif

USING_NS_CC;
using namespace Utils;



AppDelegate::AppDelegate() 
{
    cocos2d::log("AppDelegate::AppDelegate");    
    //进入游戏的时间
    gGameDBManager->setEnterTime(TimeLogicManager::shardTime()->LocalTime());
}

AppDelegate::~AppDelegate() 
{
    //退出游戏的时间
    //cocos2d::log("AppDelegate::~AppDelegate");
}

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    cocos2d::log("AppDelegate::applicationDidFinishLaunching");
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLViewImpl::create("My Game");
        director->setOpenGLView(glview);
    }


    std::string strSign = "XXTEASANXIAO136973SIGN";
    std::string strKey = "SANXIAO136973KEY";

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
   // 设置 encrypt sign和ek encrypt key
    FileUtilsHelp::getInstance()->setXXTeaKey(strKey.c_str(),::strlen(strKey.c_str()),strSign.c_str(),::strlen(strSign.c_str()));
#endif

    // 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 / 60);

    Size frameSize = glview->getFrameSize();
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    // 设置窗口大小
    glview->setFrameSize(1200.f ,1920.f);
    //glview->setFrameSize(1080.f ,1920.f);
    //glview->setFrameSize(480.f ,800.f);
    //glview->setFrameSize(1200.f ,1920.f);
    //glview->setFrameSize(720.f,1280.f);
    //glview->setFrameSize(480.f,854.f);
    //glview->setFrameSize(480.f,800.f);
    glview->setFrameZoomFactor(0.3f);
    //glview->setFrameSize(640,960);
    //glview->setFrameSize(1080.f * 0.5f,1800.f * 0.5f);
    //glview->setFrameSize(1200.f * 0.5f,1800.f * 0.5f);
    #endif
    
    frameSize = glview->getFrameSize();

    Size designSize = Size(SCREEN_WIDTH, SCREEN_HEIGHT);

    //将宽和高做一个比,通过这个比,来具体的调整逻辑分辨率的大小
    float widthRate = frameSize.width/designSize.width;
    float heightRate = frameSize.height/designSize.height;

    //如果是if中的语句,说明逻辑的高度有点大了,就把逻辑的高缩小到和宽度一样的比率
    if (widthRate > heightRate)
    {
        //里边传入的前俩个参数就是逻辑分辨率的大小,也就是通过getWinSize()得到的大小
        designSize.height = designSize.height * heightRate/widthRate;
        gEntireManage->setViewSacleRate(heightRate/widthRate);
    }
    else
    {
        designSize.width = designSize.width * widthRate/heightRate;
        gEntireManage->setViewSacleRate(widthRate/heightRate);
    }

    glview->setDesignResolutionSize(designSize.width,designSize.height, ResolutionPolicy::SHOW_ALL);

    Size frameSize1 = director->getWinSize();
    // create a scene. it's an autorelease object
    auto scene = Scene::create();
    //auto scene = HelloWorld::createScene();

    //友盟sdk
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    //MOBCLICKCPP_START_WITH_APPKEY("5506a594fd98c59296000053");
    //MOBCLICKCPP_START_WITH_APPKEY_AND_CHANNEL("5506a594fd98c59296000053", "yj_android");
#endif    

    //保存进入游戏时的时间
    saveGameEnterTime();

    LoadingLayer *pLayer = LoadingLayer::create();
 //    pLayer->setPositionY(100.f);
    scene->addChild(pLayer);

    // run
    director->runWithScene(scene);
#if (LOGIN_PLATFORM_DEFAULT_SDK == PLATFORM_ANDROID_JL_SDK)
    // 加载游戏配置信息
    //gGameConfigManager->loadGameConfig();
    // 设置基本信息
    //gPhpManager->setDefaultPhpData();
    // 发送游戏状态信息到php服务器
    //gPhpManager->sendGameStatus();
#endif

    return true;
}

// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground() {

    //友盟sdk
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    //umeng::MobClickCpp::applicationDidEnterBackground();

    // 发送游戏状态信息到php服务器
    //gPhpManager->sendGameStatus();
#endif
    Director::getInstance()->stopAnimation();

    // if you use SimpleAudioEngine, it must be pause
    if (gEntireManage->getIsSound())
    {
        CocosDenshion::SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
    }

    //保存离开游戏或异常退出游戏时的时间
    saveGameExitTime();
}

// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
    //cocos2d::log("AppDelegate::applicationWillEnterForeground ==============>>>>>>>>>");
    //友盟sdk
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    //umeng::MobClickCpp::applicationWillEnterForeground();
    // 重置游戏时间
    //gPhpManager->resetGameTime();
    //滑动地图
    NotifyData data;
    data.type = OPERATE_UI_NOTIFY_COME_BACK;
    _NOTIFY_->postNotification(OPERATE_UI_NOTIFY_COME_BACK,&data);
#endif
    Director::getInstance()->startAnimation();

    // if you use SimpleAudioEngine, it must resume here
    if (gEntireManage->getIsSound())
    {
        CocosDenshion::SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
    }

    //保存进入游戏时的时间
    saveGameEnterTime();
}

void AppDelegate::saveGameExitTime()
{
    //存储到数据库中(现有的心所需要的时间+恢复了的时间)
    int iMinute = gEntireManage->getMinuteNum();
    int iSecond = gEntireManage->getSecondNum();
    int iNum = gEntireManage->getStaminaNum();
    int iTime = (10*60)-(iMinute*60 + iSecond);
    int iAllTime = iNum*10*60;

    //储存运行时间
    gGameDBManager->setRecoveryTime(iTime + iAllTime);
    gGameDBManager->setExitTime(TimeLogicManager::shardTime()->LocalTime());
}

void AppDelegate::saveGameEnterTime()
{
    //保存进入游戏的时间
    gGameDBManager->setEnterTime(TimeLogicManager::shardTime()->LocalTime());

    //进入时间逻辑
    TimeLogicManager::shardTime()->logicTime();
}

 

转载于:https://www.cnblogs.com/mhh999/p/5431631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值