2014-03-26 47 views
1

我制作了一个android/ios游戏,并且它在Android上工作正常,只有一个我发布了,但是说我做了一个纹理渲染50px×50px其他设备上的像素密度使纹理呈现不同有没有一种办法可以让固定的世界坐标,以便将图像呈现相同的但不是随机大小的纹理渲染,它只是扩展下降/上升Libgdx支持所有Android像素密度

+0

使用'Camera'这一点。如果你使用最新的libgdx版本,你也可以使用'ViewPort'。 – Springrbua

+0

@Springrbua我正在渲染使用纹理将影响如何绘制到屏幕上?使用相机和视口将影响任何纹理定位实施时,或者我可以在ApplicationListener类中实现这一点,一切都会自动调整?另外我将如何去实现这个?非常感谢你的帮助我只是不想放弃我的游戏 – Frogzer

+0

永不放弃,你总是可以学习新的东西,这并不难。我写了一个关于相机的答案,但对于视口你必须看看自己,因为我从来没有使用它们,我仍然使用9.9版本。 – Springrbua

回答

4

您可以设置一个Camera这样的:

  1. new OrthographicCamera(viewPortWidth, viewPortHeight) for 2D游戏
  2. new PerspectiveCamera(viewAngel, viewPortWidth, viewPortHeight)为3D。

我现在用2D保持住。您设置的视口会自动放大以适应窗口/屏幕。因此,如果您在1600 * 900像素的窗口上使用80宽度和45高度的视口,则每个单位都会放大到20像素。在800 * 450像素的屏幕上,一台设备只能使用10px。 默认情况下,相机的原点(P(0,0))位于屏幕中间。所以如果你在x = 0,y = 0时渲染一个Texture,宽度为1,高度为1,它的左下角在屏幕中间,它是20px * 20px大(在1600 * 900屏幕)。 要使摄像头始于屏幕的左下角(正如我们通常所需的那样),您需要通过调用camera.translate(viewPortWidth/2, viewPortHeight/2)或将其位置设为camera.position.set(viewPortWidth/2, viewPortHeight/2)来移动它。之后,您必须致电camera.update(),让其知道您已将其移动。在相机每改变一次(旋转,平移...)。
要使用本相机呈现您的Texture s,您必须设置 s projectionMatrix,这就像世界的视图或类似的东西。为此,请致电:spriteBatch.setProjectionMatrix(camera.combined)。然后,如果你用这个spriteBatch绘制一切应该工作。

东西可以读:Projection, viewport, camera The new Viewports

+0

圣洁的废话谢谢@Springrbua我会尽快回复您 – Frogzer

+0

对不起,您可以问这个愚蠢的问题,但是用视口怎么说80宽和45高你怎么知道它会等于20px一个1600 * 900像素的屏幕?并且使用80 * 45就像隐形坐标一样? – Frogzer

+0

当您设置摄像机视口的宽度时,您会说:我想在屏幕宽度上有80个单位。 ays我有1600px,我想有80个单位,所以1600/80 = 20像素/单位。 – Springrbua