cocos2d-x中的尺寸之二


接下来我们再做些坏事,比如给EGLView设置分辨率,代码如下:

	pEGLView->setDesignResolutionSize(240, 320, kResolutionExactFit);

	CCSize size;
	size = pDirector->getWinSize();
	CCLOG("width = %f height = %f, pDirector->getWinSize", size.width, size.height);
	size = pDirector->getWinSizeInPixels();
	CCLOG("width = %f height = %f, pDirector->getWinSizeInPixels", size.width, size.height);
	size = pDirector->getVisibleSize();
	CCLOG("width = %f height = %f, pDirector->getVisibleSize", size.width, size.height);

	size = pEGLView->getFrameSize();
	CCLOG("width = %f height = %f, pEGLView->getFrameSize", size.width, size.height);
	size = pEGLView->getDesignResolutionSize();
	CCLOG("width = %f height = %f, pEGLView->getDesignResolutionSize", size.width, size.height);
	size = pEGLView->getVisibleSize();
	CCLOG("width = %f height = %f, pEGLView->getVisibleSize", size.width, size.height);
把分辨率设置为(240,320),也就是x坐标只有一半,y坐标则没变化,对其方式是ExactFit,运行效果:


这个效果是将图片做了一个拉伸,再显示在屏幕上,那么调试信息是如何的?


我们可以看到,pEGLView->getFrameSize不受影响,其他都变化了,为什么getFrameSize那么特殊?查看cocos2dx源代码发现,getFrameSize返回的是成员变量m_obScreenSize,而这个值在通过setFrameSize赋值之后就不会再更改了,这个值描述的是窗口在屏幕像素单位的大小,再直白点就是窗口的尺寸。

而其他的尺寸,都是依赖于程序员设置的分辨率,因为我们人为的设置了分辨率,所以其他尺寸函数返回的都是自定义的分辨率。

-------------------------------------------------------------------------------------------------------------------------------华丽的分割线

那现在我们再修改下代码,将设置分辨率的方法修改下:

	pEGLView->setDesignResolutionSize(240, 320, kResolutionNoBorder);

	CCSize size;
	size = pDirector->getWinSize();
	CCLOG("width = %f height = %f, pDirector->getWinSize", size.width, size.height);
	size = pDirector->getWinSizeInPixels();
	CCLOG("width = %f height = %f, pDirector->getWinSizeInPixels", size.width, size.height);
	size = pDirector->getVisibleSize();
	CCLOG("width = %f height = %f, pDirector->getVisibleSize", size.width, size.height);

	size = pEGLView->getFrameSize();
	CCLOG("width = %f height = %f, pEGLView->getFrameSize", size.width, size.height);
	size = pEGLView->getDesignResolutionSize();
	CCLOG("width = %f height = %f, pEGLView->getDesignResolutionSize", size.width, size.height);
	size = pEGLView->getVisibleSize();
	CCLOG("width = %f height = %f, pEGLView->getVisibleSize", size.width, size.height);

	CCPoint pt = pEGLView->getVisibleOrigin();
	CCLOG("originX=%f, originY=%f", pt.x, pt.y);

修改成kResolutionNoBorder形式,并且把EGLView的origin坐标打印出来

打印结果如下:


这里我们可以看到,getVisibleSize有变化了,程序运行的结果,的确是没有显示所有的内容,只是显示了部分内容:


EGLView的origin坐标,之前都是0,0,现在也有了变化,变成0,80了

这个原因是因为用NoBorder属性之后,窗口就不作为border了,内容可以伸展到窗口之外,这样窗口可能就只显示了一部分,那么可见范围自然就小了

origin坐标是窗口原点在内容坐标系中的坐标。


转载于:https://www.cnblogs.com/new0801/p/6177193.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值