ฉันกำลังสร้างเกมบน XNA แผนที่ถูกสร้างขึ้นโดยไทล์ ปัญหาที่ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้คือ 'เส้นตาราง' ของเส้นแบ่งระหว่างแผ่นกระเบื้อง มันจะปรากฏขึ้นบางครั้งเท่านั้นและขึ้นอยู่กับตำแหน่งของกล้อง ฉันปล่อยให้ XNA จัดการตำแหน่งทำไมเส้นเหล่านี้ถึงปรากฏขึ้น
นี่คือภาพที่มีเส้น:
อย่างไรก็ตามหลังจากที่ขยับกล้องของฉันไปเพียงเล็กน้อยมันน่าอัศจรรย์ที่จะกลับไปสู่ลักษณะที่ควรจะปรากฏขึ้น:
ขอบคุณสำหรับความช่วยเหลือใด ๆ !
แก้ไข:
นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้สำหรับซอร์สโค้ดนี่เป็นโครงการขนาดใหญ่มากและการเรนเดอร์มันทำได้หลายด้าน:
Main Render Loop สำหรับองค์ประกอบแบบไดนามิกเช่นไทล์:
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
ดังนั้นนี่ไม่ควรเป็นปัญหาใช่มั้ย)