首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PTM_RATIO在视网膜显示中的应用Box2D、cocos2d和物理编辑器

PTM_RATIO在视网膜显示中的应用Box2D、cocos2d和物理编辑器
EN

Stack Overflow用户
提问于 2013-10-08 08:27:26
回答 1查看 1.4K关注 0票数 1

我很难在我的精灵身上画出身体的形状。我尝试了很多组合,但我不能让它在视网膜显示器上工作。

我只支持iPhone视网膜,同时支持iPad (视网膜而不是视网膜)。

A. PTM_RATIO

第一个问题是,如果我想在所有设备中使用相同的物理,那么每个设备使用哪个PTM_RATIO。我读过几篇文章,我不知道PTM是否代表“Point To Meter”或“Pixel To Meter”。

哪一栏是对的?

B.物理学

我想要用不同形状的不同图像绘制一个地面,但为此,我使用了两种最简单的类型。图像为200x200px,但身体仅为较低的200x80px矩形。

为了保持雪碧方面,我使用200x200pxART用于iPhone和iPad SD,400x400用于iPad HD。然后我试着为红色区域定义一个身体。我尝试了所有可能的组合使用Physcs编辑器,我尝试手动完成它也与顶点助手。我让它工作的iPad SD,但不是视网膜显示器(总是x2)。

我的叶鞘:

代码语言:javascript
运行
复制
int num = 4;
        b2Vec2 verts[] =
        {
            b2Vec2(-100.0f / 100.0, -20.0f / 100.0),    //A
            b2Vec2(100.0f / 100.0, -20.0f / 100.0), //B
            b2Vec2(100.0f / 100.0, -100.0f / 100.0),    //C
            b2Vec2(-100.0f / 100.0, -100.0f / 100.0),   //D
        };

我除以100,因为我使用了200x200的艺术。我试图用PTM_RATIO和PTM_RATIO * CC_CONTENT_SCALE_FACTOR()进行除法,但没有得到有用的结果。我试着用400x400艺术…做这件事我想我试过了所有可能的组合。

为了调试目的,我使用cocos2d+Box2d模板提供的GLES类。

在我的图层中的绘制方法:

代码语言:javascript
运行
复制
- (void) draw
{
    [super draw];
    ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
    kmGLPushMatrix();
    world->DrawDebugData();
    kmGLPopMatrix();
}

我该用吗?:

代码语言:javascript
运行
复制
 glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1);

我真的觉得卡住了。

编辑:

物理学编辑器组合和结果:

宏定义: 50 PTM_RATIO表示iPhone,100 PTM_RATIO表示iPad 2和iPad 3。

EN

回答 1

Stack Overflow用户

发布于 2013-10-08 08:58:00

首先要做的是:需要PTM_RATIO: Box2D使用任意坐标系。据说它是以米为单位的,但这是一个任意的定义,因为Box2D中的1米不能用标尺测量。只有当你把Box2D物体的位置转换到屏幕上时,你才能得到一个可测量的距离。这个距离取决于屏幕的大小及其像素密度(ppi)。

,至于Retina,你不需要一个不同的PTM_RATIO!

这是因为在UIKit和cocos2d (但不是纯OpenGL)中,Retina iPhone具有与非Retina iPhone相同的点大小。iPad和iPad Retina也是如此,它们的点坐标大小都是1024x768 --在内部,iPad Retina只使用4个像素来表示一个点。UIKit和cocos2d都使用点坐标来定位视图,因此您根本不需要担心转换为像素或内容缩放因子。

这意味着对非Retina和Retina设备使用相同的PTM_RATIO。

不过,您可能希望在PTM_RATIO和iPhone之间更改iPad,例如,如果您不希望应用程序的iPad版本显示屏幕中更大的部分,而是向您的场景提供一个2倍的缩放视图,那么您只需使用iPad上的PTM_RATIO的两倍。这意味着iPhone上的一个物体,其位置时间为PTM_RATIO转换为480x320,而不是iPad上的480x320,而是位置960x640,因为iPad的PTM_RATIO是iPad的两倍高。同样,只有当您尝试在iPhone和iPad屏幕之间使用非常相似的比例(大约大2倍)时,才是您想要的--否则不要更改PTM_RATIO。

现在,VertexHelper并没有在这方面帮助您,因为它没有考虑或包含PTM_RATIO,因此它很容易出错(除此之外,它是一个累赘的工具)。相反,应该使用PhysicsEditor及其形状缓存。确保您已经将PhysicsEditor中的PhysicsEditor设置为与您在应用程序中使用的相同。

无论如何,不要在任何地方使用CC_CONTENT_SCALE_FACTOR来乘以位置。是的,有些GL函数需要它,但它们已经给了您,并且它们可以正常工作而不需要任何更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19242708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档