Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Cocos2d-x获得屏幕密度?_Android_Eclipse_Cocos2d X - Fatal编程技术网

Android 如何使用Cocos2d-x获得屏幕密度?

Android 如何使用Cocos2d-x获得屏幕密度?,android,eclipse,cocos2d-x,Android,Eclipse,Cocos2d X,在花了一两年时间学习如何使用iOS编写代码之后,我最近决定开始Android开发。现在我正试图将我的Cocos2d iphone代码移植到Cocos2d-x,我完全不知道如何处理所有不同的图像密度。现在,我正在为480x800编码,我正在试图弄清楚如何自动选择要使用的图像密度。我认为(尽管我可能错了)对于原生java,您为hdpi、ldpi、mdpi等创建子目录,设备将自动选择要使用的文件。但是,根据Wenderlich的页面(你不应该使用Resources文件夹中的子目录,那么我如何知道设备使

在花了一两年时间学习如何使用iOS编写代码之后,我最近决定开始Android开发。现在我正试图将我的Cocos2d iphone代码移植到Cocos2d-x,我完全不知道如何处理所有不同的图像密度。现在,我正在为480x800编码,我正在试图弄清楚如何自动选择要使用的图像密度。我认为(尽管我可能错了)对于原生java,您为hdpi、ldpi、mdpi等创建子目录,设备将自动选择要使用的文件。但是,根据Wenderlich的页面(你不应该使用Resources文件夹中的子目录,那么我如何知道设备使用的密度呢

我试过使用int

getResources().getDisplayMetrics().density;

但我最后出现了一个错误,上面写着“getResources”未在此作用域中声明。我需要做什么才能让Cocos2d-x查找正确的图像并适当缩放它?

因为至少Cocos2d-x版本2.0.4,您可以创建资源文件夹的单独子目录,并在运行时选择要使用的子目录。如果在那里找不到资源,Cocos2d-x将自动后退转到资源文件夹而不是set子目录。这些都在Cocos2d-xwiki中描述

举个例子,你可以这样做

const CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// Landscape
if( winSize.height < winSize.width) {
    if( winSize.width >= 1536 ) {
        // iPad Retina here.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "iPadRetina" );
    } else {
        // Some lower resolution tablet stuff.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "lowResTablet" );
    }
}
// Portrait
else {
    if ( winSize.width >= 720 ) {
        // Phones like Galaxy Nexus.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "720" );
    } else if ( winSize.width >= 640 ) {
        // iPhone retina
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "iPhoneRetina" );
    } else {
        // Low res phone.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "lowResPhone" );
    }
}
Cocos2d-x将首先查找文件“iPhoneRetina/cookie.png”。如果在那里找不到,它将在放弃之前在资源文件夹的根目录中查找“cookie.png”

祝你移植好运!:)

--编辑关于DPI的信息--
在Cocos2d-x的较新版本中(建议使用注释中的用户),我在版本2.1.3中发现了一个函数
CCDevice::getDPI()
。但是,除非你绝对需要所有东西都以相同的物理尺寸显示,否则我建议你让事物的真实尺寸稍微浮动一点,并将重点放在匹配分辨率1:1上。如果开始缩放对象,它们将看起来模糊。另外,我不认为在大不相同的屏幕尺寸下使用相同的分辨率是很常见的。例如,我知道有几种物理尺寸的全高清屏幕,但我认为所有的人像屏幕和平板电脑屏幕都非常接近


我不知道,你当然可以制作一个应用程序,其中应用程序中元素的物理屏幕大小非常重要。一个测量应用程序,你可以把东西放在屏幕上,用厘米或其他方式测量。如果是这种情况,那么屏幕大小当然是最重要的,您可能需要查看
CCDevice::getDPI()
函数。

因为至少Cocos2d-x版本2.0.4,您可以创建资源文件夹的单独子目录,并在运行时选择要使用的子目录。如果在那里找不到资源,Cocos2d-x将自动返回到资源文件夹,而不是设置的子目录。这些都在Cocos2d-xwiki中进行了描述

举个例子,你可以这样做

const CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// Landscape
if( winSize.height < winSize.width) {
    if( winSize.width >= 1536 ) {
        // iPad Retina here.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "iPadRetina" );
    } else {
        // Some lower resolution tablet stuff.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "lowResTablet" );
    }
}
// Portrait
else {
    if ( winSize.width >= 720 ) {
        // Phones like Galaxy Nexus.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "720" );
    } else if ( winSize.width >= 640 ) {
        // iPhone retina
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "iPhoneRetina" );
    } else {
        // Low res phone.
        CCFileUtils::sharedFileUtils()->setResourceDirectory( "lowResPhone" );
    }
}
Cocos2d-x将首先查找文件“iPhoneRetina/cookie.png”。如果在那里找不到,它将在放弃之前在资源文件夹的根目录中查找“cookie.png”

祝你移植好运!:)

--编辑关于DPI的信息--
在Cocos2d-x的较新版本中(建议使用注释中的用户),我在版本2.1.3中发现了一个函数
CCDevice::getDPI()
。但是,除非你绝对需要所有东西都以相同的物理尺寸显示,否则我建议你让事物的真实尺寸稍微浮动一点,并将重点放在匹配分辨率1:1上。如果开始缩放对象,它们将看起来模糊。另外,我不认为在大不相同的屏幕尺寸下使用相同的分辨率是很常见的。例如,我知道有几种物理尺寸的全高清屏幕,但我认为所有的人像屏幕和平板电脑屏幕都非常接近


我不知道,你当然可以制作一个应用程序,其中应用程序中元素的物理屏幕大小非常重要。一个测量应用程序,你可以把东西放在屏幕上,用厘米或其他方式测量。如果是这种情况,那么屏幕大小当然是最重要的,您可能需要查看
CCDevice::getDPI()
函数。

谢谢您提供的信息。我觉得你回答了我的问题,但我太慢了,无法理解。我今天早些时候读过这一页,不明白密度如何与代码相适应。如何处理两台设备具有相同“分辨率”,但密度不同的情况?我想澄清一下,我想我需要在“正常”分辨率文件夹中显示多张图像。我将添加ldpi、hpdi和mdpi作为后缀,查看屏幕密度,设置比例因子并选择要加载的文件。我是不是在思考这个问题?有CcDe::GETDPI-(),并且可以从DPI中推断出与设备无关的像素的密度或大小。在某些情况下,密度是非常重要的。例如,如果你想做一个很小的按钮,并确保它的大小(厘米)足够大到一个舒适的点击,你必须考虑DPI,因为你必须知道一个像素将如何转化为绝对测量单位(如厘米)。我觉得你回答了我的问题,但我太慢了,无法理解。我今天早些时候读过这一页,不明白密度如何与代码相适应。如何处理两台设备具有相同“分辨率”,但密度不同的情况?我想澄清一下,我想我需要在“正常”分辨率文件夹中显示多张图像。我将添加ldpi、hpdi和mdpi作为后缀,查看屏幕密度,设置比例因子并选择要加载的文件。我是不是在思考这个问题?有CcDe::GETDPI-(),并且可以从DPI中推断出与设备无关的像素的密度或大小。在某些情况下,密度是非常重要的。例如,如果你