Hur hänger alla bitar i ett spel ihop?

Permalänk
Medlem

Hur hänger alla bitar i ett spel ihop?

Hej!
Jag har lite funderinga angående traditionella datorspel (warcraft, aoe, cs osv)..
Hur hänger dessa ihop i de olika bitarna jag antar att de består av:

- programmeringsspråket (c++, c, c# ?)
- directx / openGL - vad är för respektive nackdelar med dessa två? Eller snarare, varför används inte openGL lika ofta som directx? Liknar detta ett bibliotek ala jquery eller hur används det tillsammans med språket egentligen?

- Spelmotorn, ett begrepp som man stöter på ibland, vad är det? Är det att jämföra med PHP-koden i ett forum tex? Har man iså fall ett frontend ala html också?

- Grafiken, säg att den görs i ett program som 3ds max eller maya, hur agerar den tillsammans med spelet sen? Det är ju hela modeller som ska kunna röra sig i princip fritt i ett spel....

Jag har ingen som helst erfarenhet av rena programmeringsspråk som C C++ C# JAVA osv. Men jag har arbetat mycket med webbspråk som PHP, javascript och html.

Visa signatur

Asus Zenbook UX32VD-R4002V.

Permalänk
Medlem
Skrivet av kon87:

- directx / openGL - vad är för respektive nackdelar med dessa två? Eller snarare, varför används inte openGL lika ofta som directx? Liknar detta ett bibliotek ala jquery eller hur används det tillsammans med språket egentligen?

Det är bibliotek, men inte på samma sätt som jQuery. Det jQuery gör för JS är i princip att omdefiniera språket och hur man använder det – ett bibliotek i C/C++ är mer av ett verktyg man kan använda för att utföra en specifik uppgift.

Skrivet av kon87:

- Spelmotorn, ett begrepp som man stöter på ibland, vad är det? Är det att jämföra med PHP-koden i ett forum tex? Har man iså fall ett frontend ala html också?

Nja. Många spel byggs upp så att de har en central del skriven i C++ ("motorn", som sköter grafik och dylikt) och en logikdel skriven i något mer dynamiskt, tolkat språk (typ LUA). Så det går inte riktigt att jämföra med PHP-backenden i ett forum.

Skrivet av kon87:

- Grafiken, säg att den görs i ett program som 3ds max eller maya, hur agerar den tillsammans med spelet sen? Det är ju hela modeller som ska kunna röra sig i princip fritt i ett spel....

Nu har jag ingen större erfarenhet av just den här biten, men jag skulle tro att man delar upp modellen i delar som kan röra sig i förhållande till hela objektet, t.ex. en arm som sitter fast i en axelled.

Skrivet av kon87:

Jag har ingen som helst erfarenhet av rena programmeringsspråk som C C++ C# JAVA osv. Men jag har arbetat mycket med webbspråk som PHP, javascript och html.

PHP och Javascript är rena programmeringsspråk; HTML är absolut inte ett.

Permalänk
Medlem

Jag skulle nog jämföra DirectX med tex Google Maps-APIet du använder om du vill få in en google-map på en sida, fast mycket mer avancerat och komplext. Du behöver skriva lite kod för att starta igång en google-karta, du behöver lite kod för att starta igång DirectX och visa upp en tom skärm. Vill du att något ska hända, tex att en markering ska visas på ett ställe på kartan måste du göra ett/flera anrop, vill du att en kvadrat ska visas på skärmen med DirectX måste du göra ett par anrop för att det ska hända.

Om modeller så brukar det vara så att man först gör ett förenklat skelett till sin figur, i sin enklaste form kanske ett ben för varje arm, en för kroppen och en för varje ben, och binder sedan fast "skinnet" på rätt delar av skelettet. Därefter animerar man sin skelett, tex lyfter upp arm-benet för att figuren sedan ska lyfta på sin arm osv. Positionerna på skelettet och hur det sitter fast i modellen sparas ner och stoppas in i spelet tillsammans med modellen. Väl inne i spelet är det främst 2 saker som sker, dels agerar modellerna, dvs tex du trycker på knappen för att sträcka fram handen och hälsa kommer din figur att spelar upp sträck-fram-handen-animationen som spelats in tidigare. Om du står precis bredvid en annan figur kanske spelet automatiskt spelar upp hälsningsanimationen även på denna så att det ser ut som om dom hälsar.. Dessutom kontrollerar spelet om modellen krockar med något, hur man räknar ut det är svårt, men det går Krockar armen med något försöker spelet lösa det, kanske avbryts animeringen, eller så kanske hela modellen flyttas lite bakåt för att få plats osv.

Humm, kanske inte blev så glasklart.. nåja

Permalänk
Medlem

En spelmotor sköter en slags grundläggande mekanik; ponera att vi har ett 3D-spel med olika spellägen som deathmatch, team deathmatch, capture the flag osv. Reglerna (koden) för dessa spellägen har inget att göra med, exempelvis, hur modeller ska renderas med hänsyn till form, textur, ljussättning m.m. En spelmotor hanterar bl.a. det senare och man kan se den som "värd" för olika spel/spellägen.

En spelmotor är inte något magiskt utan består i grunden av nån slags loop enligt nedan, som varvas kanske hundratals gånger per sekund:

  1. Ta hand om input från mus/tangentbord/joystick etc.

  2. Uppdatera spelobjekt: riktning och hastighet (ev. gravitation, vikt, luftmotstånd etc.), kollisionshantering (tänk krockande biljardkulor, exploderande missiler etc.), skapa/ta bort objekt m.m.

  3. Spela upp/stäng av ljud: volym, eko m.m.

  4. Rendera spelvärld: projicera modellerna på skärmytan utifrån nuvarande perspektiv (och vad är dolt och inte?), applicera texturer, ljussättning osv.

Modeller och texturer beskrivs givetvis med någon vedertaget filformat av bekvämlighetsskäl (jpeg, bmp osv.), det är ju trevligare att skapa modeller och bilder med något fränt verktyg istället för att hacka manuellt i en texteditor t.ex. Men filformatet i sig säger inget om hur motorn representerar objekten under körning.