问题标签 [tile-engine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
12153 浏览

physics - 2d 平台物理

那是一个长长的假期周末,所以我又遇到了编码错误并开始玩弄:

马里奥 http://gfilter.net/junk/tileengine.jpg

我写了一个基本的瓦片引擎,但以前从未尝试过,我真的很努力处理精灵碰撞检测和实现重力的真实物理。

对于任何其他游戏爱好作家,您能否指出一些关于解决此问题的最佳方法的演练?

更新:

我想我会分享一份进度报告:

http://www.youtube.com/watch?v=-RKNQ2UiiLY <-- 游戏实战

它仍然非常有问题,但碰撞检测大部分都在工作,我已经开始研究其他一些功能(例如碰撞块(注意错误)和与敌人互动)。

马里奥仍然像在月球上一样走路,我正在使用这些常数,有什么建议可以调整它们以获得更真实的感觉吗?

0 投票
7 回答
4743 浏览

optimization - 规划 2D 瓦片引擎 - 性能问题

正如标题所说,我正在充实 2D 平台游戏引擎的设计。它仍处于设计阶段,但我担心我会遇到渲染器问题,如果它们会成为问题,我想避免它们。

我将 SDL 用于我的基础库,并且游戏将设置为使用单个大数组Uint16来保存图块。这些索引到引擎的所有部分使用的第二个“图块定义”数组中,从碰撞处理到图形例程,这是我最关心的问题。

图形引擎设计为在 640x480 分辨率下运行,具有 32x32 瓦片。每帧每层绘制 21x16 个图块(用于处理滚动时显示的额外图块),最多可以绘制四个层。层只是单独的瓦片数组,但瓦片定义数组对所有四个层都是通用的。

我担心的是我希望能够利用这个引擎利用透明胶片和动画图块,而且由于我对设计不太熟悉,我担心我目前的解决方案效率太低运作良好。

我的目标 FPS 是每秒 60 帧,并且在绘制所有四个图层的情况下,我正在查看每秒需要绘制 21x16x4x60 = 80,640 个单独的 32x32px 块,以及精灵需要许多奇数大小的块,并且这似乎有点过分了。那么,有没有更好的方法来渲染我拥有的瓷砖地图设置?我正在寻找使用硬件加速来绘制瓷砖地图的可能性,如果它有助于提高性能。我也希望能够在稍微旧一点的电脑上运行这个游戏。

如果我在寻找太多,那么我认为降低引擎的能力是不可能的。

0 投票
2 回答
556 浏览

c++ - 映射分支平铺路径

我正在开发一款游戏(并且已经问了几个问题),现在我还有一个问题要问你们。

此游戏中的关卡格式设置为 Uint16(我正在使用 SDL)的 tilemap,它们是 tilemapData 结构数组的索引。tilemapData 结构的位之一是 isConductive 位/布尔值。

该位的使用基本上是创建将各种对象连接在一起形成单个“powerNet”的路径。我在下面有一些关于当前方法的代码(它有效,但我会在之后解释为什么我真的讨厌它)

请注意,返回 false 意味着函数失败(在这种情况下,它没有正确链接所有对象)。

我担心的是,由于堆栈溢出,在更复杂的地图上行走导电瓷砖的功能会完全失败。对于如何使用这些功能降低这种风险有什么想法?如果需要,我可以提供有关使用的结构的更多信息。

我考虑过修改代码,以便recursiveCheckTile仅在到达交汇点时进行递归调用,否则只会交互地遵循其所在的导电路径,但这似乎仍然只是部分解决方案,因为我无法提前知道路径可能是多么扭曲或分支。

如果它有所作为,速度在这里完全不重要,因为这个函数只在地图被使用前处理时运行一次,所以使用一点额外的时间不会有什么坏处。

0 投票
3 回答
14534 浏览

html - HTML5 平铺引擎

我在哪里可以找到<canvas>用于编写 2D 游戏的 HTML5 磁贴引擎?

0 投票
2 回答
1139 浏览

c# - 如何找到在位图中绑定区域的所有矩形?

我有一个问题:我的图块引擎需要一个算法。

我有一个二维数组来存储我的不可行走的瓷砖。

现在我想实现一个光引擎,但是这个引擎需要阴影外壳。

所以我需要一个算法来创建这些阴影外壳。

我需要一组矩形来绑定数组的不可行走部分(具有1s 的单元格)
例如:

http://makerland.de/Zerlegt.png

黑色瓷砖是1s;我需要找到完全包围它们的一组红色矩形。

0 投票
1 回答
625 浏览

javascript - 使 Javascript TileEngine 在 Canvas 中可滚动

代码的基础来自 John E. Graham 的博客http://johnegraham2.com/blog/2010/09/25/project-javascript-2d-tile-engine-with-html5-canvas-part-4-using-进一步优化的区域/

它非常适合绘制屏幕的瓷砖,但我一生无法弄清楚如何根据向上、向下、向左或向右键一次调整 1 行/列。

这是一个透明度示例,可帮助可视化区域http://simplehotkey.com/Javascript/canvas.html(加载 1,188 个图块的位置,但只绘制了几百个来填充屏幕)我让它加载了一个包含 70,000 个的数组条目,它仍然很快,因为它只在屏幕上绘制什么,但无法弄清楚如何根据输入滑动所有内容......

我想出了几个想法,但不确定最好的方法是什么。

此处显示一屏的瓷砖:

其中 0 是墙砖(围绕周边),9 是地砖,7 是门和其他几个随机砖。

这正是加载到屏幕上的内容,但我无法弄清楚如何根据输入向上、向下、向左、向右移动所有 1 个图块。

我现在倾向于的一个想法就是使用上面的数组作为渲染的基础,并根据键盘输入从另一个数组以某种方式将新值输入其中。也许从另一个更大的数组中切片(保存整个级别的所有图块)并使用该切片来填充实际渲染的数组???

那就是每帧都替换每个图块...

为了获得我正在使用的玩家输入:

另一种选择是尝试调整屏幕上已经存在的图块并添加新图块,但该引擎没有使用全局变量,所以我不确定如何根据输入以编程方式影响图块引擎......就像我可以添加另一种方法(inputReaction(num))并从我的键盘输入(console.log())触发一些操作,但我无法访问实际绘制瓷砖的其他方法。或者也许我必须复制该对象,更改它并返回它?但这很复杂。

我认为调整输入“引擎”(上面的数组)的数组值可能更容易,而不是改变引擎如何计算正在绘制的内容。你能证实这一点吗?

0 投票
1 回答
1359 浏览

c# - C# XNA 随机瓦片引擎

当我这样做时,它只会闪烁瓷砖并不断重绘它们。我该怎么做才能获得仅绘制一次的随机效果?有没有办法我可以用鼠标点击这些图块并让它们改变?另外,有没有办法让一个瓷砖比其他瓷砖更流行?

0 投票
1 回答
628 浏览

xna-4.0 - 平台游戏瓦片引擎——关于如何处理长瓦片的建议

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

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

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

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

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

桌椅:

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

植物和椅子:

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

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

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

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

http://spritesheetpacker.codeplex.com/

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

0 投票
1 回答
281 浏览

map - 靠近地图边缘时相对于玩家绘制的项目

我有一个瓷砖引擎,一切都很好,我的玩家四处走动都很好,我正在添加项目,玩家总是在屏幕的中心,直到他接近世界的边缘然后他开始靠近边缘。

当我在世界中绘制物品时,它们绘制得很好,除非玩家离开中心(在世界边缘)。我只是无法解决如何解决这个问题。

它非常自我解释,传入世界以获取尺寸(w.worldDimensions.x宽度和.y高度),项目用于获取i.xi.y(游戏世界中的位置,而不是屏幕上),用于绘制相对的玩家(包含.x.y位置),然后是屏幕尺寸。

0 投票
1 回答
198 浏览

c# - 如何在 C#/XNA 中修复这个磁贴引擎

我一直在为我的一个项目开发一个基本的瓦片引擎,并设法使其达到相当实用的状态。然而,一个主要问题是,当我运行代码时,图块将始终在 (16, 0) 而不是 (0, 0) 处开始绘制:

以及问题的图片:

在此处输入图像描述

我知道我的 for() 循环从 x = 1 开始,但即使用 if ((x - 1) ...) 来抵消它也不起作用。我真的很难过。