在使用Box2D,cocos2d和物理编辑器的视网膜显示PTM_RATIO

我有很多问题试图在我的精灵身上绘制身体形状。 我尝试了很多的组合,但我无法使其在视网膜显示器上工作。

我只支持iPhone视网膜和iPad(视网膜而不是视网膜)。

A. PTM_RATIO

第一个问题是,如果我想在所有设备中使用相同的物理,每个设备使用哪个PTM_RATIO。 我读了几个post,我不知道PTM代表“ Point To Meter ”还是“ Pixel To Meter ”。

在这里输入图像说明

¿哪一列是正确的?

B.物理学

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

在这里输入图像说明

为了保持精灵方面,我使用200x200px的艺术为iPhone和iPad SD和400×400为iPad HD。 然后,我尝试为红色区域定义一个身体。 我尝试了所有可能的组合使用Physcs编辑器,我试图做手动也与顶点助手。 我做了iPad SD的工作,但不是视网膜显示(总是X2)。

我的verts:

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,因为我使用了200×200的艺术。 我试图除以PTM_RATIO和PTM_RATIO * CC_CONTENT_SCALE_FACTOR()而没有有用的结果。 我试图用400×400的艺术做…我想我尝试了所有可能的组合。

为了进行debugging,我使用了cocos2d + Box2d模板提供的GLES-Render类。

我的图层中的绘制方法:

 - (void) draw { [super draw]; ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position ); kmGLPushMatrix(); world->DrawDebugData(); kmGLPopMatrix(); } 

我应该用吗?

  glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1); 

我觉得很困难。

编辑:

Pysics编辑组合和结果:

Physcs编辑器结果

macros定义:50 PTM_RATIO为iPhone和100 PTM_RATIO为iPad 2和iPad 3。

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

至于视网膜,你不需要一个不同的PTM_RATIO!

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

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

但是,您可能想要更改iPhone和iPad之间的PTM_RATIO,例如,如果您不希望应用的iPad版本显示更大的屏幕部分,而是提供2倍的缩放视图进入您的场景,只需在iPad上使用两次PTM_RATIO。 由于iPad的PTM_RATIO高出两倍,所以在iPhone上的位置乘以PTM_RATIO转换为480×320的iPhone上的身体不会在iPad上是480×320,而是在960×640的位置。 再说一次,只有当你尝试在iPhone和iPad屏幕之间使用非常相似的比例(大概是两倍大)时,你才需要 – 否则不要改变PTM_RATIO。

现在,VertexHelper不会帮助你,因为它不考虑或包含PTM_RATIO,所以很容易出错(除了它是一个繁琐的工具)。 而是依靠使用PhysicsEditor及其形状caching。 确保你已经把PhysicsEditor中的PTM_RATIO设置为与你的应用中使用的相同。

切勿在任何地方使用CC_CONTENT_SCALE_FACTOR来增加头寸。 是的,一些GLfunction需要它,但是这些function已经提供给你,它们正常工作,无需任何改变。