1

我正在寻找建议而不是直接帮助。

我正在 XNA 中开发一个 8 位平台游戏。我可能已经投入了 160 个小时,而且我开始遇到我所拥有的引擎的问题。它基本上是 XNA 平台游戏演示的改编/修改版本。我的所有或大部分瓷砖都是 32x32,但有些是 64 宽和 32 像素高,就像一张桌子。有些像植物一样宽32,高64。

我一次只将它们发送到 gpu 一个 .png,类似于 XNA 教程的作者进行平铺映射的方式。对于动画精灵,我确实使用角色不同帧的平铺贴图。对于瓦片地图数据,我读取了一个文本文件,就像 XNA 教程一样。

我应该如何适应又宽又高的瓷砖?我应该制作一个两层的瓷砖系统(我想我应该遵守保持简单愚蠢的规则)吗?

现在我正在使用透明瓷砖来扩展宽瓷砖。

桌椅:

椅子 http://dl.dropbox.com/u/8446900/game_screen_desk.png

.....
...h.
..d".
#####

植物和椅子:

办公桌 http://dl.dropbox.com/u/8446900/game_screen_plant.png

..p...h.
..,...,.
########

椅子是“h”,“d”是桌子,“p”是植物,“,”是透明背景图块(不与用户交互)。'"' 用于用户可以站立的透明瓷砖(延伸桌子)。问题是,如您所见,背景似乎有一个洞。

我应该制作一张实际的平铺地图并将所有内容组合成一个大 png 吗?我可以采取的另一个选择是将每个宽或高的瓷砖实际切割成两个不同的瓷砖。专业人士将如何做到这一点?我不是在寻找一个快速而肮脏的修复,而是现代平台游戏的运行方式。

更新:查看答案后,我发现了一个非常有用的工具,可以将精灵打包到一张表中。

http://spritesheetpacker.codeplex.com/

更新:我新升级的磁贴引擎速度更快,几乎同样简单。下面的建议很棒。强力推荐。

4

1 回答 1

5

首先 - 不要引入特殊宽度/高度的瓷砖。让艺术家将大对象切成单个图块(并因此在地图编辑器上重新组合它们)。每个图块都应该是带有 alpha 通道的 PNG,以便它们可以正确组合。

牢记这一点,我的建议是:

  1. 您的瓷砖应该只包含预先组合了不同对象部分的单个瓷砖,例如桌子的左侧是单个瓷砖,没有椅子的右侧是另一块瓷砖,后面还有一把椅子。(tilevalue =“dc”,也许?)

  2. 您可以定义多个层的单个图块并将它们从后到前渲染。您还可以为多个图层定义视差因子,从而很容易地在两个图层之间获得良好的视差效果。当然,玩家必须一次“存在”在一层中,否则您将不知道要为他/她的当前位置使用什么碰撞几何体。

您也不应该为每个图块创建一个纹理 - 而是一个已编译的图块表(完全像一个精灵表),以便最小化您所做的渲染状态更改的数量。每次绘制调用进行许多更改是不好的,因为每次您进行更改(当前纹理、绘制颜色或影响该绘制调用的其他内容)时,API、驱动程序以及可能的 GPU 本身都必须进行工作以更新其状态 - 这加起来很快。

请注意,这并不意味着您应该将角色和关卡放入一个巨大的精灵表中 - 由于其他原因,这很糟糕。例如,您可以:将所有与关卡相关的图块放在一个图块中,将英雄的动画图块放在另一个图块上,将所有敌人放在一个(一起)或类似的东西上。

希望这会有所帮助,否则我很乐意进一步解释。

于 2012-05-23T18:00:14.717 回答