Articles of 地图

渲染地图android错误

我试图读取这个文本文件,并在屏幕上呈现相应的瓷砖。 阅读地图的代码如下: private void loadMap(InputStream is) throws IOException { ArrayList<String> lines = new ArrayList<String>(); int width = 0; int height = 0; BufferedReader reader = new BufferedReader(new InputStreamReader(is)); while (true) { String line = reader.readLine(); if (line == null) { reader.close(); break; } if (!line.startsWith("!")) { lines.add(line); width = Math.max(width, line.length()); } } height = […]

在一个圆圈内的Libgdx形容为限制者

我遇到了一个问题,那就是我的小实体会被放在我的雷达之外。 当时我是这样解决的:确保对象在圈内,但这并不是最优的,因为我需要对不同的权限大小进行变化,这会导致更多的问题需要解决。 那么有没有办法,我可以做到以下几点: 画圆内的所有项目,并确保没有任何东西在外面绘制 我想到了一些东西,比如一个画圆圈的canvas,它画出了所有的东西,但是只画出了那个边界。 圆内的点和线具有可变的宽度/高度。 我宁愿绘制所有东西,然后把其他东西切掉。 提前致谢! €dit:天哪忘了一件重要的事情:我用一个造型师画出这些东西,所有东西都是正方形的,而且可能不会是多边形

用移动实体渲染等距世界的最快方法?

我有一个等轴菱形的世界。 世界由像房间等距的飞机组成。 房间的墙壁和地板以及房间内的所有障碍物和物品都是等距实体。 所以我有一个与世界上每个现有对象的列表。 每个对象都有自己的坐标。 x,y和z。 x从上到下,y从上到下,z直线上升。 每个对象也有一个等长的宽度和高度属性。 现在我必须正确渲染这个世界。 我相当确定,唯一的一个艰难的步骤是按照其深度对每个对象进行sorting,而当世界上没有任何变化时,这并不难。 但是,当然一切都会改变……我想弄清楚一个非常快的分拣系统,所以它不会做太多不必要的工作。 我结束了多篇文章,说鸽子sorting是要走的路。 但这真的是正确的解决scheme吗? 这不会导致渲染故障? 我也读过,我应该使用拓扑sorting。 ( https://en.wikipedia.org/wiki/Topological_sorting )。

如何正确使用SDL视口?

我对SDL2视口非常困惑,我做了一些search,以了解如何实现它,但人们不断提及像我的游戏中没有的“世界坐标”之类的东西。 问 :我是否甚至需要世界坐标来使SDL2视口正常工作? 如果是,我该如何执行? 我现在遇到了一个问题,如果我的视口太靠右了,整个窗口就会变成绿色,就像停止渲染我所有的精灵一样。 这里有一个GIF向你展示我的意思: 正如你所看到的,每当我向右或向下走时,整个屏幕都会变绿。 我以为这可能是因为我没有使用世界坐标,但我不知道我只是猜测在这一点上的东西… 我目前的代码移动视口,绘制它,如下所示: 创建视口/相机: Camera::Camera(Uint16 x, Uint16 y, Uint16 w, Uint16 h) { // Sets up the viewport positions and sizes viewport.x = x; viewport.y = y; viewport.w = w; viewport.h = h; // Sets the viewport so that SDL uses it SDL_RenderSetViewport(Window::GetRenderer(), &viewport); } 绘制视口:(每帧调用) void Camera::DrawCameraViewport() { […]

程序生成非矩形表面的高度图

我正在为一个大陆开展程序性的地形生成工作,这意味着我需要在大陆周围形成一个广泛的丘陵,山脉和山谷。 对于山区,我采用了阿米特的岛屿生成algorithm ,这个algorithm生成了相当漂亮的山峰,有着非常清晰的山脊,山坡以及其他所有的山峰。 现在我的问题是一些平滑的丘陵地形。 由于我的大陆六边形的性质,网格被细分为三角形。 另外,由于需要多个山脉/山丘/山谷,我还将我的大陆分割成多个扇区,然后由于扇区的边缘始终为零,因此很容易将它们缝合在一起。 所以约束如下: 表面是六角形的,这实际上不是一个问题,因为我仍然可以生成“正方形”网格的高程,并在“实际”六边形垂直上使用双线性插值。 表面不是一个正方形,我完全不知道该如何处理。 现在,大多数地形生成algorithm总是在方形表面上生成地形,中点位移,噪声等等。 他们也不会在边缘生成零值,这对我来说是一个严格的要求。 现在我真的想采用双重单纯形噪声的方法,但我需要一种方法来迫使它在我的多边形扇区(显然是变化的)的边界之外始终生成零,并且在边界内部的平滑值会形成很好的丘陵地形。 问题是…甚至可能,或者我应该寻找一个不同的方法?

TiledMap花费大量的时间来加载libgdx

我正在开发一个使用libGdx的游戏,其中一个关卡有2400 * 450个地图,每个图块有4个像素。 我也在我的游戏中使用box2d 。 我的问题是,当我在手机上运行游戏时,需要花费大量时间来加载屏幕(超过一分钟)。 我怎样才能减less这个加载时间? 我使用Tiled创建了地图,我正在使用Android Studio 。 下面是我的代码(SCALE是2.0f,PPM是4) @Override public void show() { w = Gdx.graphics.getWidth(); h = Gdx.graphics.getHeight(); camera = new OrthographicCamera(); camera.setToOrtho(false, w / SCALE, h / SCALE); camera.update(); viewport = new FitViewport(w / SCALE, h / SCALE ,camera); viewport.apply(); . . . map = new TmxMapLoader().load("maps/lvl3.tmx"); tmr = new […]

2D游戏级别的进展

我正在创建一个类似于Mario的2D游戏。 在角度有限的情况下,角色能够移动到什么水平? 现在我玩的方式是玩家在屏幕上移动,当他们到达最右边的时候,你把他们重置到屏幕的最左边(基本上是把他们传回到左边…)。 如果它们位于最左边,请将它们重置到最左边(模拟墙) 检查玩家界限: public void checkPlayerBounds (Player player) { if (player.getY() >= height-(playerHeight+25)) { player.reset("down"); } else if (player.getY() < 0) { player.reset("up"); } else if (player.getX() > width-(playerWidth)) { player.reset("right"); } else if (player.getX() < 0) { player.reset("left"); } 重启: public void reset(String val) { if (val.equals("down")) yLoc = gameboard.getHeight()-(height+30); if (val.equals("up") […]

我怎样才能将平铺水平数组转换为二维数组?

对于我游戏中的代码,我想要一个代表地图的二维数组。 我用Tiled创建了一个实际的地图,但是它产生了一维数组。 有什么办法把它转换成我想要的格式wothout在每行之后手动添加括号和逗号?

扫描二维瓷砖地图和检测区域?

我可以访问地图上的所有点/瓦片,最右上角的点是(0,0)。 最简单的遍历地图的方法是使用for循环,一个嵌套在另一个中以遍历x轴,然后是y(遍历行)。 但要解决这个问题,我可能需要以更智能的方式扫描地图。 重要的是要注意的是,我只能一次检查一个图块,看看它是什么types。 所以t.getCoordinates()会返回类似于(32,54)的内容,而t.senseTile()会返回:WALL,ROAD,OFF_MAP等 我想扫描整个地图,并将其划分为多个地区。 这些地区将有两种:“开放”和“path”。 对于开放区域,我只想填充整个区域,直到它开始触及边界,墙壁/障碍物等,并在适当的时候停止填充。 一个开放空间的规则是玩家应该能够从一个边缘到另一个边缘采取任何path,角度等,而不会碰到一些墙壁/障碍物。 对于path,有一定数量的区域是有限的瓦片,然后一个新的区域开始(见lightBlue和灰色)。 此外,path应该有入口/存在也存储,并连接到哪些地区。 例如,像这样扫描地图(见图),应该生成这些区域。 不知道使用哪个数据结构来连接它们,但是可能是一个树形/graphics如下所示: Gray | LightBlue | Pink | Yellow | \ Red Black 编辑:我认为Dijkstra的searchalgorithm可能是一个很好的起点,虽然我从来没有实现过。 这只能解决问题的一小部分。 它仍然不能解决如何检测区域。 另外,恐怕迪杰斯特拉在时间/performance方面的成本太高(两者都非常重要)。

使用玩家物理的平台游戏(tilebased)的程序级生成

我一直在寻找关于如何为我正在开发的一些成熟游戏构建2D世界生成器(tilebased)的信息。 水平应该像天花板和地板的地下室,他们将很有可能是由水平房间组成,但有时他们可以退出到一个顶/下的房间。 这是我想达到的一个例子。 我只是指洞穴部分。 我知道关卡devise在生成时不会那么棒,但我认为可以有一些足够让人们享受程序地图的东西(注意:Super Metroid Spoiler!): http://www.snesmaps.com/maps/SuperMetroid/SuperMetroidMapNorfair.html 我必须完成的一个想法是让计算机在“电脑播放器”播放时发挥一定的等级并将地下城雕刻出来。 但不知道如何处理树枝,等等…使用这种雕刻方式,我可以确信地图中至less有一个出口,而且它是可以到达的。 我的另一个想法是用一些启发式的元胞自动机做雕刻。 这里出现了一个问题:我怎么能确保所有的雕刻区域都可以被玩家访问(受重力限制等)? 我想我可以使用某种graphics,可以跟随自动机雕刻的不同地牢楼层,然后以某种方式测量玩家是否可以访问某些部分,并添加平台或新地形使其可达。