[MDX] DX2Dengine [Update 17.4.2010 17:22] mit Sourcecode Z-Buffer-Korrektur

    • VB.NET

    Es gibt 61 Antworten in diesem Thema. Der letzte Beitrag () ist von Tibha.

      [MDX] DX2Dengine [Update 17.4.2010 17:22] mit Sourcecode Z-Buffer-Korrektur

      So. Meine DX2Dengine.

      Beschreibung:

      -DirectX 2D-Grafik einfach gemacht, zukunftsfähig, da über D3D, nicht DirectDraw
      -Vollständig dokumentiert
      -ID-system: Das spiel kann die Sprites einfach verwalten, ohne direkt die daten zu haben
      -zBuffer-system: Sprites können auf Ebenen angeordnet werden und als ganzes Gelöscht und verschoben werden

      Anforderungen:

      -Managed DirectX SDK 9.0
      -Programmiert mit .NET FW 3.5 (geht 2.0 ?)

      Projekten muss ein Verweis auf:
      Microsoft.DirectX
      Microsoft.DirectX.Direct3D
      Microsoft.DirectX.Direct3DX

      hinzugefügt werden.

      Lizenz steht im Sourcecode, aber hier nochmal:

      DX2Dengine by FAtheone (C) 2010
      Diese Klasse kann beliebig modifiziert und verbreitet werden, solange der Urheber (FAtheone)
      in der Anwendung gennant bzw. die Lizenzbedingungen weitergegeben und für die neue Version übernommen werden.
      Bestimmt für vb-paradise.de
      Besonderen dank für hosting an Jay a.k.a. Toby dig3.net


      Todo:
      -Resource-Pool, sodass es jedes Bild nur einmal als Textur im Speicher gibt und dise beliebig oft verwendet werden kann
      -Overload von InitEngine mit bereits erstelltem Device (THX to yeti2078)

      Klasse im Anhang, VB-Code kommt im nächsten Post, da sost zu lang.
      Dateien
      • DX2Dengine.vb

        (15,36 kB, 405 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „FAtheone“ () aus folgendem Grund: Neue Version

      ist mir inzwischen auch schon aufgefallen ^^
      Ich muss sowieso updaten, da die bereitgestellte Version nicht so ohne weiteres funktioniert.

      Alle Fehler wurden behoben (inkl. Linkfehler; danke an Dodo für den Hinweis)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FAtheone“ ()

      Code, 403 Zeilen

      VB.NET-Quellcode

      1. Imports Microsoft.DirectX
      2. Imports Microsoft.DirectX.Direct3D
      3. Imports System.Drawing
      4. ''' <summary>
      5. ''' DX2Dengine by FAtheone (C) 2010
      6. ''' Diese Klasse kann beliebig modifiziert und verbreitet werden, solange der Urheber (FAtheone)
      7. ''' in der Anwendung gennant bzw. die Lizenzbedingungen weitergegeben und für die neue Version übernommen werden.
      8. ''' Bestimmt für http://www.vb-paradise.de
      9. ''' Besonderen dank für hosting an Jay a.k.a. Toby http://dig3.net
      10. ''' </summary>
      11. ''' <remarks></remarks>
      12. Public Class DX2Dengine
      13. Dim WithEvents dev As Device
      14. Dim dsurface As Sprite
      15. Dim sprIDs As List(Of Long)
      16. Dim sprDat As List(Of D2DSpr)
      17. Dim zBufOffsets As List(Of PointF)
      18. Dim zBufIDs As List(Of Long)
      19. Dim pp As New PresentParameters
      20. Public Sub FinalizeEngine()
      21. dsurface.Dispose()
      22. dev.Dispose()
      23. End Sub
      24. ''' <summary>
      25. ''' Initialisiert die DX2Dengine
      26. ''' </summary>
      27. ''' <param name="forControl">Control oder Form, auf der gezeichnet wird</param>
      28. ''' <param name="screen">Auflösung der Zeichenfläche</param>
      29. ''' <param name="Fullscreen">Vollbild</param>
      30. ''' <remarks></remarks>
      31. Public Sub InitEngine(ByRef forControl As System.Windows.Forms.Control, ByVal screen As Size, ByVal Fullscreen As Boolean)
      32. Dim disp As DisplayMode = Manager.Adapters.Default.CurrentDisplayMode
      33. pp.BackBufferCount = 1
      34. pp.BackBufferHeight = screen.Height
      35. pp.BackBufferWidth = screen.Width
      36. pp.BackBufferFormat = disp.Format
      37. pp.EnableAutoDepthStencil = True
      38. pp.AutoDepthStencilFormat = DepthFormat.D16
      39. pp.SwapEffect = SwapEffect.Discard
      40. pp.Windowed = Not Fullscreen
      41. dev = New Device(0, DeviceType.Hardware, forControl.Handle, CreateFlags.SoftwareVertexProcessing, pp)
      42. dsurface = New Sprite(dev)
      43. 'SPR und ZBUF Init
      44. sprIDs = New List(Of Long)
      45. sprDat = New List(Of D2DSpr)
      46. zBufIDs = New List(Of Long)
      47. zBufOffsets = New List(Of PointF)
      48. 'Default ZBUF
      49. zBufIDs.Add(0)
      50. zBufOffsets.Add(New Point(0, 0))
      51. End Sub
      52. ''' <summary>
      53. ''' Rendert das aktuelle Bild und gibt es aus.
      54. ''' </summary>
      55. ''' <remarks></remarks>
      56. Public Sub Render()
      57. If dev Is Nothing Then Exit Sub
      58. dev.Clear(ClearFlags.Target, Color.Gray, 1.0, 0)
      59. dev.BeginScene()
      60. dsurface.Begin(SpriteFlags.AlphaBlend)
      61. For i = 0 To zBufIDs.Count - 1
      62. For Each s As D2DSpr In sprDat
      63. If s.draw Then
      64. If s.zBufID = 0 Then
      65. dsurface.Draw2D(s.Tex, s.rotPt, s.rotRad, s.Loc, &HFFFFFFFF)
      66. Else
      67. If s.zBufID = zBufIDs(i) Then
      68. dsurface.Draw2D(s.Tex, s.rotPt, s.rotRad, PointF.Add(s.Loc, New SizeF(zBufOffsets(i))), &HFFFFFFFF)
      69. End If
      70. End If
      71. End If
      72. Next
      73. Next
      74. dsurface.End()
      75. dev.EndScene()
      76. dev.Present()
      77. End Sub
      78. #Region "Sprite OPS"
      79. ''' <summary>
      80. ''' Fügt ein Sprite mit standardeinstellungen hinzu und gibt dessen ID zurück.
      81. ''' Für spezielle einstellungen können die ChangeSprite...-Prozeduren genutzt werden
      82. ''' </summary>
      83. ''' <param name="img">Bilddaten des Sprites</param>
      84. ''' <param name="pos">Position des Sprites</param>
      85. ''' <returns>ID des Sprites</returns>
      86. ''' <remarks></remarks>
      87. Public Function AddSprite(ByRef img As Bitmap, ByVal pos As PointF) As Long
      88. Dim spID As Long = GetFreeID()
      89. sprDat.Add(New D2DSpr)
      90. With sprDat.Last
      91. .Tex = New Texture(dev, img, Usage.Dynamic, Pool.Default)
      92. .Loc = pos
      93. .rotPt = New PointF(0, 0)
      94. .rotRad = 0
      95. .zBufID = 0
      96. .draw = True
      97. End With
      98. sprIDs.Add(spID)
      99. Return spID
      100. End Function
      101. ''' <summary>
      102. ''' Ändert das Bild eines Sprites
      103. ''' </summary>
      104. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      105. ''' <param name="img">Neues Bild</param>
      106. ''' <remarks></remarks>
      107. Public Sub ChangeSpriteImage(ByVal id As Long, ByVal img As Bitmap)
      108. If sprIDs.Contains(id) Then
      109. sprDat(sprIDs.IndexOf(id)).Tex = New Texture(dev, img, Usage.Dynamic, Pool.Default)
      110. Else
      111. Throw New SpriteIDNotValidException("ChangeSpriteImage", "id", id)
      112. End If
      113. End Sub
      114. ''' <summary>
      115. ''' Ändert die Position eines Sprites
      116. ''' </summary>
      117. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      118. ''' <param name="pos">Neue Position</param>
      119. ''' <remarks></remarks>
      120. Public Sub ChangeSpriteLocation(ByVal id As Long, ByVal pos As PointF)
      121. If sprIDs.Contains(id) Then
      122. sprDat(sprIDs.IndexOf(id)).Loc = pos
      123. Else
      124. Throw New SpriteIDNotValidException("ChangeSpriteLocation", "id", id)
      125. End If
      126. End Sub
      127. ''' <summary>
      128. ''' Ändert die Rotation eines Sprites
      129. ''' </summary>
      130. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      131. ''' <param name="rotCenter">Zentrum der Rotation, Standardwert ist der Bildmittelpunkt</param>
      132. ''' <param name="rotAngle">Drehwinkel in Radiant (Rad), 1° -> PI/180 rad</param>
      133. ''' <remarks></remarks>
      134. Public Sub ChangeSpriteRotation(ByVal id As Long, ByVal rotCenter As PointF, ByVal rotAngle As Single)
      135. If sprIDs.Contains(id) Then
      136. With sprDat(sprIDs.IndexOf(id))
      137. .rotPt = rotCenter
      138. .rotRad = rotAngle
      139. End With
      140. Else
      141. Throw New SpriteIDNotValidException("ChangeSpriteRotation", "id", id)
      142. End If
      143. End Sub
      144. ''' <summary>
      145. ''' Ändert den Rotationswinkel eines Sprites
      146. ''' </summary>
      147. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      148. ''' <param name="rotAngle">Rotationswinkel in Radiant (Rad), 1° -> PI/180 rad</param>
      149. ''' <remarks></remarks>
      150. Public Sub ChangeSpriteRotationAngle(ByVal id As Long, ByVal rotAngle As Single)
      151. If sprIDs.Contains(id) Then
      152. With sprDat(sprIDs.IndexOf(id))
      153. .rotRad = rotAngle
      154. End With
      155. Else
      156. Throw New SpriteIDNotValidException("ChangeSpriteRotationAngle", "id", id)
      157. End If
      158. End Sub
      159. ''' <summary>
      160. ''' Ändert den Rotationswinkel eines Sprites
      161. ''' </summary>
      162. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      163. ''' <remarks></remarks>
      164. Public Sub AddSpriteRotationAngle(ByVal id As Long, ByVal addAngle As Single)
      165. If sprIDs.Contains(id) Then
      166. With sprDat(sprIDs.IndexOf(id))
      167. .rotRad += addAngle
      168. Do While .rotRad < 0
      169. .rotRad += Math.PI * 2
      170. Loop
      171. Do While .rotRad >= Math.PI * 2
      172. .rotRad -= Math.PI * 2
      173. Loop
      174. End With
      175. Else
      176. Throw New SpriteIDNotValidException("AddSpriteRotationAngle", "id", id)
      177. End If
      178. End Sub
      179. ''' <summary>
      180. ''' Ändert den zBuffer (Ebene) eines Sprites
      181. ''' </summary>
      182. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      183. ''' <param name="zbufID">ID des zBuffers, die bei dessen Erstellung zurückgegeben wurde</param>
      184. ''' <remarks></remarks>
      185. Public Sub ChangeSpriteZBuffer(ByVal id As Long, ByVal zbufID As Long)
      186. If sprIDs.Contains(id) Then
      187. If zBufIDs.Contains(zbufID) Then
      188. sprDat(sprIDs.IndexOf(id)).zBufID = zbufID
      189. Else
      190. Throw New zBufIDNotValidException("ChangeSpriteZBuffer", "zbufID", zbufID)
      191. End If
      192. Else
      193. Throw New SpriteIDNotValidException("ChangeSpriteZBuffer", "id", id)
      194. End If
      195. End Sub
      196. ''' <summary>
      197. ''' Entfernt ein Sprite
      198. ''' </summary>
      199. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      200. ''' <remarks></remarks>
      201. Public Sub RemoveSprite(ByVal id As Long)
      202. If sprIDs.Contains(id) Then
      203. sprDat.RemoveAt(sprIDs.IndexOf(id))
      204. sprIDs.Remove(id)
      205. Else
      206. Throw New SpriteIDNotValidException("RemoveSprite", "id", id)
      207. End If
      208. End Sub
      209. ''' <summary>
      210. ''' Entfernt alle Sprites
      211. ''' </summary>
      212. ''' <remarks></remarks>
      213. Public Sub ClearSprites()
      214. sprIDs.Clear()
      215. sprDat.Clear()
      216. End Sub
      217. ''' <summary>
      218. ''' Gibt eine freie Sprite-ID (NICHT ZBUFFER) zurück
      219. ''' </summary>
      220. ''' <returns>Freie Sprite-ID</returns>
      221. ''' <remarks></remarks>
      222. Private Function GetFreeID() As Long
      223. Dim id As Long = 0
      224. Do Until Not sprIDs.Contains(id)
      225. id += 1
      226. Loop
      227. Return id
      228. End Function
      229. ''' <summary>
      230. ''' Löscht alle Sprites, die auf einem Bestimmten zBuffer liegen
      231. ''' </summary>
      232. ''' <param name="zBufID">ID des zBuffers, die bei dessen Erstellung zurückgegeben wurde</param>
      233. ''' <remarks></remarks>
      234. Public Sub ClearZBuffer(ByVal zBufID As Long)
      235. If zBufIDs.Contains(zBufID) Then
      236. Dim killst As New List(Of Integer)
      237. For s = sprDat.Count - 1 To 0
      238. If sprDat(s).zBufID = zBufID Then killst.Add(s)
      239. Next
      240. For Each s As Integer In killst
      241. sprDat.RemoveAt(s)
      242. sprIDs.RemoveAt(s)
      243. Next
      244. Else
      245. Throw New zBufIDNotValidException("ClearZBuffer", "zBufID", zBufID)
      246. End If
      247. End Sub
      248. ''' <summary>
      249. ''' Gibt eine Liste mit allen vergebenen Sprite-IDs zurück
      250. ''' </summary>
      251. ''' <returns></returns>
      252. ''' <remarks></remarks>
      253. Public Function ListSpriteIDs() As List(Of Long)
      254. Return sprIDs
      255. End Function
      256. ''' <summary>
      257. ''' Ändert die Sichtbarkeit eines Sprites
      258. ''' </summary>
      259. ''' <param name="id">ID des Sprites, die bei dessen Erstellung zurückgegeben wurde</param>
      260. ''' <param name="visible">Sichtbarkeit des Sprites</param>
      261. ''' <remarks></remarks>
      262. Public Sub ChangeSpriteVisibility(ByVal id As Long, ByVal visible As Boolean)
      263. If sprIDs.Contains(id) Then
      264. sprDat(sprIDs.IndexOf(id)).draw = visible
      265. Else
      266. Throw New SpriteIDNotValidException("ChangeSpriteVisibility", "id", id)
      267. End If
      268. End Sub
      269. #End Region
      270. #Region "ZBuffer OPS"
      271. ''' <summary>
      272. ''' Gibt eine freie zBuffer-ID (NICHT SPRITE) zurück
      273. ''' </summary>
      274. ''' <returns>Freie zBuffer-ID</returns>
      275. ''' <remarks></remarks>
      276. Private Function GetFreeZID() As Long
      277. Dim id As Long = 0
      278. Do Until Not zBufIDs.Contains(id)
      279. id += 1
      280. Loop
      281. Return id
      282. End Function
      283. ''' <summary>
      284. ''' Erzeugt einen neuen Z-Buffer und gibt dessen ID zurück
      285. ''' </summary>
      286. ''' <param name="initialOffset">Anfänglicher Ebenen-versatz. Kann über ChangeZBufOffset geändert werden</param>
      287. ''' <returns>ZBuffer-ID</returns>
      288. ''' <remarks></remarks>
      289. Public Function AddZBuffer(ByVal initialOffset As Point) As Long
      290. Dim res As Long = GetFreeZID()
      291. zBufIDs.Add(res)
      292. zBufOffsets.Add(initialOffset)
      293. Return res
      294. End Function
      295. ''' <summary>
      296. ''' Gibt eine Liste mit allen vergebenen Z-Buffer-IDs zurück.
      297. ''' </summary>
      298. ''' <returns></returns>
      299. ''' <remarks></remarks>
      300. Public Function ListZBufferIDs() As List(Of Long)
      301. Return zBufIDs
      302. End Function
      303. ''' <summary>
      304. ''' Ändert die Verschiebung einees Z-Buffers
      305. ''' </summary>
      306. ''' <param name="id">ID des Z-Buffers, die bei dessen Erstellung zurückgegeben wurde</param>
      307. ''' <param name="newOffset"></param>
      308. ''' <remarks></remarks>
      309. Public Sub ChangeZBufferOffset(ByVal id As Long, ByVal newOffset As PointF)
      310. If zBufIDs.Contains(id) Then
      311. If id = 0 Then
      312. Throw New zBufIDIsDefaultException("ChangeZBufferOffset")
      313. Else
      314. zBufOffsets(zBufIDs.IndexOf(id)) = newOffset
      315. End If
      316. Else
      317. Throw New zBufIDNotValidException("ChangeZBufferOffset", "id", id)
      318. End If
      319. End Sub
      320. #End Region
      321. ''' <summary>
      322. ''' DX2Dengine Sprite-Daten
      323. ''' </summary>
      324. ''' <remarks></remarks>
      325. Private Class D2DSpr
      326. ''' <summary>
      327. ''' Textur (Bild)
      328. ''' </summary>
      329. ''' <remarks></remarks>
      330. Public Tex As Texture
      331. ''' <summary>
      332. ''' Position
      333. ''' </summary>
      334. ''' <remarks></remarks>
      335. Public Loc As PointF
      336. ''' <summary>
      337. ''' Rotationszentrum
      338. ''' </summary>
      339. ''' <remarks></remarks>
      340. Public rotPt As PointF
      341. ''' <summary>
      342. ''' Rotationswinkel
      343. ''' </summary>
      344. ''' <remarks></remarks>
      345. Public rotRad As Single
      346. ''' <summary>
      347. ''' zBuffer zugehörigkeit
      348. ''' </summary>
      349. ''' <remarks></remarks>
      350. Public zBufID As Long
      351. ''' <summary>
      352. ''' Renderstatus
      353. ''' </summary>
      354. ''' <remarks></remarks>
      355. Public draw As Boolean
      356. End Class
      357. Public Class SpriteIDNotValidException
      358. Inherits Exception
      359. Public var As String
      360. Public val As Long
      361. Public msg As String
      362. Public Overrides ReadOnly Property Message() As String
      363. Get
      364. Return msg & " -> Die Sprite-ID ist nicht gültig! Variable: " & var & " Wert: " & val
      365. End Get
      366. End Property
      367. Public Sub New(ByVal funcname As String, ByVal variable As String, ByVal value As Long)
      368. var = variable
      369. val = value
      370. msg = funcname
      371. End Sub
      372. End Class
      373. Public Class zBufIDNotValidException
      374. Inherits Exception
      375. Public var As String
      376. Public val As Long
      377. Public msg As String
      378. Public Overrides ReadOnly Property Message() As String
      379. Get
      380. Return msg & " -> Die z-Buffer-ID ist nicht gültig! Variable: " & var & " Wert: " & val
      381. End Get
      382. End Property
      383. Public Sub New(ByVal message As String, ByVal variable As String, ByVal value As Long)
      384. msg = message
      385. var = variable
      386. val = value
      387. End Sub
      388. End Class
      389. Public Class zBufIDIsDefaultException
      390. Inherits Exception
      391. Public msg As String
      392. Public Overrides ReadOnly Property Message() As String
      393. Get
      394. Return msg & " -> Der zBuffer mit der ID 0 kann nicht modifiziert werden, da er der Standard-Buffer ist"
      395. End Get
      396. End Property
      397. Public Sub New(ByVal message As String)
      398. msg = message
      399. End Sub
      400. End Class
      401. End Class

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „FAtheone“ ()

      Hey sieht echt nicht schlecht aus. Das Sprite-System ist mit der Z-Sortierung gut ausgearbeitet.

      Kleiner Kritikpunkt:
      Muss bei der Initialisierung wirklich ein neues Device erstellt werden?
      Es wäre für manche Nutzer doch von Vorteil, wenn die Sprite-Engine auf ein schon erstelltes Device aufbaut.

      Also in der Art eine weitere Overload-Funktion:

      VB.NET-Quellcode

      1. Public Sub InitEngine(ByRef original_device as Device)
      Mach ich :D
      Die "Doku" ist bereits drin (XML-Kommntare)
      Hier ein Beispiel:

      VB.NET-Quellcode

      1. Dim engine As New DX2Dengine
      2. 'Form.Load
      3. engine.InitEngine(Me, Me.Size, False)
      4. engine.AddSprite(My.Resources.TestSprite, New PointF(0,0))
      5. 'Form.Click
      6. engine.Render()


      Zeigt das "Testbild" in den Resourcen an, wenn auf das Form geklickt wurde.
      Wie gesagt, die XML-Kommentare und IntelliSense sollten helfen, die anderen Funktionen zu verstehen.
      Folgender Fehler ohne irgendetwas am Source geändert zu haben:

      Spoiler anzeigen
      Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "Draw2D" mit diesen Argumenten aufgerufen werden kann:
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As Integer)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Rectangle" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As Integer)': Der Wert vom Typ "Single" kann nicht in "System.Drawing.Rectangle" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As Integer)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Point" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Rectangle" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "Single" kann nicht in "System.Drawing.Rectangle" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Point" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, srcRectangle As System.Drawing.Rectangle, destinationRectangle As System.Drawing.Rectangle, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "Integer" kann nicht in "System.Drawing.Color" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, rotationCenter As System.Drawing.Point, rotationAngle As Single, position As System.Drawing.Point, color As Integer)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Point" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, rotationCenter As System.Drawing.Point, rotationAngle As Single, position As System.Drawing.Point, color As Integer)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Point" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, rotationCenter As System.Drawing.Point, rotationAngle As Single, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Point" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, rotationCenter As System.Drawing.Point, rotationAngle As Single, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "System.Drawing.PointF" kann nicht in "System.Drawing.Point" konvertiert werden.
      'Public Sub Draw2D(srcTexture As Microsoft.DirectX.Direct3D.Texture, rotationCenter As System.Drawing.Point, rotationAngle As Single, position As System.Drawing.Point, color As System.Drawing.Color)': Der Wert vom Typ "Integer" kann nicht in "System.Drawing.Color" konvertiert werden. C:\Users\Sakeco\Documents\Visual Studio 2008\Projects\DefendGermany\DefendGermany\DX2Dengine.vb 64 25 DefendGermany



      Markiert wird folgendes in der Prozedur "Render":

      VB.NET-Quellcode

      1. dsurface.Draw2D(s.Tex, s.rotPt, s.rotRad, s.Loc, &HFFFFFFFF)


      sowie

      VB.NET-Quellcode

      1. dsurface.Draw2D(s.Tex, s.rotPt, s.rotRad, PointF.Add(s.Loc, New SizeF(zBufOffsets(i))), &HFFFFFFFF)
      Ich habe genau den gleichen fehler und hab die heruntergeladene datei genutzt


      HAB DEN FEHLER GEFUNDEN!
      Es gehört:

      VB.NET-Quellcode

      1. dsurface.Draw2D(s.Tex, New Point(s.rotPt.X, s.rotPt.Y), s.rotRad, New Point(s.Loc.X, s.Loc.Y), &HFFFFFFFF)
      Das ist nicht die saubere Lösung.
      Einfach Tile.rotPt in der Class-Definition als "Point" statt "PointF" deklarieren.
      Im Sourcecode habe ich das bereits geändert.
      Beides geht, aber deine Variante ist eine Implizite konvertierung von Double nach Integer, was er, im gegensatz zu PointF nach Point, scheibar problemlos frisst.
      Kann man irgendwie eine farbe als hintergrund definieren? ich will kein riesiges schwarzes bild einbinden...
      ok, man kann mittels gdi eine bitmap schwarz fuellen und die dann draufzeichnen, aber das is dann schon etwas... nun ja! :rolleyes:

      Edit: ich hab mir mal die freiheit genommen, alle pointf's in point's umzuwandeln, jetz kommt aber beim ausfuehren die vielsagende ausnahme meldung "Fehler in der anwendung" und markiert .Tex = New Texture(dev, img, Usage.Dynamic, Pool.Default)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jansteffen“ ()

      Hmm...
      Point sollte man nur nehmen, wenn es zwingend notwendig ist.
      Hintergrundfarbe kannst du in der Render-Sub ja anpassen ich such schnell mal die Zeile raus.

      E:

      Zeile 60

      VB.NET-Quellcode

      1. dev.Clear(ClearFlags.Target, Color.Gray, 1.0, 0)


      Color.Gray -> Color.Black / Whatsoever

      ich binde es bei einem Update mal mit ein.
      Hey,
      mir ist bewusst das ich gerade ein altes Thema ausgrabe aber der Fehler besteht immer noch, ich habe denn Source Code benutzt und die angehangene Datei er zeigt mir immer noch denn bereits geposteten Fehler.
      Hoffe trotzdem um eine Antwort.
      und welcher Fehler denn? Welcher Code stammt von dir?

      (@FAthone:

      Anforderungen:

      -Managed DirectX SDK 9.0
      -Programmiert mit .NET FW 3.5 (geht 2.0 ?)

      Anforderungen für den Endbenutzer sind dann "Microsoft DirectX Redistributable 9.0c" nicht, dass hier jemand dem Benutzer das SDK aufzwingt(müsste man nicht mal als Programmierer...)
      und als Framework geht nicht nur 3.5 sondern auch 3.0 und 2.0 und 1.1 oder 1 :P
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---