Articles of 地图

将瓦片贴合到任何屏幕分辨率

我的游戏是Android的2D单屏(即非滚动)平台游戏,但这里的问题不需要代码特定的答案。 基本上,使用下面附加的graphics来显示问题会更容易。 我的游戏屏幕由25 x 12瓦的网格组成。 我已经缩放了我的视口,以便我的比例保持一致(通过在需要时引入letterboxing / postboxing) – 这是正确的。 我也通过当前的视口尺寸缩放我的瓷砖尺寸,以便它们显示与当前显示相同的尺寸。 不过,显然,将我的屏幕宽度除以25来获得拼贴大小会在右侧产生一个稍微不同的间隙。 (如果起始位置是0(左边缘))。 我也垂直地解决了这个问题,但这不是一个问题,因为我可以保持这个差距 – 请参见下面的前两个graphics。 所以,横向来说,最好的方法是“弥补”这个差距。 我知道我可以通过将所有瓷砖向右移动1/2的间隙宽度来使其更“对称”。 但是,我只会在双方都有较小的差距。 另一种解决方法是简单地在右边绘制一个额外的图块(使我的网格为26×12),但是这意味着我将绘制一些屏幕分辨率上不需要的额外图块(其中屏幕宽度除以25不会产生明显的剩余/差距)。 所以我都没有想法,真的不知道如何进行。 这些问题是如何处理的? 我知道关于graphics缩放的问题在GDS上有很多,但是他们没有回答这个问题。 这个问题特别适合以美观的方式将瓦片网格安装到多个屏幕上。 帮助将不胜感激。

OpenGL瓦片渲染

目前我正在尝试使用OpenGL 2.1,GLSL 1.2渲染TileMap。 我想画一个平局, 我用所有的瓷砖使用一个纹理,通过索引来识别每一个纹理。 每个瓦片的顶点数据是: vec2 worldPos; // the position to transform the tile Quad in world coordinates vec2 texCoord; // the uv coordinates, calculated using the tile index, by CPU (top-left corner). 但是我无法find一种方法来绘制一个绘图函数: – uv坐标不能在着色器中计算,因为顶点着色器不知道正在处理的四边形的哪个角落。 – 不能通过元素绘制,因为我的四元顶点数据只包含4个顶点,存储重复的顶点是一个内存浪费。 只有当我可以为顶点(0,1,2,3,0,1,…)使用单独的元素缓冲区。 有人有什么建议我应该怎么做? 谢谢!

2D游戏大地图的背景图像

更新:这个问题是一般的,不是特定于Sprite Kit或单一语言/平台。 我正在用Sprite Kit来制作2D侧卷轴。 现在地图的背景是手绘的,肯定比视网膜显示更大,所以地图可以跨越两个以上的屏幕。 我想像加载这样一个巨大的形象可能意味着麻烦,我不打算使用平铺。 我不确定Sprite Kit如何分割大于最大纹理大小的图像,如果是的话。 我可以自己分割图像,并为背景的每个部分使用更多的精灵。 通常的处理方法是什么?

如何创建2D游戏的网格?

所以我现在正在为我的电子游戏写引擎。 我几乎整合了Tiled(我认为),所以我应该很快就有一个地图创建者。 我的问题是,我怎么实际上做网格? 我真的很困惑。 如果我创建一个大的地图,例如20×20的大小为32×32(屏幕大小为640×640)的网格,那我该怎么办呢? 比方说,我有创建一个窗口的代码,然后放置一个我可以移动input的玩家精灵,没关系。 如果我使用一个与屏幕一样大的地图,那么地图上的每个像素也是游戏屏幕上的一个像素。 映射是确切的。 现在如果我有一个2000×2000的地图,会发生什么? 我的角色将不得不继续移动,并移动地图(或者相机集中在玩家移动)。 然后我再也不能说屏幕正好映射到地图的像素位置。 我尝试制作一个Grid类,将屏幕区域映射到32×32的磁贴,但我不确定这是否有意义。 一旦地图移动,每个瓦片将不得不更新其信息,或什么。 我只是在这里很困惑。 我如何真正地制作瓷砖和网格,并将它们映射到我从平铺中获得的数据,还是我自己制作的? 有没有我可以看的源代码的很好的例子?

当你不知道他们要去的地方的时候如何绘制边缘。

这更像是一个艺术问题,而不是一个编程问题,但仍然是游戏开发。 我有一个瓦片引擎,从瓦片随机制作一个地图,每个瓦片是一个方形的3×3网格。 问题在于,每块瓦片上的元素都很好地协调工作,比如沿着三个方格的森林和另一个方格的草地,发动机可以将任何东西如河stream,草地,高山或者更多的森林放在一起。 我怎么能画出瓷砖的边缘,使它看起来不错,不管它们是什么地方?

通过相邻的瓷砖碰撞检测 – 精灵太大

我已经设法为基于瓦片的jump'n'run游戏(用C ++ / SFML编写)创建了一个碰撞检测系统,在这个系统中,我检查每个更新中玩家包围的瓦片的值,然后让玩家移动相应地(即在右侧有障碍物时向左移动)。 当玩家精灵不是太大时,这可以正常工作:给定5×5像素的拼贴大小,我的解决scheme工作得非常好,精细的3×4和5×5像素。 我的问题是,我真的需要玩家是相当巨大的(34×70像素相同的瓷砖大小)。 当我尝试这个时,似乎有一个无形的,特别是较小的边框,玩家与障碍物碰撞,玩家似乎也强烈地震动。 这里用一些图片来解释我的意思: 作品: 不起作用: 另一个不起作用的例子: (球员不下落,他留在角落里) 我的代码获取周围的瓷砖看起来像这样(我删除了一些部分,使其更好的可读性): std::vector<std::map<std::string, int> > Game::getSurroundingTiles(sf::Vector2f position) { // converting the pixel coordinates to tilemap coordinates sf::Vector2u pPos(static_cast<int>(position.x/tileSize.x), static_cast<int>(position.y/tileSize.y)); std::vector<std::map<std::string, int> > surroundingTiles; for(int i = 0; i < 9; ++i) { // calculating the relative position of the surrounding tile(s) int c = […]

解决在2D侧滚动瓷砖绘图的最佳方法?

我仍然无法弄清楚哪个是更加理智的方式/更容易和更快速的方式来绘制地图在屏幕上..我的意思是我将使用我的地图在我的侧面滚动许多瓷砖..但问题是我使整个图像的地图像一个.png文件为每个地图(示例),或者我应该绘制的代码像一个for循环在c + + ..哪种方式是最推荐的或我在哪里可以读取哪种方式是最好的。

如果一个4x游戏每个星球types使用一个类?

我正在尝试为自己的教育目的制作一个小型的4x游戏。 目前我有像IStarSystem这样的接口,其中包含IPlanet列表。 我的下一步是做类实现这些接口。 制作像BarrenPlanet , GasPlanet等等的类是更好的吗?还是制作一个Planet类并在XML文件中定义不同types更好?

你如何在Tiled中使用自己的tileset?

我想创建一个2D平台,我明白,使用瓷砖可以帮助你很多。 我认为很多人使用地图编辑器“平铺”,但我找不到任何地方,你如何从你创建的给定的图像做你自己的瓷砖。 今天我花了大部分时间在Google上search这个参考,没有太多的运气..唯一的提示来自几个python脚本,但我没有设法让他们工作我错过了什么?

C&C和WarCraft支持的旧2D RTS游戏的地图尺寸是多less?

我正在寻找旧版2D游戏“命令与征服”和“魔兽争霸1”和“魔兽争霸2”的地图大小。