Ik ben bezig om een spelletje te maken. Dit is bijna af, alleen grafisch neemt het nogal veel processortijd in beslag. Ik wil dit grafische gedeelte per sé door de cpu af laten handelen en niet door de gpu.
Nu heb ik om te testen een vergelijkbare situatie in c# (windows) gemaakt zodat ik gemakkelijk het e.e.a kan aanpassen en finetunen. Op dit moment test ik met een resolutie van 500x500 pixels, maar met deze resolutie is 1 core van 2,5GHz al aan het rekenen waarmee ik nét aan 1fps haal.
Mijn doelstelling is om minimaal 10fps te halen.
Grafisch is het spel te vergelijken met een platform spel zoals Mario Bros, en gebruik daarvoor 3 afbeeldingen.
1. De afbeelding van de achtergrond.
2. Het spel zelf met daarop speler en items in het spel.
3. De voorgrond wat dus over afbeelding 2 en 1 wordt weergegeven.
Als optimalisatie gebruik ik al geen bitmaps, maar een eigen class die ik "CustomImage" heb genoemd. De afbeelding is dan gewoon opgeslagen in een byte-array waarmee ik dus sneller toegang heb dan een normale bitmap. De single byte-array heeft gewoon voor elke pixel 4 bytes (B, G ,R ,A), en is dus voor mijn afbeeldingen maar 500x500x4 = 1MB groot.
Alle afbeeldingen die ik in het spel nodig heb, laadt ik vooraf in in deze CustomImage.
Tijdens het spel verbouw ik de 3 afbeeldingen (ook van het type CustomImage) en houd ik bij binnen welke rechthoeken ik de afbeelding heb aangepast.
Nadat dit is verwerkt ga ik elke gewijzigde rechthoek af en update deze in een eindafbeelding (ook van het type CustomImage).
Aangezien ik transparantie gebruik, moet ik dus steeds laag voor laag de afbeelding opbouwen, en vergelijk ik dus of de kleuren transparant zijn.
Alhoewel ik dit al flink heb geoptimaliseerd, blijft het vergelijken en pixels kopiëren het langzaamste gedeelte van mijn code.
Zit ik met deze oplossing wel in de goede hoek, of is deze methode totaal verkeerd om afbeeldingen over elkaar heen te laten weergeven?
Nu heb ik om te testen een vergelijkbare situatie in c# (windows) gemaakt zodat ik gemakkelijk het e.e.a kan aanpassen en finetunen. Op dit moment test ik met een resolutie van 500x500 pixels, maar met deze resolutie is 1 core van 2,5GHz al aan het rekenen waarmee ik nét aan 1fps haal.
Mijn doelstelling is om minimaal 10fps te halen.
Grafisch is het spel te vergelijken met een platform spel zoals Mario Bros, en gebruik daarvoor 3 afbeeldingen.
1. De afbeelding van de achtergrond.
2. Het spel zelf met daarop speler en items in het spel.
3. De voorgrond wat dus over afbeelding 2 en 1 wordt weergegeven.
Als optimalisatie gebruik ik al geen bitmaps, maar een eigen class die ik "CustomImage" heb genoemd. De afbeelding is dan gewoon opgeslagen in een byte-array waarmee ik dus sneller toegang heb dan een normale bitmap. De single byte-array heeft gewoon voor elke pixel 4 bytes (B, G ,R ,A), en is dus voor mijn afbeeldingen maar 500x500x4 = 1MB groot.
Alle afbeeldingen die ik in het spel nodig heb, laadt ik vooraf in in deze CustomImage.
Tijdens het spel verbouw ik de 3 afbeeldingen (ook van het type CustomImage) en houd ik bij binnen welke rechthoeken ik de afbeelding heb aangepast.
Nadat dit is verwerkt ga ik elke gewijzigde rechthoek af en update deze in een eindafbeelding (ook van het type CustomImage).
Aangezien ik transparantie gebruik, moet ik dus steeds laag voor laag de afbeelding opbouwen, en vergelijk ik dus of de kleuren transparant zijn.
Alhoewel ik dit al flink heb geoptimaliseerd, blijft het vergelijken en pixels kopiëren het langzaamste gedeelte van mijn code.
Zit ik met deze oplossing wel in de goede hoek, of is deze methode totaal verkeerd om afbeeldingen over elkaar heen te laten weergeven?
Speel ook Balls Connect en Repeat