- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
由于性能问题,我必须将我的 map 切割成 block 。我以这种方式管理 map :
listMap[x][y] = new Tile (x,y);
我试图将此列表分成几个“ block ”以避免加载所有 map ,但没有成功,因为大 map 的 fps 不是很高。然而,当我更新或绘制时,我会用一个小的瓷砖范围来做。以下是我的处理方式:
foreach (List<Tile> list in listMap)
{
foreach (Tile leTile in list)
{
if ((leTile.Position.X < screenWidth + hero.Pos.X) &&
(leTile.Position.X > hero.Pos.X - tileSize) &&
(leTile.Position.Y < screenHeight + hero.Pos.Y) &&
(leTile.Position.Y > hero.Pos.Y - tileSize)
)
{
leTile.Draw(spriteBatch, gameTime);
}
}
}
(对于更新方法也是一样)。
所以我尝试学习像 minecraft 或 terraria 这样的游戏,并且任何两个管理的 map 都比我的大得多,fps 没有丝毫下降。显然,它们加载“ block ”。
我想了解的是如何在 Chunk 中切割我的列表,以及如何根据角色的位置显示。我尝试了很多事情都没有成功。
预先感谢您让我走上正轨!
Ps : 再次抱歉,我的英语不好 :'(Pps :我不是经验丰富的开发人员;)
编辑:
多亏了 IVlad,我获得了 10 fps 改变循环,就像这样:
for (int x = (int)(hero.Pos.X) / tileSize; x < (hero.Pos.X / tileSize) + (int)(screenWidth/tileSize); x++)
{
for (int y = (int)(hero.Pos.Y) / tileSize; y < (hero.Pos.Y / tileSize) + (int)(screenHeight / tileSize); y++)
{
if (x >= 0 && y >= 0 && x <= tileXMax && y <= tileYMax ) {
grille[x][y].Draw(spriteBatch, gameTime);
}
}
}
尽管如此,fps 仍然很低并且取决于 map 的大小而不是可见图 block 的数量。
最佳答案
您应该做的第一件事是,就像使用 Draw 方法一样,只创建/加载靠近您的图 block 。这应该可以节省一些加载 map 的时间,也可以节省一些内存。
您可以做的第二件事是直接从外部绘制它们,而不是为图 block 使用 Draw 函数,并引用每个图 block 中的纹理,就像:
//in the load method...
tileTextures = //a list/dictionary with all textures for tiles
for (int x = minX; x < maxX; x++)
for (int y = minY; y < maxY; y++)
{
spriteBatch.Draw(tileTextures[list[x,y].TextureID], list[x,y].Position);
}
这可能有用也可能没用,具体取决于您处理数据的方式。
另一件可以帮助您的事情是关于 colid 矩形。如果您使用它来进行碰撞检测,也许最好自己进行检测,例如:
void CheckCollision(Rectangle character)
{
int size = 16;
if (character.Right > this.Position.X &&
character.Left < this.Position.X + size &&
character.Bottom > this.Position.Y &&
character.Top > this.Position.Y + size)
{
//Character is colliding with tile
}
}
基本上,在大 map 中,任何减少一个图 block 分配的内存量的东西都会很好。
关于c# - 怎么办 "map chunks",像泰拉瑞亚或我的世界地图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758517/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!