1

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

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

A. PTM_RATIO

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

在此处输入图像描述

¿ 哪一列是正确的?

B. 物理学

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

在此处输入图像描述

为了保持精灵外观,我对 iPhone 和 iPad SD 使用 200x200px 艺术,对 iPad HD 使用 400x400。然后我尝试为红色区域定义一个主体。我使用 Physcs Editor 尝试了所有可能的组合,并尝试使用 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_RATIO 和 PTM_RATIO * CC_CONTENT_SCALE_FACTOR() 没有有用的结果。我试着用 400x400 的艺术来做到这一点……我想我尝试了所有可能的组合。

出于调试目的,我使用 cocos2d+Box2d 模板提供的 GLES-Render 类。

我的图层中的draw方法:

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

我应该使用吗?:

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

我觉得真的卡住了。

编辑:

Pysics Editor 组合和结果:

物理编辑器结果

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

4

1 回答 1

2

首先要做的是:需要 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。

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

现在 VertexHelper 不能帮你解决这个问题,因为它没有考虑或包含 PTM_RATIO,所以它很容易出错(而且它是一个麻烦的工具)。而是依靠使用 PhysicsEditor 及其形状缓存。确保您已将 PhysicsEditor 中的 PTM_RATIO 设置为您在应用程序中使用的相同。

千万不要在任何地方使用 CC_CONTENT_SCALE_FACTOR 来增加位置。是的,一些 GL 功能需要它,但这些功能已经提供给您,它们可以正常工作,无需任何更改。

于 2013-10-08T08:58:00.583 回答