问题标签 [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 投票
1 回答
326 浏览

texture2d - 我可以在像素着色器中创建切片引擎吗?

我正在尝试使用像素着色器和两个纹理创建一个平铺引擎。一种纹理将保存图块集,另一种用于保存地图。

是否可以将纹理数据作为实际(未采样)数据读取,以便我可以从地图中提取索引?

读取该像素数据的最佳方法是什么?

我只尝试了 text2D ,但这还有一些不足之处(老实说,我对像素着色器有点陌生)。

基本上,我需要一种从地图纹理中的特定像素读取实际数据并将其用作平铺纹理的整数索引的方法。假设我已经设法创建并将适当的纹理传递给着色器。

有什么想法吗?

(使用 monogame 进行地铁所以 dx 级别 9_1)

0 投票
2 回答
1189 浏览

c++ - 优化一个简单的 2D Tile 引擎(+潜在的错误修复)

前言

是的,这里有很多要介绍的内容......但我会尽我所能保持这个组织得井井有条、内容丰富且直截了当!

使用 C++ 中的HGE 库,我创建了一个简单的平铺引擎。
到目前为止,我已经实现了以下设计:

  • 一个CTile类,表示 a 中的单个图块CTileLayer,包含行/列信息以及一个HGE::hgeQuad(存储顶点、颜色和纹理信息,请参阅此处了解详细信息)。
  • 一个CTileLayer类,表示二维“平面”瓦片(存储为一维CTile对象数组),包含行/列数、X/Y 世界坐标信息、瓦片像素宽度/高度信息,以及图层的整体宽度/高度(以像素为单位)。

ACTileLayer负责渲染在虚拟相机“视口”边界内完全或部分可见的任何图块,并避免对超出此可见范围的任何图块执行此操作。在创建时,它会预先计算要存储在每个CTile对象中的所有信息,因此引擎的核心有更多的呼吸空间,并且可以严格专注于渲染循环。当然,它还处理每个包含的 tile 的正确释放。


问题

我现在面临的问题基本上归结为以下架构/优化问题:

  1. 在我的渲染循环中,即使我没有渲染任何超出可见范围的图块,我仍然会循环遍历所有图块,这似乎对较大的图块地图(即超过 100x100 行/ 64x64 平铺尺寸的列仍会将帧速率降低 50% 或更多)。
  2. 最终,我打算创建一个花哨的瓷砖地图编辑器来配合这个引擎。
    但是,由于我将所有二维信息存储在一个或多个一维数组中,所以我不知道在没有一些主要性能影响的情况下实现某种矩形选择和复制/粘贴功能的可能性有多大—— - 涉及每帧循环遍历每个图块两次。然而,如果我使用 2D 数组,FPS 下降会稍微少一些但更普遍!

漏洞

如前所述...在我的CTileLayer对象渲染代码中,我已经根据它们是否在可视范围内优化了要绘制的图块。这很好用,对于较大的地图,我注意到只有 3-8 FPS 下降(与没有此优化的 100+ FPS 下降相比)。

但我认为我计算的范围不正确,因为在地图滚动到一半后,您可以开始看到没有渲染图块的间隙(在最顶部和最左侧),好像剪裁范围的增加速度比相机可以移动(即使它们都以相同的速度移动)。

沿着 X 轴和 Y 轴,这个间隙的大小会逐渐增加,最终在大地图上占据屏幕顶部和左侧的近一半。


代码



问题

  1. 在不严重影响任何其他渲染优化的情况下,可以做些什么来解决这些架构/优化问题?
  2. 为什么会出现这个错误?如何修复?


感谢您的时间!

0 投票
3 回答
114 浏览

c# - 为什么我的瓷砖变小了?

我目前正在做一个游戏,我将在学校展示我的软件工程学科。说实话,我在 C# 方面没有经验,这就是我关注这个 TileEngine 教程的原因。但是当我在向游戏中添加图块时,我的图块被渲染得如此之小。我什至使用了 256 x 256 的图像。就像在教程视频中一样。

您可以在此处查看问题的屏幕截图。这是我的代码:

0 投票
1 回答
776 浏览

c# - 等距游戏中的对象深度排序

我有等距平铺游戏引擎(菱形地图风格),我需要对我绘制的对象进行排序。我的对象是 1x1、2x1、4x2。我该如何根据此代码执行此操作?

0 投票
1 回答
107 浏览

java - Eppleton tileengine 缺少库。net.java.canvas.GraphicsContext

我试图运行 Eppletons JavaFX tileengine,但我找不到一个库。

net.java.html.canvas.GraphicsContext

网络 --> http://jayskills.com/blog/2013/01/09/writing-a-tile-engine-in-javafx/

链接到他的 GIT 仓库 --> https://github.com/eppleton/FXGameEngine

有任何想法吗?

0 投票
0 回答
101 浏览

c# - C# XNA Tile 引擎绘制错误的瓷砖

我正在为我的第一个游戏构建一个磁贴引擎,并且我一直在逐步遵循指南(无法链接它,因为我仅限于 2 个)。但是,我对 tilemap 进行了一些修改,以便我可以继续我的项目。在测试我的程序时发现了一个错误,我希望你们能帮助我解决......

...瓷砖引擎正在绘制错误的瓷砖!

是我的 TileMap(为每个图块分配了数字),就是我的引擎绘制的。虽然它应该遵循如下所示的顺序(代码是不言自明的)

代码要点

我的代码的重要部分

Tile.class

我在哪里定义瓷砖大小并具有导航瓷砖地图以找到我的 deiserd 瓷砖的功能。

地图单元

我在哪里定义 tileID

瓦片地图

我在哪里构建地图

最后是我的绘图代码。

0 投票
1 回答
40 浏览

javascript - 为什么我的 drawChar 函数的 drawImage 没有显示?

首先,我正在尝试使用 HTML5 画布和 Javascript 为 2d 游戏制作一个非常简单的平铺地图引擎,除了我的第二个 drawChar 函数的 drawImage() 没有显示在画布上之外,一切似乎都工作正常。我知道网址很好,我已经检查了丢失的字符等,但无法弄清楚。代码如下。任何帮助表示赞赏。

PS我知道这段代码中的大部分不是“现代”或“最佳实践”,我仍在学习,只是想了解为什么会发生这个错误。谢谢。