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();
}
时间: 2024-11-08 21:58:57

cocos2dx-安卓多分辨率适配方案的相关文章

cocos2d-x多分辨率适配方案:setDesignResolutionSize使用

1. setDesignResolutionSize使用方法及主要的三种适配模式 在cocos2d-x 2.0里,提供了一个叫做setDesignResolutionSize的方法,直接一次设置就可以自动适配各种分辨率.这个方法的注释如下: enum ResolutionPolicy { kResolutionExactFit, kResolutionNoBorder, kResolutionShowAll, kResolutionFixedHeight, kResolutionFixedWid

Unity+NGUI多分辨率适配方案

说起unity的适配方案,网上可谓是一查一大堆,但是真正要应用到项目中的时候,总会出现各式各样的问题.由于最近自己要做一个小游戏,在开始做游戏之前,就想着先好好搞一搞适配这块,以后新起项目的时候也会用得着. NGUI应该是现在大部分开发者都会去选择的UI插件,虽然NGUI还存在着不少问题,像是相对来说,NGUI还是比较靠谱的,所以这里只是针对NGUI做适配方案. NGUI中对于每一个场景,都是以UIRoot为GameObject树的根的,UIRoot下面主要有这几种属性 1) Scaling S

(16)Cocos2d-x 多分辨率适配完全解析

Overview 从Cocos2d-x 2.0.4开始,Cocos2d-x提出了自己的多分辨率支持方案,废弃了之前的retina相关设置接口,提出了design resolution概念. 3.0中有以下相关接口: Director::getInstance()->getOpenGLView()->setDesignResolutionSize() //设计分辨率大小及模式 Director::getInstance()->setContentScaleFactor() //内容缩放因子

Cocos与Cocos2d-x协作教程——多分辨率适配

http://www.cocoachina.com/bbs/read.php?tid-288123.html Cocos v2.1开始新增了一种新的多分辨率适配方案:流式布局. 这种布局相比CocosStudio v1.x时代简单纯粹得多,没那么多复杂的概念也没那么难理解,上手更简单,这篇教程就是来教大家怎么使用这个功能的. 实际上之前也写过一篇布局教程,不过反响感觉不太好,不少人看完之后还有不少疑问,尤其是跟2d-x协作相关的疑问.因此,这次提供一个更给力的版本,从Cocos编辑配置到与Coc

【Cocos2d-x 017】 多分辨率适配全然解析

转:http://blog.csdn.net/w18767104183/article/details/22668739 文件夹从Cocos2d-x 2.0.4開始,Cocos2d-x提出了自己的多分辨率支持方案.废弃了之前的retina相关设置接口,提出了design resolution概念. <ol class="linenums" style="margin: 0px; padding-left: 27px;"><li value=&quo

Unity2D多分辨率屏幕适配方案(转载)

一下内容转自:http://imgtec.eetrend.com/forum/3992 此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用. 先说明一些基本的概念: 1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕高度 2.Unity2D中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们

cocos2dx屏幕适配方案

我们在利用cocos2dx来开发游戏时,在开始时就不可避免的会遇到屏幕适配问题,来使我们的游戏适应移动终端的各种分辨率大小.目前,大家采用的屏幕适配方案不一,网上的资料也比较丰富,下面我也将自己使用的方案做下记录.由于我的Mac系统下只有一个分辨率的虚拟机,所以这次使用的是VS2010,使用的是cocos2dx2.2.2版本. 我这里采用的方案是为不同分辨率的屏幕设置不同资源目录的方案,根据我们的需求需要准备多套资源,但是由于部分分辨率较为接近,所以也不必为所有分辨率都去单独准备资源,可以几种分

[原创]一种Unity2D多分辨率屏幕适配方案

此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用. ---------------------------------------正式开始的分割线----------------------------------------- 先说明一些基本的概念: 1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕

一种Unity2D多分辨率屏幕适配方案

此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个方案影响,可以完美和此方案配合使用. ---------------------------------------正式开始的分割线----------------------------------------- 先说明一些基本的概念: 1.屏幕的宽高比Aspect Ratio = 屏幕宽度/屏幕