Ios 使用Box2D、cocos2d和Physics Editor显示视网膜中的PTM_比率

Ios 使用Box2D、cocos2d和Physics Editor显示视网膜中的PTM_比率,ios,cocos2d-iphone,box2d,physics,retina-display,Ios,Cocos2d Iphone,Box2d,Physics,Retina Display,我在尝试在精灵上绘制身体形状时遇到了很多问题。我尝试了很多组合,但我不能让它在视网膜显示器上工作 我只支持iPhone视网膜和iPad(视网膜和非视网膜) A.PTM_比率 第一个问题是,如果我希望所有设备都具有相同的物理特性,那么每个设备使用哪种PTM_比率。我读了好几篇文章,不知道PTM代表的是“点到米”还是“像素到米” 哪一列是正确的 B.物理学 我想用不同形状的不同图像绘制地面,但为此,我使用了两种最简单的类型。200x200px的图像,但主体仅采用较低的200x80px矩形 为了保

我在尝试在精灵上绘制身体形状时遇到了很多问题。我尝试了很多组合,但我不能让它在视网膜显示器上工作

我只支持iPhone视网膜和iPad(视网膜和非视网膜)

A.PTM_比率

第一个问题是,如果我希望所有设备都具有相同的物理特性,那么每个设备使用哪种PTM_比率。我读了好几篇文章,不知道PTM代表的是“点到米”还是“像素到米”

哪一列是正确的

B.物理学

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

为了保持精灵特性,我在iPhone和iPad SD上使用200x200px艺术,在iPad HD上使用400x400。然后我尝试为红色区域定义一个实体。我使用Physcs编辑器尝试了所有可能的组合,并尝试使用Vertex Helper手动完成。我让它适用于iPad SD,但不适用于视网膜显示器(总是x2)

我的顶点:

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_比率和PTM_比率*CC_CONTENT_SCALE_FACTOR(),但没有得到有用的结果。我试着用400x400的艺术品来做……我想我试过了所有可能的组合

出于调试目的,我正在使用cocos2d+Box2d模板提供的GLES呈现类

“我的图层”中的绘制方法:

- (void) draw
{
    [super draw];
    ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
    kmGLPushMatrix();
    world->DrawDebugData();
    kmGLPopMatrix();
}
我应该使用吗

 glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1);
我觉得自己被卡住了

编辑:

Pysics编辑器组合和结果:

宏定义:
iPhone为50 PTM_,iPad2和iPad3为100 PTM_。

第一件事:需要PTM_比率:Box2D使用任意坐标系。据说以米为单位,但这是一个任意定义,因为Box2D中的1米不能用直尺测量。只有在将Box2D实体的位置平移到屏幕上时,才能获得可测量的距离。这个距离取决于屏幕的大小和像素密度(ppi)

至于视网膜,您不需要不同的PTM_比率

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

这意味着对非视网膜和视网膜设备使用相同的PTM_比率

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

现在VelTeHelp不帮助你,因为它不考虑或包含PTMyRe比率,所以它很容易犯错误(除了它是一个麻烦的工具)。而是依赖于使用PhysicsEditor及其形状缓存。确保已将PhysicsEditor中的PTM_比率设置为应用程序中使用的PTM_比率


无论如何,不要在任何地方使用CC\u内容\u比例\u因子来乘以位置。是的,一些总账功能需要它,但这些功能已经提供给您,它们可以正常工作,无需任何更改。

谢谢Steffen,您的快速回复。所以,根据你的话,我得出结论,如果我想代表同一个世界,我必须对iPhone使用PTM_比率,对iPad使用双倍PTM_比率。如果主要的精灵是一辆在iPhone和iPad上分别为100磅和200磅的汽车(约2米长的汽车),那么最好的选择分别是50磅和100磅。这一点现在已经清楚了。但在物理编辑方面,我想我还遗漏了一些东西。我试着用不同的艺术和不同的PTM_比率来构建身体,但只适用于非视网膜,即iPad SD。请参见编辑。Vielen danke.@LearnCos2D我曾尝试在iPhone上使用相同的PTM_比率来显示非视网膜和视网膜,但没有成功。我一直在视网膜上显示更小的多边形。。。那么,您能否详细说明一下,您是如何表示PTM_比率可以保持不变的?如果您使用OpenGL直接渲染多边形,您必须考虑GL是基于像素的API,因此必须在视网膜上缩放2倍。但不适用于cocos2d或uikitapi。