我正在制作自上而下的XNA游戏。地图是由图块创建的。我最近注意到的一个问题是磁贴之间的线条“网格”。它仅在某些时候出现,并且仅取决于相机的位置。我让XNA处理定位,为什么这些行显示出来?
这是带有线条的图片:
但是,将相机稍微移动一点之后,它神奇地回到了应该出现的样子:
谢谢你的帮助!
编辑:
对于源代码,这是我能做的最好的事情,这是一个非常大的项目,并且在多个区域进行渲染:
主渲染循环 对于诸如图块之类的动态元素:
spriteBatch.Begin(SpriteSortMode.Deferred, Nothing, SamplerState.LinearClamp, Nothing, Nothing, Nothing, Matrix.CreateTranslation(CameraX, CameraY, 0))
Mode.Render(spriteBatch, False)
For Each j As [Delegate] In DynamicInjectionList
j.DynamicInvoke(spriteBatch)
Next
DynamicInjectionList.Clear()
spriteBatch.End()
Mode.Render
:
For x As Integer = 0 To GRIDMAX - 1
For y As Integer = 0 To GRIDMAX - 1
For z As Integer = 0 To 2
Dim ter As TiledTerrain = Terrain(x, y, z)
If ter IsNot Nothing Then
sb.Draw(CBaseClient.TextureLibrary("TileMap"), New Rectangle(x * GRIDSIZE, y * GRIDSIZE, GRIDSIZE, GRIDSIZE), New Rectangle(ter.Texture_X, ter.Texture_Y, GRIDSIZE, GRIDSIZE), Color.White)
End If
Next
Next
Next
TiledTerrain.vb
类:
Imports ProtoBuf
<ProtoContract()> _
Public Class TiledTerrain
<ProtoMember(1)> _
Public Property X As Integer
<ProtoMember(2)> _
Public Property Y As Integer
<ProtoMember(3)> _
Public Property Z As Integer
<ProtoMember(4)> _
Public Property Texture_X As Integer
<ProtoMember(5)> _
Public Property Texture_Y As Integer
End Class
我的研究:
我已经对其进行了一些搜索,这是我发现的:
- 这个问题称为撕裂(我相信吗?)
- 通常是由于使用浮点数据类型来保持图块位置(我正在使用,
Integer
所以应该不会有问题吧?)
您如何绘制瓷砖?粘贴您的图形代码和所有其他相关代码,我们严重需要更多信息:)问题可能与舍入错误/精度有关。
@JaakkoLipsanen,在那里,我已经添加了一些代码:)
—
Freesnöw
关于瓷砖之间的线条的问题已得到回答,但我注意到瓷砖上也有线条(例如,草质地较差)。如果您也想解决该问题,请阅读以下内容:gas13.ru/v3/tutorials/sywtbapa_almighty_grass_tile.php
—
丹