当前位置: 首页 > 知识库问答 >
问题:

Libgdx Terraria克隆世界创建时间过长

濮俊美
2023-03-14

我开始在libgdx中开发terraria克隆,并生成了图块。图块被分成16x16的块,但是生成所有的块需要太长的时间。目前,我正在生成400个块(102400个块)。我是这样产生这些块的:

data = new int[width][height];
    for(int y = 0; y < height; y++){
        for(int x = 0; x < width; x++){
            data[x][y] = 1;
        }
    }
    chunks = new Chunk[chunks_x][chunks_y];
    for(int y = 0; y < chunks_y; y++){
        for(int x = 0; x < chunks_x; x++){
            chunks[x][y] = new Chunk(x, y, this);
        }
    }

区块类内部的平铺生成代码:

tiles = new Block[World.chunkSize][World.chunkSize];
    for(int vy = 0; vy < World.chunkSize; vy++){
        for(int vx = 0; vx < World.chunkSize; vx++){
            if(world.GetTile(vx + x * World.chunkSize, vy + y * World.chunkSize) >= 1)
                tiles[vx][vy] = new Block(vx * 16 + x * World.chunkSize * 16, vy * 16 + y * World.chunkSize * 16, world.data[x * World.chunkSize + vx][y * World.chunkSize + vy]);
        }
    }

生成一个如此大小的世界大约需要2分钟。我知道这是一个很大的数字,但我很好奇Terraria(或任何其他克隆)是如何设法使时间变小的。谢谢!

编辑:这是块类(http://pastebin.com/SFCkJKur)和实体类(http://pastebin.com/w3ay2nkb).

共有2个答案

樊令秋
2023-03-14

你在问题中提到了libgdx,这个引擎附带了一个制作良好地图API,可以处理图块地图并提供其他有用的功能:

关于Libgdx官方维基:

性能注意事项

虽然我们试图使渲染器尽可能快,但您可以考虑一些事情来提高渲染性能。

仅使用图层中单个切片集的切片。这将减少纹理绑定。将不需要混合的磁贴标记为不透明。目前,您只能以编程方式执行此操作,我们将提供在编辑器中或自动执行此操作的方法。不要过分使用层数。

在这里查看更多信息

齐英耀
2023-03-14

ChunkBlockclass的目的是什么?它们是用于渲染的吗?因为当你考虑的时候,你不需要这么做。你真的只需要渲染玩家当前可见的瓷砖,而不需要更多。

许多这种性质的游戏所做的就是确定玩家的当前位置,然后准确计算需要渲染哪些图块/块以及在哪里。

这里有两个很好的来源,可以让你开始做这件事:

  • https://gamedev.stackexchange.com/questions/83253/is-there-any-way-to-load-pieces-of-a-tile-map-as-and-when-needed-and-not-the-en
  • 基于Java Tile的游戏性能

另一方面,ChunkBlockclasses是否仅用于包含构成世界的数据?在这种情况下,您也不需要初始化它们。您应该以一种更轻量级的方式存储数据-可能在文件系统中。

 类似资料:
  • 我正在开发一个flappy bird克隆,我真的被我想要创建的按钮卡住了。对不起,我知道这是一个基本问题,但我是初学者,我真的需要你的帮助。所以,游戏已经基本完成了,但是我想做一个按钮来做同样的事情,而不是触摸整个屏幕让一只鸟跳起来。这是我的InPurthandler课程: 我在GameScreen类中创建了一个舞台和一个演员(按钮)(它不工作),并在屏幕上显示,但我不知道下一步该怎么做。再一次,

  • 问题内容: 我想知道如何创建JSON(JS)对象然后克隆它。 问题答案: 如何在javascript / jquery中创建JSON对象? 没有什么像JSON 对象 。JSON代表 JavaScript Object Notation ,基本上是一个字符串,它编码类似于JavaScript对象常识的信息。 但是,您可以使用创建这种编码(这将导致 字符串 ),请参见JavaScript中的JSON。

  • 本文向大家介绍js显示世界时间示例(包括世界各大城市),包括了js显示世界时间示例(包括世界各大城市)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js显示世界时间的方法。分享给大家供大家参考,具体如下: 对JavaScript时间与日期显示感兴趣的朋友还可以参看本站在线工具: 在线世界各地时间查询 在线万年历日历 网页万年历日历 更多关于JavaScript相关内容可查看本站专题:《J

  • 问题内容: 我如何获得当前时间?(在JavaScript中) 不像您的计算机时间: 但是真实的世界时间呢? 我是否需要连接到服务器(很可能是,是哪一个?以及如何从中获取时间?) 我从Google进行的所有搜索都返回。 编辑: 如果用户的计算机时间错误,我想避免显示不正确的时间。 问题答案: 首先,要获得准确的GMT时间,您需要一个值得信赖的来源。这意味着某个服务器在某处。Javascript通常只

  • 问题内容: 如何克隆 Java并同时在Java中克隆其项目? 例如,我有: 我希望其中的对象与狗列表中的对象不同。 问题答案: 你将需要迭代这些项目,然后逐个克隆它们,然后将克隆放入结果数组中。 显然,要使该方法起作用,你将必须使你的类实现接口并重写该方法。

  • 我想克隆git仓库与TortoiseGit的帮助下,但我得到错误: 错误:SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:访问时证书验证失败https://git.assembla.com/pplconnect-PL.webserver.git/info/refs?service=git-上载包致命:HTTP请求失败 git