Cocos2d-x 3.1.1 学习日志15--getContentSize和getContentSizeInPixels区别

cocos2d-x中使用getContentSize获得的就是逻辑点的大小,而getContentSizeInPixels获得的就是像素点的大小。 像素点和逻辑点的对应关系为:逻辑点的大小 = 像素大小 / contentScaleFactor。

如果在高分辨率的平台上(如Iphone4),使用非高分辨率的图片资源,且设置contentScaleFactor为1.0,则IOS的Core Animation compositor 会自动拉伸非高分辨率的资源来适配, 使其在非高分辨率和高分辨率设备上的视觉效果是一样的。

如果用户设置contentScaleFactor 为(1.0,2.0]之间的值,系统会使用用户设置的拉伸值。

cocos2d-x提供了接口来设置contentScaleFactor, 接口为:CCDirector::setContentScaleFactor。

了解了IOS分辨率的内幕后,再来解释一下问题产生的原因。

问题1: 因为设置enableRetinaDisplay(false),contentScaleFactor为1.0,所以图片会被当成非高清资源,在显示的时候水平和竖直的分辨率都会被拉伸2倍。

问题2:因为设置enableRetinaDisplay(true), contentScaleFactor为2.0,所以图片会显示成原有的像素大小。但是设置位置是使用setPosition,该接口设置的是逻辑位置。因为之前的位置是参考800*480的屏幕大小来设置的,所以当contentScaleFactor为2.0时,就相当于参考屏幕的像素大小为1600*960,
所以精灵的位置等都出现了错误。

建议使用逻辑点

下面解析一下坐标转换,直接贴源码:

CCPoint CCDirector::convertToGL(const CCPoint& uiPoint)

{

CCSize s = m_obWinSizeInPoints;

float newY = s.height - uiPoint.y;

return ccp(uiPoint.x, newY);

}

CCPoint CCDirector::convertToUI(const CCPoint& glPoint)

{

CCSize winSize = m_obWinSizeInPoints;

float oppositeY = winSize.height - glPoint.y;

return ccp(glPoint.x, oppositeY);

}

两种坐标的X方向没有变,只变了Y方向。cocos2d里面默认的是GL坐标系,即左下角为原点ccp(0.0f.0.0f),在Y方向上向上增加,X横向增加。 

Cocos2d-x 3.1.1 学习日志15--getContentSize和getContentSizeInPixels区别

时间: 2024-11-05 22:53:01

Cocos2d-x 3.1.1 学习日志15--getContentSize和getContentSizeInPixels区别的相关文章

我的游戏学习日志15——类型游戏的分析(3)

我的游戏学习日志15——类型游戏的分析(3) 5.第一视角射击游戏(FPS)的分析 Fist-Person Shooter,属于ACT的一种.大多支持玩家在三维空间中的移动和交互,具有较高的临场感. 游戏原型:Quake(<雷神之锤>1996),是世界上第一款真正采用多边形渲染技术的3D游戏.其主要的强大是其拟真的场景和无缝的界面造成了Quake逼真的场景以及出色的竞赛模式. 核心元素:①网络对战②游戏规则(死亡竞赛)③武器设定(设定平衡)④环境设计⑤源码开放. 总结:Quake的游戏性:沉浸

Cocos2d-x 3.1.1 学习日志13--CocosStudio学习必看

听说Cocos Studio很久了,主要是因为骨骼动画.目前看来Cocos2d-x播放动画的方式只有2种: 第一种:是播放序列帧动画,即将动画的每一帧都加载进缓存里,需要播放时再使用Animation类来播放,这种方法简单暴力,应对一些细节要求低的动画场景的时候,这么干无伤大雅.但是当动画帧数稍高的时候就会需要大量的图片,消耗资源很大. 第二种:是由Cocos2d-x提供的Action类来播放动画,这种动画是在帧循环中靠调整每次渲染的坐标来打到动画效果,由于帧循环是1/60秒刷新一次,会让这样播

Cocos2d-x 3.1.1 学习日志11--一Windows下Android环境搭建(一定对你有用的!!)

安装步骤::(多么痛的领悟!!) 1. 配置JDK JDK下载地址: 设置环境变量: JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21 CLASSPATH=.;%JAVA_HOME%\lib; Path增加%JAVA_HOME%\bin; 设置完后打开cmd,输入java -version 如果出现下面提示,表明环境变量设置成功: C:\Users\arlin>java -version java version "1.7.0_21&quo

cocos2d-x学习日志(18) --程序是如何开始运行与结束?

问题的由来 怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起第一个HelloWorld,然后在 HelloWorld 里面写相关逻辑代码,添加我们的层.精灵等 ~ 我们并不一定需要知道 Cocos2d-x 是如何运行或者在各种平台之上运行,也不用知道 Cocos2d-x 的游戏是如何运行起来的,它又是如何渲染界面的 ~~~ 两个入口 程序入口的概念是相对的,AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同

Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路

cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我目前使用的是最新版的cocos2dx 3.1.1.引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需要修改对应的android工程或者是ios工程的配置文件. 在2.x版本的cocos中,使用物理引擎的步骤十分繁琐.但在3.x版本中变得非常方便了.我这次的学习目标是制作一个打砖块的小游戏. 首先,现在的Scene类提供了一个静态工厂方法,用以创造一个集成物理引擎的场景. Scene::init

一个新菜鸟的ACM 感想及学习日志

感想:忘记了是什么时候喜欢上ACM的,也许是被坑上来的,也许是自己默默地喜欢上的.我忘不了第一次来我们学校的培训基地的时候,打的是洪菊学姐(虽然她不是ACMer)的电话,第一个见到的是我们集训队的队长周海.第一次敲成功的代码是军哥教会我敲得算1-50的累加.第一次训练是军训完之后国庆假期期间.那一周之后,我从从来没接触过编程语言到一个学期都不用担心C语言了! 本来老师宣传ACM的时候,我是想和班上的胡灿明(数学不错).左太平(英语大神)组一个队的,但是他们都表示对这个没兴趣.国庆后,跟花姐谈了谈

mysql学习日志

Mysql学习日志; 安装:Linux :yum install mysql* -y 验证Mysql是否正常安装:mysqladmin --version 进入 Mysql,要先启动#service mysqld start#mysql 更换Mysql初始密码: 安装完成mysql为空密码,修改密码方式:mysqladmin -u root password newpassword 用户已经有旧密码的更改方式:MYSQLADMIN -u root -p'oldpassword' PASSWORD

MobileForm控件的使用方式-用.NET(C#)开发APP的学习日志

今天继续Smobiler开发APP的学习日志,这次是做一个title.toolbar.侧边栏三种效果 样式一 一.          Toolbar 1.       目标样式 我们要实现上图中的效果,需要如下的操作: 2.       修改属性 a.         修改Mobile Form的Toolbar属性 获取窗体底部工具栏,打开集合编辑器,并点击“添加”,分别填写数据,如图 1.图 2: 图 1设置界面1 图 2设置界面2 b.         修改Mobile Form的Toolb

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys