Game Engine mit Chunks

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy16823.

    Game Engine mit Chunks

    Hallo Community,

    Ich sitze seit mehr als einer Woche an meiner Game Engine. Nun nach dem ganzen Physik zeug, der Scenen Verwaltung und der GUI kommen die ersten richtigen Probleme. Es dreht sich nämlich um den Basis Hintergrund wie z.b. ein Meer oder eine Wiese die sich nicht verändert. Ich habe das mal versucht mit Game Elementen darzustellen, aber erfolglos, irgendwann flog mir eine EndOfMemory Exeption um die Ohren, das habe ich mir auch gedacht.

    @Artentus und @ThuCommix wie macht Ihr das bei sehr großen Szenen (B 256 * 32 | H 256 * 32) ? mit GameObjekten oder einfach ein Hintergrundbild nehmen, da sich ja die Wiese oder das Meer selbst nicht ändert ?
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Sprich einfach ein Hintergrundbild ? Weil ich mach mir da so Gedanken mit der Berechnung der Kollision, meine "Test Map" ist 256 * 256 Quadrate Breit, jedes Quadrat hat eine Größe vom 32 * 32 Pixel, bei dem Anderen Test Spiel, ein Jump 'n run hatte ich maximal 2000 Objekte in einer Szene, da lief alles flüssig, aber 65536 Gamobjekte in einer Szene, das kann nur hängen, wenn der RAM den reichen sollte ?(
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Ich weiß jetzt nicht, was du machst, aber meine Versuche an einer eigenen Engine (mit GDI+) schaffen momentan bei mehreren tausend Objekten trotztem locker ein paar hundert Updates pro Sekunde, einzig bei dem Rendering hängt es noch etwas, da bin ich grad am rumexperimentieren aber 60fps sind normalerweise schon drin. Schafft das deine nicht?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nafets3646“ ()

    lass alle Objekte die sich nicht verändern zu beginn auf eine Bitmap zeichnen, so zu sagen als buffer, so wird im Hauptzeichen vorgang nur 1 Bild statt 100 oder mehr gezeichnet.

    Ich habe einen Alten PC mit 2 GB Ram eigendlich 3 aber es werden nur 2 erkannt und ein Celeron Prozessor. Aber da es dell ist und ich eine Nvidia Graka mit 1GB Vram habe, kann ich auch Skyrim spielen ;)
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Ich habe eine Enum und eine Eigenschaft in meiner Gameobjekt klasse. Mit der wird festgelgt wann gezeichnet wird, entweder auf einen Buffer oder im Paint event. Schau mal hier: vb-paradise.de/index.php/Thread/?postID=854093#post854093 wurde mir dank @Gonger96 und @Artentus gut erklärt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Namespace Types
    3. Public Class GameObject
    4. Enum RenderModes
    5. OnSceneBuild
    6. OnGameDrawing
    7. End Enum
    8. Private _Name As String
    9. Public Property Name() As String
    10. Get
    11. Return _Name
    12. End Get
    13. Set(ByVal value As String)
    14. _Name = value
    15. End Set
    16. End Property
    17. Private _Tag As String
    18. Public Property Tag() As String
    19. Get
    20. Return _Tag
    21. End Get
    22. Set(ByVal value As String)
    23. _Tag = value
    24. End Set
    25. End Property
    26. Private _Size As Vector.Size
    27. Public Property Size() As Vector.Size
    28. Get
    29. Return _Size
    30. End Get
    31. Set(ByVal value As Vector.Size)
    32. _Size = value
    33. End Set
    34. End Property
    35. Private _Location As Vector.Vector2
    36. Public Property Location() As Vector.Vector2
    37. Get
    38. Return _Location
    39. End Get
    40. Set(ByVal value As Vector.Vector2)
    41. _Location = value
    42. End Set
    43. End Property
    44. Private _Texture As Bitmap
    45. Public Property Texture() As Bitmap
    46. Get
    47. Return _Texture
    48. End Get
    49. Set(ByVal value As Bitmap)
    50. _Texture = value
    51. End Set
    52. End Property
    53. Private _Collisioner As Boolean
    54. Public Property Collisioner() As Boolean
    55. Get
    56. Return _Collisioner
    57. End Get
    58. Set(ByVal value As Boolean)
    59. _Collisioner = value
    60. End Set
    61. End Property
    62. Private _IsTrigger As Boolean
    63. Public Property IsTrigger() As Boolean
    64. Get
    65. Return _IsTrigger
    66. End Get
    67. Set(ByVal value As Boolean)
    68. _IsTrigger = value
    69. End Set
    70. End Property
    71. Private _TriggerKey As System.Windows.Forms.Keys
    72. Public Property TriggerKey() As System.Windows.Forms.Keys
    73. Get
    74. Return _TriggerKey
    75. End Get
    76. Set(ByVal value As System.Windows.Forms.Keys)
    77. _TriggerKey = value
    78. End Set
    79. End Property
    80. Private _RenderMode As RenderModes
    81. Public Property RenderMode() As RenderModes
    82. Get
    83. Return _RenderMode
    84. End Get
    85. Set(ByVal value As RenderModes)
    86. _RenderMode = value
    87. End Set
    88. End Property
    89. Public Sub New(Name As String, Size As Vector.Size, Location As Vector.Vector2, Texture As Bitmap)
    90. Me.Name = Name
    91. Me.Tag = "Untaged"
    92. Me.Size = Size
    93. Me.Location = Location
    94. Me.Texture = Texture
    95. Me.RenderMode = RenderModes.OnSceneBuild
    96. End Sub
    97. Public Sub New(Name As String, Tag As String, Size As Vector.Size, Location As Vector.Vector2, Texture As Bitmap, RenderMode As RenderModes)
    98. Me.Name = Name
    99. Me.Tag = Tag
    100. Me.Size = Size
    101. Me.Location = Location
    102. Me.Texture = Texture
    103. Me.RenderMode = RenderMode
    104. End Sub
    105. Public Sub New(Name As String, Tag As String, Size As Vector.Size, Location As Vector.Vector2, Texture As Bitmap, Collisioner As Boolean, RenderMode As RenderModes)
    106. Me.Name = Name
    107. Me.Tag = Tag
    108. Me.Size = Size
    109. Me.Location = Location
    110. Me.Texture = Texture
    111. Me.Collisioner = Collisioner
    112. Me.RenderMode = RenderMode
    113. End Sub
    114. Public Function GetBpounds() As Rectangle
    115. Return New Rectangle(Me.Location.X, Me.Location.Y, Me.Size.Width, Me.Size.Height)
    116. End Function
    117. Public Sub EnabledTrigger(TriggerKey As System.Windows.Forms.Keys)
    118. Me.IsTrigger = True
    119. Me.TriggerKey = TriggerKey
    120. End Sub
    121. Public Sub DisableTrigger()
    122. Me.IsTrigger = False
    123. Me.TriggerKey = Nothing
    124. End Sub
    125. End Class
    126. End Namespace



    nafets3646 schrieb:

    Lässt du also jedes Objekt einzeln auf eine für dieses Objekt spezifische Bitmap zeichnen?


    Nein alle die render mode OnGamBuild haben auf eine Bitmap die so groß ist wie die scene und der "Buffer" wird dann gezeichnet.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener