cocos2dx[3.x](5) ——入口类AppDelegate.cpp

【唠叨】

入口类AppDelegate.cpp是游戏程序的入口。



【AppDelegate.cpp】

这是游戏程序的入口,主要用于游戏程序的逻辑初始化,并创建运行程序的入口界面(即第一个游戏界面场景)。

里面有三个方法:

//
        applicationDidFinishLaunching();  //逻辑初始化
        applicationDidEnterBackground();  //切换到后台
        applicationWillEnterForeground(); //切换到前台
//

源码分析:

//
	bool AppDelegate::applicationDidFinishLaunching() {

		//初始化一个导演, 只能有一个导演
		auto director = Director::getInstance();

		//使用OpenGLView
		auto glview = director->getOpenGLView();

		if(!glview) {
			glview = GLView::create("My Game");
			glview->setFrameSize(480, 320);		//程序窗口标题
			director->setOpenGLView(glview);
		}

		//屏幕适配,设置游戏设计的分辨率
		glview->setDesignResolutionSize(480, 320, ResolutionPolicy::SHOW_ALL);

		//开启状态显示, 帧数,精灵数等
		director->setDisplayStats(true);

		//刷新频率,每秒60帧。
		director->setAnimationInterval(1.0 / 60);

		//创建一个场景HelloWorld,这是游戏程序的第一个界面
		auto scene = HelloWorld::createScene();

		//运行
		director->runWithScene(scene);

		return true;
	}

	// 切换到后台
	void AppDelegate::applicationDidEnterBackground() {
		//暂停游戏
		Director::getInstance()->stopAnimation();
		//暂停音乐
		SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
	}

	// 切换到前台
	void AppDelegate::applicationWillEnterForeground() {
		//继续游戏
		Director::getInstance()->startAnimation();
		//继续音乐
		SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
	}
//

讲到这里,大家可能会感到疑惑。为什么会设置了两次分辨率大小呢?

setFrameSize(480, 320);

setDesignResolutionSize(480,320,ResolutionPolicy::SHOW_ALL);

朋友们,这两个的意义是不一样滴。

setDesignResolutionSize 是设置了我们游戏设计时候的分辨率,即想要适配的宽480高320的屏幕比例。也就是说设计者初衷的游戏分辨率屏幕大小。但是对于每个用户来说,他们使用的设备不一定是(480,320)的,比如手机有大有小。而后面的 ResolutionPolicy::SHOW_ALL 参数意思是按照原比例(480/320)进行放缩以适配设备的实际屏幕。

setFrameSize(480, 320) 则是设置我们预想设备的屏幕大小,也就是应用程序窗口的大小。

以下贴了几张对比图,加深理解。

1、这是原图片大小,窗口大小为480 * 320。

2、若设置窗口大小为setFrameSize(960, 640),而不设置设计分辨率放缩比例ResolutionPolicy::SHOW_ALL 的情况下,图片不放缩,原图还是480 * 320。

3、设置了 ResolutionPolicy::SHOW_ALL 之后,图片放缩到适配整个屏幕960 * 640 了。

时间: 2024-08-14 07:08:13

cocos2dx[3.x](5) ——入口类AppDelegate.cpp的相关文章

jni/../../Classes/AppDelegate.cpp:102: error: undefined reference to 'TestController::TestController

<1>错误信息: [armeabi] SharedLibrary  : libcocos2dcpp.so E:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/objs/coc

cocos2d-x 3.2 之 三消类游戏——万圣大作战 (第一篇)

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 废话: 放寒假了,放松了一下下....(有点多) 前几天 办了张健身卡,准备减肥了,健康重要啊,尤其是身为 程序猿. 话说,办完卡做的体测,20多岁的我,现在身体年龄竟然达到了40 ! 然后,拿了一个韩版 三星 Galaxy S 刷汉化,用惯了一键刷机,这些东西

做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk

前言:"懒"在这里当然不是贬义词,而是追求高效,拒绝重复劳动的代名词!做一个懒COCOS2D-X程序猿的系列文章将教会大家在工作中如何偷懒,文章篇幅大多较短,有的甚至只是几行代码,争取把懒发挥到极致! 一.懒人说书 Android.mk中LOCAL_SRC_FILES需要罗列出所有参与编译的文件,这样在.cpp文件少的时候还可以一个一个添加,当有几百个文件的时候会十分的痛苦! 我们下看看TestCpp工程中的Android.mk文件: 这只是节选的一部分,大概只有50个左右吧,除数量多

Cocos2d-x Lua中Sprite精灵类

Cocos2d-x Lua中Sprite精灵类 精灵类是Sprite,它的类图如下图所示. Sprite类图 Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的子类有:PhysicsSprite和Skin.PhysicsSprite是物理引擎精灵类,Skin是皮肤精灵类用于骨骼动画.创建Sprite精灵对象创建精灵对象有多种方式,其中常用的函数如下:cc.Sprite:create ().创建一个精灵对象,纹理[ 纹理(texture),表示物体表面细

cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(7)

今天我们介绍最后两个类 GameOverLayer类 GameLayer类 GameLayer类是整个游戏中最重要的类,因为是整个游戏的中央系统,控制着各个类(层)之间的交互,这个类中实现了猪脚小鸟和它的敌人(管道和草地- . -)碰撞检测,说道物理引擎的碰撞检测,我也是第一次接触,也没多大难度,就直接调用了cocos2d-x的接口,这个类就是游戏的主场景,游戏就是在这里进行的. GameOverLayer类,游戏结束后一些分数的显示,还有就是奖牌的实现(楼主写的很简单......),这边比较有

cocos2dx[3.2](9) ——数学类Vec2/Size/Rect

[唠叨] 数学类Vec2.Size.Rect,是cocos2dx中比较常用的类. 比如设置图片位置,设置图片大小,两图片的碰撞检测等等. 比起2.x版本,在3.2中本质上其实没有太大的变化,主要的变化就是将全局宏定义相关的操作封装到各自的类中而已.比如:Vec2的向量运算宏定义ccp***(),现在都已经封装到Vec2类里面去了. [Vec2] Vec2原名Point,它既可以表示一个二维坐标点,又可以表示一个二维向量. 同时Vec2对运算符进行了重载,可以很方便的完成Vec2的赋值.加减乘除等

cocos2d-x项目中如何避免增加一个cpp就必须在工程android.mk文件去添加引用

LOCAL_SRC_FILES := hellocpp/main.cpp \       ../../Classes/AppDelegate.cpp \ ../../Classes/HelloWorldScene.cpp 只要把上面这些替换成下面的: SRC_FILES := hellocpp/main.cpp SRC_FILES += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) SRC_FILES += $(wildcard $(LOCAL_PA

Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析

前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity], 然后跳转 [主页Activity]) 2.然后MM在 [主页Activity] 时按下了 [Home键],回到桌面 3.再点击app的icon图标,原谅耿直的我们都是觉得应该直接回到[主页Activity],但是结果却是又一次触发 [闪屏页Activity],亮瞎了24K钛合金狗眼的我们觉得这玩

【转载】Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析

前言 前些天,测试MM发现了一个比较奇怪的bug. 具体表现是: 1.将app包通过电脑QQ传送到手机QQ上面,点击安装,安装后选择打开app (此间的应用逻辑应该是要触发 [闪屏页Activity], 然后跳转 [主页Activity]) 2.然后MM在 [主页Activity] 时按下了 [Home键],回到桌面 3.再点击app的icon图标,原谅耿直的我们都是觉得应该直接回到[主页Activity],但是结果却是又一次触发 [闪屏页Activity],亮瞎了24K钛合金狗眼的我们觉得这玩