Je fais un jeu XNA de haut en bas. Les cartes sont créées par des tuiles. Un problème que j'ai récemment remarqué est une «grille» de lignes entre les carreaux. Il n'apparaît que parfois et uniquement en fonction de la position de la caméra. Je laisse XNA gérer le positionnement, pourquoi ces lignes apparaissent-elles?
Voici une image avec les lignes:
Cependant, après avoir légèrement bougé mon appareil photo, cela revient magiquement à la façon dont il est censé apparaître:
Merci pour toute aide!
ÉDITER:
C'est le mieux que je puisse faire pour le code source, c'est un projet extrêmement volumineux et le rendu se fait sur plusieurs zones:
Boucle de rendu principale Pour les éléments dynamiques tels que les tuiles:
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
Classe:
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
Ma recherche:
J'ai fait quelques recherches et c'est là que j'ai trouvé:
- Ce problème est appelé déchirure (je crois?)
- Cela est généralement causé par l'utilisation d'un type de données à virgule flottante pour maintenir la position de la tuile (j'utilise
Integer
donc cela ne devrait pas poser de problème, non?)