Ich mache ein Top-Down-XNA-Spiel. Die Karten werden durch Kacheln erstellt. Ein Problem, das mir kürzlich aufgefallen ist, ist ein Linienraster zwischen den Kacheln. Es erscheint nur manchmal und nur abhängig von der Kameraposition. Ich überlasse XNA die Positionierung. Warum werden diese Zeilen angezeigt?
Hier ist ein Bild mit den Linien:
Nachdem ich meine Kamera ein wenig bewegt habe, kehrt sie auf magische Weise zu dem zurück, was sie aussehen soll:
Danke für jede Hilfe!
BEARBEITEN:
Dies ist das Beste, was ich für Quellcode tun kann, dies ist ein extrem großes Projekt und das Rendern erfolgt in mehreren Bereichen:
Hauptrenderschleife Für dynamische Elemente wie Kacheln:
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
Klasse:
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
Meine Forschung:
Ich habe einige Nachforschungen angestellt und Folgendes gefunden:
- Dieses Problem nennt man Zerreißen (glaube ich?)
- Es wird häufig durch die Verwendung eines Gleitkomma-Datentyps zum Festhalten der Kachelposition verursacht (ich verwende,
Integer
also sollte dies kein Problem sein, oder?)