Hur programmerar jag en 2d-motor?
Även om det finns många motorer på nätet. Men genom att skapa en kommer du att inse den verkliga kraften i programmering. Detta är en bra start för att flytta upp till 3D-grafik.
Del 1 av 4: samla dina verktyg
- 1Behärska ett språk. Detta är det mest grundläggande steget i vad du väljer. Du kan använda C / C ++ tillsammans med vissa funktioner som skrivs om med montering. Detta kommer att göra din motor snabbare och avslöja de innersta av de bibliotek du använder.
- C är ett bra och snabbt val.
- C ++ är mycket bättre i design, men lider lite av prestanda.
- Java kan vara bra. Det är operativsystemoberoende, snabb och strukturerat.
- Montering är svårt, men att kontrollera det är det bästa alternativet.
- 2Välj ett API (valfritt). Du kan börja med ett API som OpenGL eller DirectX, men det beror på ditt äventyr. Om du vill ha en pålitlig motor och inte vill spendera tid, använd ett API. Men om du har gott om tid och vill lära dig motorns innersta, är rekommendationen enkel: gå ensam.
- 3Lär dig de grundläggande definitionerna. Du måste söka på nätet efter tillförlitligt innehåll om saker som rastergrafik, vektorgrafik, blixtar och skuggor, kollisioner, fysik (för en kampsimulering, naturligtvis) och mycket mycket mer.
- Wikipedia är din bästa vän. Sök i dess portaler så hittar du fantastisk kunskap om alla aspekter.
- Att köpa böcker om programmeringsspel kan komma till nytta.
- 4Förbered ditt sinne. Du kommer att bli frustrerad av svårigheten med jobbet, men vänd dig inte tillbaka. Var alltid motiverad. Lära sig. Skapa. Titta inte tillbaka.
Del 2 av 4: förbereda designen
- 1Tänk vad du vill göra. Förbered en uppfattning om vad du kommer att göra och vad du inte kommer att göra. Att rensa ditt sinne i det här steget hjälper på lång sikt.
- 2Samla din grafik. Rita önskad grafik, som skärmen, spelare etc.
- 3Dela upp hela motorn i olika parallella delar. Som du kanske vet är parallell programmering snabbare. Så dela upp det. Några delar inkluderar: -
- Rendering pipeline
- Allvar
- AI
- Nästa skärm
- Kontroll av ovanstående element (det viktigaste!)
- 4Skapa enstegsalgoritmer för elementen. Tänk bara vad som kommer att hända, hur och varför och vem som får det att hända. Det kommer att hjälpa till med kodning.
- Donald Knuth sa att föroptimeringar är roten till det onda. Kasta bort de snabbare och långsammare delarna och fokusera på motorn. Men kom ihåg att reda ut dem när motorn är klar.
Del 3 av 4: kodning av de grundläggande artiklarna
- 1Kod rastering. Rastering är visningen av varje pixel på skärmen.
- Använd "ignorera färg" -formatet för att radera föregående bild. I BitBlt i Windows har detta rasterkod BLACKNESS och WHITENESS. Observera att du måste rita bakgrunden på skärmen om du har den.
- Använd formatet "OCH" för att rita bildens sprite. I BitBlt i Windows är detta rasterkoden: SRCAND.
- Använd ovanstående format för att rita textur på sprite.
- 2Kod fysik. Du måste förstå och tillhandahålla dynamiken i din miljö.
- 3Lägg till belysning. Strängt taget krävs inte belysning i 2D-motorer, men du kan lägga till det om du vill.
- 4Hantera skuggor. Du kan använda skuggvolymstekniken för skuggor. Det behövs dock inte eftersom du inte behöver belysning.
- 5Kod AI. Beroende på typ av motor och spel kan du tänka på dig själv att "Vad skulle jag göra i den här situationen" och skapa dess algoritm. Till exempel, i en stridssimulering, om AI är på 4: e våningen, och det finns 2 motståndare på första våningen och en raketkastare gett upp på 3: e våningen, istället för att gå direkt till första våningen, bör AI gå till 3: e våningen. Om du använder OOP kommer detta att vara en avgörande funktion i din AI-klass.
Del 4 av 4: optimering
- 1Använd buffring med dubbla skärmar. Det handlar om att dra allt till en bitmapp i minnet och sedan rita bitmappen till skärmen. Detta blir lite långsamt och ineffektivt i minnet, men det tar bort flimmer och gör motorn smidigare.
- 2Tänk på sekvensen av steg i algoritmer. Till exempel, i en enkel animering, anger en enkel algoritm att "radera: besluta: rita". Men om beslutet är mer komplext kommer det att finnas en signifikant skillnad i radera och rita, vilket ger flimmer. Du måste använda "besluta: radera: rita".
- 3Använd anpassade fördelare. När motorn startar, ta upp en användbar mängd RAM och dela den i din motor med hjälp av programmering. Operativsystemet är upptaget och visar latens för att uppfylla ditt krav, så ha RAM i förväg.
- 4Använd ditt cache klokt. Använd ofta några av de viktigaste elementen så att de lagras i L1-cache. Att göra detta skulle påskynda saker. Cache of L2 använder 7ns, medan det tar 250 oss att läsa 1MB från RAM.
- 5Se till att du använder parallell bearbetning. Använd SIMD-specialinstruktioner för att arbeta parallellt. Dessutom, dra full nytta av så många processorkärnor genom att skapa parallella enheter. Funktionen CreateThread i Windows och Fork i Linux är fördelaktiga.
- 6Se till att din parallella värld också kommer till GPU. De senaste integrerade GPU: erna har 10 exekveringskärnor med 1200 MHz. För långsam för att tävla med GTX 8800, men är en överdriven för din motor.
Läs också: Hur byter man ansikten i Photoshop?