- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
见鬼,感谢您的阅读,
我最近开始从事 2D Android/桌面项目,并且一直试图以我想要的方式显示我的 Sprite 。
我有一个 144(w) x 160(h) 的背景 Sprite ,我希望能够将其他 Sprite 相对于背景 Sprite 上的点定位到屏幕上。
我想我明白,如果我创建一个 144 x 160 的相机/视口(viewport),我将能够使用基于 144 x 160 背景 Sprite 的坐标将我的 Sprite 定位在背景 Sprite 上。这将适用于移动设备上的不同屏幕分辨率,但尽管尝试了不同的视口(viewport)类型(FillViewport、FitViewport 等),但仍会拉伸(stretch)背景 Sprite 。
我想要实现的是让我的背景 Sprite 在不同的屏幕分辨率下保持其比例,并且能够将其他 Sprite 放置在背景 Sprite 上。 Sprite 的放置需要在不同的分辨率下工作。
如果我的解释令人困惑或没有意义,我深表歉意。我会添加一些图像来帮助解释,但我认为可以在帖子中添加任何图像。不过,我认为 TLTR 问题是“在多种屏幕分辨率上显示 Sprite ,同时保持正确的比例并以跨多种分辨率工作的方式缩放到屏幕大小和 Sprite 位置的正确方法是什么?”
谢谢,欢迎提问
最佳答案
FitViewport 会执行您所描述的操作(保持纵横比),但在某些设备上会出现黑条。根据您在 libgdx 论坛上发布的代码,我发现您忘记在调整大小方法中更新视口(viewport),因此它的行为不符合设计。
但是,对于像您所描述的静态相机游戏,我认为最好的解决方案是围绕在任何设备上始终可见的某个区域来规划您的游戏,例如从 (0,0) 到(144,160)。然后使用宽度和高度分别为 144 和 160 的 ExtendViewport。在 resize
中更新视口(viewport)后,您可以将相机移动到矩形的中心,如下所示:
private static final float GAME_WIDTH = 144;
private static final float GAME_HEIGHT = 160;
public void create(){
//...
viewport = new ExtendViewport(GAME_WIDTH, GAME_HEIGHT);
//...
}
public void resize(int width, int height){
viewport.update(width, height, false); //centering by putting true here would put (0,0) at bottom left of screen, but then the game rectangle would be off center
//manually center the center of your game box
Camera camera = viewport.getCamera();
camera.position.x = GAME_WIDTH /2;
camera.position.y = GAME_HEIGHT/2;
camera.update();
}
现在,您的 144x160 框位于屏幕中央,就像使用 FitViewport 一样,但您不会被锁定为黑条,因为您可以使用任何方法在 144x160 区域之外绘制额外背景喜欢。
就您的情况而言,144:160 是比任何屏幕更宽的纵向长宽比,因此您无需担心填充游戏矩形两侧的区域。任何手机或平板电脑的最窄长宽比似乎都是 9:16,因此您可以计算一下游戏矩形上方和下方应绘制多少额外背景,以避免在任何设备上显示黑色。
在本例中,计算结果为您要填充的矩形上方和下方 48 个单位:
编辑:我从您在 libgdx 论坛上的帖子中看到,您希望游戏区域停留在屏幕顶部,而其余区域用于游戏控制。在这种情况下,我会像这样更改调整大小方法,因为您希望游戏区域的顶部边缘与屏幕的顶部边缘对齐。您还可以计算控件区域底部在 Y 轴上的位置。 (顶部位于 Y=0。)
public void resize(int width, int height){
viewport.update(width, height, false);
//align game box's top edge to top of screen
Camera camera = viewport.getCamera();
camera.position.x = GAME_WIDTH /2;
camera.position.y = GAME_HEIGHT - viewport.getWorldHeight()/2;
camera.update();
controlsBottomY = GAME_HEIGHT - viewport.getWorldHeight();
}
我不确定您打算如何进行控件,但它们需要适合 (0,controlsBottomY)
到 (GAME_WIDTH, 0)
的框。请记住,有些手机的纵横比小至 3:4(尽管现在很少见)。因此,对于 0.9 的纵横比,在 3:4 的手机上,只有屏幕底部 17% 的区域可用于控制。如果只有几个按钮,这可能没问题,但如果您有虚拟操纵杆,则可能会出现问题。
关于java - LibGdx - 缩放 Sprite 、相机和视口(viewport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560548/
我想检测鼠标何时离开顶部的视口(viewport)(可以说是向北)。我在网上搜了下How can I detect when the mouse leaves the window? .是一个好的开始
我有一个 HTML 元素,宽 1000 像素,高 850 像素(它实际上是一个 iFrame,在 canvas 标签上包含一个 HTML5 游戏,但我希望这不会有影响)。 我希望元素在平板电脑上呈现,
我正在创建一个 2D 引擎,我想实现对接,所以我需要创建一个视口(viewport)并将屏幕渲染为纹理。 为了渲染视口(viewport),我将帧缓冲区保存到一个 FrameBufferObject
大多数移动页面都提供元视口(viewport)尺寸,例如 出于 iphone 向后兼容的原因,这将在宽度上模拟 320px... 但是当我通过 javascript 检查时 window.screen
我有一个客户提供的宽度为 1440 像素的网站。客户要求我使用以下方法将视口(viewport)设置为 1440 像素对于桌面浏览器,小于 1440 像素的屏幕不显示滚动条。 它确实适用于移动设备、i
我刚刚读了一篇 nice article on viewport这给我留下了几个关于移动设备上的视觉视口(viewport)与布局视口(viewport)的问题。 the width and the
layout viewport和visual viewport的解释可以找到here . 我已阅读 here和 here那个应该使用 如果想针对移动设备优化网页。 我想了解这对横向模式下的 ipho
我想用javascript获取视口(viewport)宽度。但不是常见的虚拟视口(viewport)。我需要逻辑硬件视口(viewport),在我的情况下,它不是设置视口(viewport)元标记的选
我有一个 menu 元素,如果 menu 元素变得在视口(viewport)之外,我想固定到浏览器视口(viewport)的顶部由于滚动。从概念上讲,我的网页看起来类似于下面的示例 HTML,其中菜单
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
我只包含了“main”的 HTML 代码,因为这是我希望能够通过媒体查询控制的部分。我希望内容只能在小于 480 像素的视口(viewport)上查看,但浏览器似乎隐藏了所有视口(viewport)尺
我不知道如何描述这个,所以最好的办法是链接一个例子:http://www.pascalvangemert.nl/#/profile 无论这个人对侧边栏菜单做了什么都很棒,我很想复制它。我试过检查,但我
我遇到了一页末尾有空白的问题。据我所知,没有元素占据空间。仅当视口(viewport)设置为特定宽度时才会出现该空间。例如,它出现在宽度 940 和 400 左右,但不是 550 或非常宽。 起初我以
iPhone/iPad 等移动设备的视觉视口(viewport)和布局视口(viewport)有什么区别? 网上查了很多资料,还是不清楚。 最佳答案 视觉视口(viewport)是当前显示在屏幕上的页
我正在使用这个元标记来设置移动浏览器上的视口(viewport)大小: 和这个 css 以确保较大的图像不会导致在较小的视口(viewport)上滚动: img { max-width: 95%;
这是针对平板电脑浏览器的,它使用相对于视口(viewport)宽度/高度的尺寸。为简单起见,假设横向。 我在一个全屏容器中有两个 div,就像提供的图像一样。他们有 position:absolute
我在 opengl 中创建了一个迷宫,并且正在尝试创建一个小 map 。为此,我想到在视口(viewport)内创建一个视口(viewport)。我有三种方法,一种用于创建墙壁,另一种用于创建地板,另
所以我有 2 个屏幕:一个级别选择屏幕,使用分辨率为 720 x 405 的 FitViewport,然后是一个游戏屏幕,使用分辨率为 480 x 270 的 FillViewport,按每米像素数
无论视口(viewport)的宽度如何,我都有一个图像幻灯片,我试图将其置于视口(viewport)的中心。如果视口(viewport)比图像宽,使用 margin: auto; 很容易实现,但是,当
我有一个元素,该元素具有从屏幕边缘底部弹出并循环向下弹出(虽然不是完全向下)的动画。下面的代码对此非常有用。但是,有一个问题。当浏览器全屏显示时,百分比占旧视口(viewport)大小而不是新视口(v
我是一名优秀的程序员,十分优秀!