OpenGL,C ++ - >你如何在屏幕上布置物体?

时间:2013-06-08 18:31:31

标签: c++ opengl layout cocos2d-iphone cocos2d-x

当我以前编写java代码时,有一些布局管理器,如“网格包”和框。

我正在使用Cocos2D-X进行游戏,并且在屏幕上布置对象时遇到了麻烦,因此它们不是硬编码位置,而是基于布局。设备之间的像素差异是造成我的问题的原因。

我知道Cocos2D有办法解决这个问题,但我的作品质量很大,质量很高,我想根据设备调整尺寸。

所以我在考虑使用原生的OpenGL,但是我可能无法弄清楚是否有布局管理器已经可用。

有人可以讨论在OpenGL中布局对象的方法吗? C ++

2 个答案:

答案 0 :(得分:0)

OpenGL具有Viewport的概念。这是您要绘制的屏幕/窗口坐标框。设置视口后,您现在使用的是有时称为相机坐标的视图。

摄像机坐标从视口最左侧的-1.0到极端的1.0。类似地,Y坐标在极端底部为-1.0,在极端顶部为1.0。视口之外的任何东西都不是绘制的。

您的模型可以存在于您喜欢的任何坐标系中。然后使用转换矩阵将对象转换为相机坐标。

答案 1 :(得分:0)

不需要为此而去Opengl,而不是以像素为单位来定位你的作品;你实际上可以根据屏幕百分比来定位它们。

如果是背景图片,您可以将其定位      CCSize size = CCDirector :: ....-> getWinSize();      x = size.width / 2;      y = size.height / 2;      图像 - > setPosition两种(X,Y); 如果图像的锚点是中心,则图像将居中。

如果你有很多艺术品,那就不一样了。

增加更多(更新)

retina = 2048×1536  
normal = 1024×768
retinaWidth = normal.width * 2;//(2048)
retinaHeight = normal.height * 2;//(1536)


spriteInNormalRes{
    x = 250px(which you will define with the percentage, in my first answer)
    y = 264px(which you will define with the percentage, in my first answer)
}
spriteInRetinaRes{
    x = spriteInNormalRes.x * 2 
    y = spriteInNormalRes.x * 2 
}

你可以加倍x,y来定位精灵。  +自定义scaleRatio,以您想要的大小调整大小。

注意:您不一定要将值加倍,为您测试正确的值。