C++ ablakos/grafikus programozas tanulasa kezdoknek

C++ ablakos/grafikus programozas tanulasa kezdoknek
2017-12-23T15:07:27+01:00
2018-01-07T10:11:31+01:00
2022-10-19T06:00:38+02:00
  • Ha jól megnézed, ezek a dolgok egy-egy speciális esetre adnak megoldást. De Pl. 3d pathfinding a Unity-ben is van, a godot-ban pedig még 2d-s is. És Pl. abban a játékban amin töröm a fejem lehet hogy használni is fogom ezt a 2d-s útkeresőt, ugyanakkor ez önmagában még nem biztos hogy elég lesz az ellenségek mozgásának a leprogramozására - elképzelhető, hogy teszek bele olyat is, hogy az ellen összehangoltan mozogjon és ne csak menjen a játékos után, de próbálja meg bekeríteni. Ugyanakkor nem biztos, hogy ez annyira jó - a játékosnak is kell hagyni esélyt a nyerésre - a játék célja nem feltétlenül a legokosabb lépés kiválasztása, hanem a játékos szórakoztatása.

    Ami a játékot igazán azzá teszi, az szerintem a játékmechanika, esetleg a történet, a grafika, a zene. Pl. anno a kedvenc játékom a Gothic2 volt. Aztán jött az Elder Scroll Oblivion, és legalábbis nekem fele annyira nem jött be, pedig a játékmotor klasszisokkal volt jobb, a grafika is sokkal szebb volt, csak épp a hangulat hiányzott. Aztán jött a Gothic3 akkora bugokkal az egyedileg fejlesztett játékmotorban hogy teljesen elvette a kedvem a dologtól. Pofon csaptad az orkot, erre felrepült a ház tetejére, fejjel lefelé belállt a tetőbe, és rángatózott. Bele is bukott a cég, aztán eladták a jogokat, nem is jött több normális Gothic. A másik hasonló dolog, a Heroes of might and magic volt. Hiába van a 5-östől csilli-villi 3D-s motor, messze a széria legjobbja a kézzel rajzolt 2D-s 3-as volt, bár vannak akik szerint a 2-es. Ugyankkor ezt a műfajt is lehet jól csinálni 3D-ben is, lásd King's Bounty. Szóval a motor fontos dolog (lehet), de messze nem a lényeg.
    Mutasd a teljes hozzászólást!
  • nem úgy működik, hogy fogom az AI komponenst és ráhúzom az ellenfélre, és onnantól kezdve okos lesz

    Hát pedig ez pontosan így működik:
    Autonomous vehicles
    Kynapse

    Az más kérdés, hogy egy komolyabb játékhoz valóban nem elég a kész megoldás, ezért is kell saját motort írni többek között.
    Mutasd a teljes hozzászólást!
  • Az AI nem egy egységes dolog, különféle területei vannak, látás, hallás, probléma megoldás, ráadásul eléggé különböző algoritmusokkal. Vannak kész könyvtárak egy-egy célterületre, de azért ez nagyon nem úgy működik, hogy fogom az AI komponenst és ráhúzom az ellenfélre, és onnantól kezdve okos lesz. Nem véletlenül olyan feneketlenül buta a legtöbb játékprogi.
    Mutasd a teljes hozzászólást!
  • Ha még emlékszel volt régen az Intia proccesszor. Az akkortájt még létező AGEIA PhysX PPU-hoz hasonlóan az AI-hoz készült külön hardver volt és hozzá egy API. Tudott 2D/3D útvonal keresést, meg ilyesmiket. Mostanság a CPU-ba építgetnek be ilyesmit és lehet újra visszajön az AI modul a licenszes enginekbe is. Sakkozni persze nem fog tudni, de az átlag játékokhoz jólesz. Jelenleg ilyen OpenSteer, Kynapse, meg ilyesmiket lehet integrálni az enginebe.
    Mutasd a teljes hozzászólást!
  • A Godot-ban nincs AI modul, de szerintem a Unity-ben sem. Ami van, az a navmesh amivel definiálhatsz egy területet, és azon belül tud navigálni. Minden ami ezen túl van, azt scriptelni kell. Sőt, a Unity-ben még 2D navmesh sincs csak 3D, így ha 2D-s játékot akarsz csinálni ami használja ezt, akkor vagy a 3D-set kell ami viszont van akkora macera, hogy inkább ír az ember egy sajátot, illetve lő egyet magának a neten. Ugyanakkor, ha már picit okosabb dolgot szeretnél, Pl. hogy a szörnyek együttműködve kapják el a játékost, az már megint csak script. És ez csak egy egyszerű 2D-s játék. A sakkhoz használhatsz kész motort (Pl. GNUChess) akkor neked script oldalon csak a sakkprogival való kommunikációs protokollt kell lekódolnod, de általában itt is saját motort scriptelnek össze. Arról nem is szólva, ha olyasmit akarsz csinálni, amihez nincs kész motor (Pl. ultizni).
    Mutasd a teljes hozzászólást!
  • A fejlesztések zöme klón, úgyhogy annak meg is felelnek az ilyen motorok. Ami nem hobbi fejlesztés, (ahol az ember saját magának csinál kihívásból, vagy szórakozásból valamit) az sajnos szinte semmi újdonsággal nem rukkolhat elő, mert az nem biztos pénzforrás, így a többségnek elég a klóngyártás. A sok indie játék pedig annyira egyszerű, hogy c64-en (Clystron, Turrican, Elite stb.) komolyabb címek voltak, így nincs mit programozni rajta.

    Sakkprogram az annyi, hogy az AI modult vagy ki kell egészíteni, vagy lecserélni. Script szinten már nincs semmi összetett kódolás, csak alap "parancsok" hívogatása, a motor közvetett vezérlése. Kiköp az Az AI modul 1-1 lépést és kb ennyi, nagy scriptelő tudomány nem kell hozzá. Ez azért is jó, mert a csapat zöme grafikus és nekik így egyszerűbb a fejlesztés, ők amúgy is inkább valami animációt fognak hozzátenni, meg effekteket, nem foglalkoznak a motorral. A másik részben meg olcsóbb is felvenni pár scriptelőt, mint profi programozót. Ahol nagyon kódolni akarnak ott már inkább saját motorral dolgoznak.

    Játékosként én az egyediséget hiányolom a játékokból. Az autós játékokat elnézve például nem tudom eldönteni, hogy mit is nézek annyira egyformák. Az FPS-nél ráálltak valami karakter fejlesztős hülyeségre és mindenki elkezdte ezt utánozni. (Lassan az lesz, hogy az egyik karakter csak előre a másik meg csak hátra tud menni és kell egy harmadik karakter, aki fordulni is tud ) Az indie címek pedig annyira gagyik, hogy inkább előveszek egy c64 emulátort.
    Mutasd a teljes hozzászólást!
  • Vannak kód-orientált és programozás nélküli motorok. Az utóbbiakkal általában csak meglévő játékok klónjait lehet megcsinálni - lényegében kicseréled alattuk a grafikát, hangot, oszt jól van.

    De ilyen vizuális izével szerintem nemigen szeretnél mondjuk sakkprogramot, vagy akár csak malmot, vagy mondjuk kártyajáték AI-t írni. Ugyanakkor Pl. a Point&Click kalandjátékhoz elég - hacsak nem akarsz valami olyat, ami nincs a többi ilyen játékban.

    Amúgy azért vagyok eléggé ellensége az ilyeneknek, mert a legtöbb nagy játéknak pont ez a rész a gyenge pontja. Pl. a kedvenc játékom amiben már heteket eltöltöttem a Skyrim. Gyönyörű grafikája van, élethű fizikája, egész jó animációi - de amikor már huszadszor mondja el a járőröző katona ugyanazt a poént, akkor kedvem lenne a fejlesztők fejét picit beverni valami egészen kemény tárgyba.
    Mutasd a teljes hozzászólást!
  • A mai divatos motoroknak már illik tudnia azt, hogy egy editorral csak beklattyogtatja a user, amit akar és már készen is van a játék, ahogy annakidején a c64-es maker eszközök is így működtek, ezért a programozó, mint olyan már eléggé ritka fehér holló lett a játékfejlesztésben.

    Mindig hangsúlyozva van, hogy nem kell feltalálni a kereket, de azért csak van 1-1 újabb motor. A Godot-ot még nem néztem, de majd ránézek arra is. Ez azért is jó, mert például az Unreal már 94 óta görgetett valami, amit inkább jobb nem nézni, mert csak kisül az ember szeme a sok toldozás-foldozástól. Nálam a motor írás olyan Carmack-style féle, vagyis 1-1 új verziónál majdnem elölről kezdem, persze 1-1 modul jó és szép részeit azért átveszem. Na meg a 3rd party cuccok is olyanok, mint a Pom-Pom, hol ilyen, hol olyan interfészt kell hozzájuk írni.
    Mutasd a teljes hozzászólást!
  • Én már úgy 30 éve foglalkozom hivatásszerűen programozással (nem ezen a területen), és hobbiból megismertem pár game engine-t (Unity, UhroSharp, LibGDX, Godot), tudom mire képesek, és mire nem. Vannak kód orientált és vannak akár programozás nélkül is használható motorok. Egy libgdx-szel garantáltan nem fogsz megmozdulni anélkül, hogy előzőleg körbe programozod a világot, de van egy rakás motor amihez egyáltalán nem kell - persze ezek képességei valóban limitáltak, ahogy anno a C64-en is a SEUCK. Egy Unity vagy a Godot is csak az infrastruktúrát adja meg neked: sprite-ok, fények, fizika, részecske rendszer, és ehhez ad egy programozási felületet ahol te megírhatod hogy mi történjen a játékban. És te döntöd el, hogy a dologból FPS, TPS, RTS vagy körökre osztott stratégia, vagy akár valami teljesen új dolog szülessen - akár nem is feltétlenül játék.

    Amúgy, ha játékmotor írás a hobbid, akkor a helyedben megnézném a Godot-ot. Ez open source, és szerintem nagyon jó - bár sajna pont a motor minősége nem ér fel a Unity-hez (= sokkal lassabb legalábbis gyengébb droidokon), és elég aktív fejlesztői közösség van körülötte.
    Mutasd a teljes hozzászólást!
  • Igen, a kép jól bemutatja miről is van szó. Ez persze nem azt jelenti, hogy minden egyes részt a 0-ról meg kell írni, nem tudom miért hiszi mindenki azt, ha engine fejlesztésről van szó, hogy rögtön operációs rendszert és hardvert is fejleszteni kell hozzá.
    Az Unreal, meg a többi is tele van kész elemekkel, bizonyos részek vannak csak megírva a "0-ról". Az a jó benne, hogy mindenki a szintjének és a munka/kihívás mértékének megfelelően ír meg bizonyos részeket.
    Ha pedig csak a játékfejlesztés érdekel valakit, akkor irány a Photoshop és a 3ds Max, meg egy letölthető engine és már mehet is a fejlesztgettyű vizuálisan scriptelve, vagy akár a Pythonnal is. 
    Mutasd a teljes hozzászólást!
  • Most hogy így beszélgettetek róla, bele néztem egy kicsit a témába (Game Engine Architecture). Érdekes. Ha 20 évvel fiatalabb lennék lehet én is bele kóstolnák. 

    De így marad az IDE-vé fejlesztett/konfigurált emacs és a klasszikus triumvirátus (odoo, webpy, arcpy) 
    Mutasd a teljes hozzászólást!
  • Én már nem egy game engine-t raktam össze és hobbi szinten cirka 30 éve foglalkozom a témával, tudom miről van szó (igen a SEUCK és a Game Maker c64-en is game engine-ek voltak, amikkel lehetett programokat fejleszteni programozás nélkül!). Ellenben te viszont csak irkálsz össze-vissza mindenféle zöldséget keverve alapvető fogalmakat, mint az IDE, meg a game engine.
    Neked inkább középiskolába kéne visszamenned egy kis informatika tanulásra. Ha sikeresen letetted az érettségit infóból, akkor nézz meg 1-2 tutorialt, hogy mi az a game engine és hogyan kell velük programot fejleszteni programozás nélkül:
    SEUCK
    Game Maker
    Unreal

    Ha eddig eljutottál és megértetted a fentieket, akkor gyere vissza!
    Mutasd a teljes hozzászólást!
  • Sokan javasolják, amcsi egyetemek programozó kurzusai is.

    Mondjuk pont egy egyetemen tartok tőle, hogy mezítlábas Python-ban ugyanolyan konzolos példákkal küzdenek, mint akár Pascal-ban meg C-ben tennék, és kurzus lelki szemei előtt olyan magasztos célok lebegnek, mint a SciPy, NumPy meg TensorFlow használata. Esetleg egy kis Jupyter notebookozás hozzá, ahol első közelítésben pont ugyanazokat a konzolos üzeneteket nézegetik, csak egy browserben.
    Mutasd a teljes hozzászólást!
  • A Pyhton nem tudom menyire alkalmas kezdésnek

    Sokan javasolják, amcsi egyetemek programozó kurzusai is.
    De nekem sem sikerült megbarátkoznom vele.
    Eddig mindig oda jutottam, hogyha kellett volna egy kis util amit pythonban is össze lehet hozni, akkor is inkább beizzítottam a VS-t és C#-ban rendesen megcsináltam. 

    Mondjuk ha nem gépelőtt ülő fejlesztő lennék, hanem helyszinen barkácsoló, az más lenne.
    Mutasd a teljes hozzászólást!
  • Majd ha egy Visual Studio-t összeraktál, akkor gyere vissza, és mesélhetsz hogy mi köze van neki egy game engine-hez. Kezdetnek mondjuk egy C#7 compiler is megteszi, ha egyáltalán érted, hogy miről van szó. 
    Mutasd a teljes hozzászólást!
  • Te egy IDE-t hasonlítasz össze egy Game Engine-el. Majd, ha összeraktál már egy game engine-t, akkor gyere vissza és mesélhetsz arról, hogy mi köze a Visual Studio-hoz, de kezdetnek egy demo tool is megteszi, ha egyáltalán érted, hogy miről van szó.
    Mutasd a teljes hozzászólást!
  • Ja. A Visual Studio-ban sem kell programoznod, hiszen annak is az a lényege, hogy egy programkészítő eszköz. Szerintem, először próbálj meg összerakni a Unity-ben mondjuk legalább egy Pac-Man-t, aztán utána megbeszéljük
    Mutasd a teljes hozzászólást!
  • Megoldják scriptekkel (Unity), vagy újabban vizuálisan (Unreal), így effektíve programozni nem kell, hisz ez az engine egyik lényege, hogy ez egy játék készítő eszköz. Olyan, mint a különböző webes keretrendszerek (pl WordPress), ahol szintén nincs mit programozni..
    Mutasd a teljes hozzászólást!
  • Attól függ milyen játékot fejleszt az illető. Vannak olyan játékok amit akár programozó nélkül is megcsinálhatsz (Pl. N+1 flappy birds), és vannak kód orientáltabb indie játékok is. Sőt, szerintem inkább ott lehet egyedi játék logikát fejleszteni, a nagy stúdiók nem annyira szeretik kockáztatni a pénzüket valami nagyon új játékmenettel.
    Mutasd a teljes hozzászólást!
  • Én se csont kezdőnek ajánlanám a C++ t, de nem is arról volt szó, hanem arról, hogy cégnél éles kódhoz olyanok nyúljanak hozzá, akik amúgy is tudják, hogy mit csinálnak, és ott már nem a nyelv a lényeg. A Pyhton nem tudom menyire alkalmas kezdésnek, én biztos beleőrültem volna, ha folyton syntax error-t dobna attól, hogy elütök egy space-t.
    Mutasd a teljes hozzászólást!
  • Egy programozó nem fog bejutni indie csapatba, mert ott grafikusok, esetleg scriptelők vannak. Játékfejlesztő != programozó. A másik, hogy az AAA sem feltétlenül azt jelenti, hogy le kell modellezni a fél világot (egyébként, ha letöltene egy motort akkor se tudná lemodellezni, tehát teljesen mindegy), ez jelenthet minőséget, játékidőt, ilyen-olyan minősítést stb. Ez pedig nem létszámfüggő, mert akkor a Croteam, Id és még több másik stúdió is lehúzhatná a rolót.
    Mutasd a teljes hozzászólást!
  • Az elmúlt pár évben semmilyen Perlben készült kóddal nem találkoztam. De amikor utoljára láttam objektum-orientált Perl kódot, az annyira nagyon nem tetszett.
    Mutasd a teljes hozzászólást!
  • Egyrészt nem csak az Unreal van, másrészt azért a vele készült játékok listáján is van elég sok érdekes cím:

    List of Unreal Engine games - Wikipedia

    Ráadásul nem csak az Unreal van a piacon, és Pl. a Unity-nak már más a licensze
    List of Unity games - Wikipedia
    List of CryEngine games - Wikipedia

    Emellett, bár a nagy stúdiók ugyan megcsinálják a saját belső motorjaikat, de azt is újra hasznosítják, és ha megnézed, egy-egy Anvil verzió mögött több Assassin's Creed és más játék is van, és dolgozott rajtuk vagy 2 programozó.

    És persze ezek csak az AAA kategóriás "nagy" játékok. De a legtöbb játék ma már inkább kisebb mobilos. Az átlag fejlesztő pedig előbb fog bekerülni egy indie csapatba mint a Bethesda Game Studio-ba vagy az Ubisoft-hoz játékot fejleszteni. Márpedig AAA játékot nem fogsz egyedül csinálni, mert ugyan lehet hogy a játékmotort megcsinálod ha zseni vagy, de nem fogod egyedül lemodellezni a fél világot.
    Mutasd a teljes hozzászólást!
  • Max a self titled AAA játékok készülnek nem házon belüli motorral, de a nagy neveknél(20m+ eladás) egyszerűen nem éri meg, hiába "csak" 5% az unreal licenc, inkább 2szer annyiért craftolnak egy sajátot, amit majd beraknak 5játék alá, és máris nyertek 150%-ot, és az olyan lesz amilyet ők akarnak.
    Persze a random kis indie stúdiók, akik saját mondásuk alapján AAA gamet csinálnak tényleg kész cuccokat használnak, de annak ellenére, hogy kész cuccal dolgoznak, általában hemzsegnek a bugtól, és eszméletlenül rosszul vannak optimalizálva...
    Mutasd a teljes hozzászólást!
  • Tény, hogy a C++ tanulásához több, sokkal időt kell beletenni mint egy Python, Java vagy C#.
    Egy kezdőnek soha, de soha nem ajánlanám.
    A részletekben fog elveszni és a lényeget (pl. OOP) nem tudja megérezni.
    Mutasd a teljes hozzászólást!
  • --[Érdekes, perlben nem találkoztam annyira átláthatatlan kóddal.

    Ez foleg azert erdekes ugye, mert leginkabb a perlt szoktak write only nyelvkent aposztrofalni. :)
    Mutasd a teljes hozzászólást!
  • Nem c++, mert abban nem programozom, de láttam olyan python kódokat, ahol a kígyó leharapná a saját farkát is. Pedig nem kezdő gyerekek írták.
    De C-ben sem jobb a helyzet. Találkoztam - dolgoznom kellett olyan c-ben írt python modulokkal, amiket inkább újra írtam. Még az volt a szerencse, hogy nem millió soros projektet voltak 

    --[Érdekes, perlben nem találkoztam annyira átláthatatlan kóddal.
    Mutasd a teljes hozzászólást!
  • Ha dolgoztál volna már olyan millió soros nagyságrendű projekten amire 5 évvel később kerültél rá, mint hogy az utolsó, a projektet eredetileg fejlesztő kolléga is kilépett attól a cégtől akiktől a te céged átvette a fejlesztést, nem hiszem hogy így látnád a világot. Saját magamról tudom, hogy az ember kb. addig látja így a világot, amíg többnyire a saját kódját hegeszti 
    Mutasd a teljes hozzászólást!
  • A szép kód írása nem a nyelven múlik, C++ nál pedig különösen nem, mivel rengeteg feature van benne és adott a lehetőség sokféle stílusra. Gyenge kifogás a nyelvre kenni a fejlesztők hibáját, akik nem tudják betartani a kódolási szabályokat. Ha már ennyin elakad a project, akkor más egyszerűsített nyelvnél is el fog akadni. Az, hogy lassan  már a kisegítő iskolából is toboroznak a cégek embereket elég félrevezető és nem biztos, hogy ezt csupán egy butított nyelv használatával lehet kompenzálni. Pontosan erről szól a szakma, hogy hozzáértők nyúlhatnak a kódhoz, akik felelősséget is vállalnak. Hosszútávon ez a kifizetődő, mert így marad a kód áttekinthető és könnyebben fejleszthető. Rövidtávon vannak gyengébb próbálkozások, majd meglátjuk pár év múlva ezek a projectek hol lesznek.
    Mutasd a teljes hozzászólást!
  • Pont az AAA játékok készülnek saját motorral. Legjobb példa pont az, amit mutattál, ugyanis autós fizika AAA színtű játékhoz letölthető/lienszelhető nincsen. Amit a PhysX, Bullet, meg a többi tud az lópikula a mai NFS, Forza stb. szinthez.  Az Unreal, meg a Unity pedig messze nem autó szimulátorokhoz való, ugyanis a hozzájuk tartozó/csatolható általános célú arcade fizikai modul alkalmatlan egy ilyen feladatra. Abban igazad van, hogy mondjuk egy Forza saját fizikai motorja bugosabb, mint mondjuk egy PhysX, viszont az előbbi saját modul pont autós szimulációkhoz lett fejlesztve, utóbbi pedig egy általános célú "mindenre való" fejlesztés. Mindennek megvan a maga előnye és hátránya, ezeket mérlegelni kell.

    Ugyanígy a grafikai modul is más. Egyik szobákat támogat, másik nyílt tereket. Aztán ott az újfajta fizikai renderelés, amiben szintén eltérések vannak és így tovább. 

    Ezért kell a saját motor, ahol 1-1 modult bizony meg kell írni, mert olyan nincsen, ami mindenre jó és pont úgy, ahogy a fejlesztőknek kell. Valamelyik erre jó, a másik amarra, valamelyik így tud valamit, a másik meg amúgy, de olyan, ami és ahogy mindent tud, olyan nincsen és soha nem is lesz.

    Kompromisszumokkal kell ezeket a kész motorokat használni, ami arra elég, hogy valaki az ezredik FlappyBird-öt "megírja", de a legújabb NFS-hez édeskevés.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd