6. fejezet - létrehozása saját mozgást vezérlő
Ami a saját mozgást vezérlő
Mozgó tárgyak és a repülő - ez biztosan jó, de mi van, ha szüksége van valami más? Lássuk, hogyan lehet létrehozni egy mozgást vezérlő egy érdekes objektum - Space Tank Mark VII Doppler radar X-band. A tartály lehet mozgatni a bolygó felszínén a különböző sebességű és bekapcsolása a mozgásban. Tornyát forog gyorsan, és a fegyver emelt. Azt hiszem, elfelejtettem említeni a radar, amely boldogan lóg a torony? Ábra. 6.11 Mark VII mutat tank harci küldetés.

Ábra. 6.11. Tér tartály Mark VII Doppler radar X-band
Hmm. Lehet, hogy észrevette, hogy a tartály nem kerék? Tudok ajánlani két magyarázat:
Ez egy repülő tank.
Túl lusta voltam, hogy zavarom kerekekkel.
Ábra. 6.12 ábra egy diagram a mozgatható részek a tartály (kerekek). Az illusztráció a színes lapot.

Ábra. 6.12. Összetevői tartály
Melléklet Tank C3dTank osztály származik C3dFrame. A sorrend, amelyben a tartály a következőképpen van felépítve: első, tulajdonítunk a ház a külső keret, majd csatolja, hogy a test a torony és a végső fokon, és csatolja a fegyvert, hogy a radar torony. Radar is állandó forgatás. A fegyver mehet fel és le, forgó vízszintes tengely körül. A torony forgatható egy függőleges tengely körül a ház.
Mielőtt részletesen foglalkozunk a vezérlő, nézzük meg egy darab kódot, amely létrehoz egy tank, hogy segítsen nekünk, hogy kezelni:
Az egyetlen dolog, hogy furcsának tűnhet - ez az, amit használni radar külön keretben. Meg kellett megtenni, mert az a tény, hogy az y tengelyen a radar az eredeti változata a tartály teljesen eltolódott az a hely, ahol akartam, hogy tegyen egy radar. Ezért beállított felső keret a ponton a koordinátáit a torony, ahol a tengely van elhelyezve, és a tárgy-eltolódott radar a kereten belül, úgy, hogy a fenti a forgástengely (ábra. 6.13).

Ábra. 6.13. Radar elhelyezése egy keretben
Minden objektumok alkotják a tank, jöttek létre a 3D Studio és átalakítható formában .X segítségével conv3ds segédprogramot. tartalmazza a DirectX SDK 2. Ezeket tartalmazza RC2 alkalmazás Fájl forrása:
Tag XOF. előforduló erőforrás fájl, sőt, lehet helyettesíteni bármilyen más húr. Azért választottam XOF csak azért, mert ez a kiterjesztés leírásában alkalmazott fájlokat számok. Az egyetlen hely, program, amely megfelel XOF vonal - funkció C3dShape :: Load. ahol ez a vonal megkülönböztetésére használják XOF-fájlok más típusú források.
A tank osztály három funkciója van a 3dTank.cpp fájlt, és célja, hogy ellenőrizzék a torony sarkok és fegyvereket, valamint a fényképezés:
Amint láthatjuk, hogy meghatározza a helyzetét a torony és ágyú, kiszámítjuk az irányvektor. Aztán az irányt a tárgy képest a szülő; Mellesleg, csak így SetDirection funkció alapértelmezés szerint. De azt akartam, hogy a kód egyszerű és világos, így minden hívás át egy további érv - a referencia képkocka.
Tank kész. Továbbra is megtanulják, hogyan kell kezelni őket.
tartály vezérlő
A legtöbb vezérlő kód van egy osztály C3dWnd és C3dController. A saját vezérlő, de meg kell adni egy új osztályát származó C3dController. OnUpdate felülírja a funkciót és az új kontroller az alkalmazásban. Mielőtt azonban levelet funkciót OnUpdate. kell terjeszteni a joystick beállításait funkciót töltenek be. A konfiguráció, amelyben laktam, táblázatban mutatjuk be a 6.3.
6.3 táblázat. tartály menedzsment
Úgy döntött, hogy az x és r lehetőségek fordult, hogy még a legegyszerűbb két tengely joystick tudnál vezetni egy tank. Azért választottam a SideWinder joystick Pro alkalmazás - ez ad egy reálisabb érzem, mint SpaceBall. Ezen túlmenően, a kiválasztó gombot típus található a kilincset a joystick, tökéletes a torony fordul.
Azzal a szándékkal, hogy a meghajtó, akkor írj egy programot. A teljes kódot a vezérlő két funkciója van:
A kivitelező csak inicializálja néhány helyi adat; minden valódi munka folyik az OnUpdate funkciót. Y paraméter határozza meg az aktuális sebességet. A jelenlegi helyzetét és irányát a tartály tárolja C3dVector tárgyakat. R és X paraméterei határozzák meg a forgatás mátrix, amely meghatározza egy új tájolási vektor irányát. Az irány vektort megszorozzuk a sebessége - a kapott elmozdulás vektort adunk a helyvektora az előző tartály. Aztán mozgatni a tartály egy új helyzetbe, és kérjen egy új irány a tank.
típus kiválasztása gomb határozza meg az irányt a torony. Mi ellenőrizze az állapotát 3 és 4 gombot, és ha megnyomja, az emelési szög a pisztoly változtatjuk egy kis összeget. Ha Ön rendelkezik egy ilyen gomb megnyomásakor a fegyver csövét lassan emelkedik vagy csökken.
Csak akkor tudjuk figyelembe venni a tűz gombot. Ellenőrizze a helyi változó m_bWasFire megakadályozza újbóli felvételt, amikor a gomb lenyomása - automata fegyverek az Egyesült Államokban tilos.
Végszerelés alkalmazások
Tank alapjául alkalmazására került mozgatása az alkalmazás kódját. Töröltem a kívánt menü parancsokat, és cserélje ki a jelenlegi adat objektum C3dTank. Ezen kívül, már benne van az elrendezés a háttérkép. Az alábbi kódrészlet, ami van hangolva az alkalmazás főablakában:
NewScene függvény létrehoz elrendezés és meghatározza a kezdeti feltételeket:
Ha a tartály elhagyja a szélét az ablak, és veszít, akkor válassza a Fájl&mnsp;| Új. okoznak NewScene funkciót, és kezdje újra. Bal mondani a legutóbbi módosítások én - amikor a szabályozó kér egy mutatót a keret, amellyel meg kell dolgozni, OnGetCtrlFrame függvény visszaad egy pointert azt a tartály:
Felhívjuk figyelmét - bár a funkciót kell visszatérnie egy pointert C3dFrame. ez valójában átmegy a mutatót az objektum C3dTank. Használjuk ezt a tényt OnUpdate funkciót. kódot, amelyet a fent hivatkozott. Ha már korábban is gondolta volna, hogy az átalakítás egy pointert C3dFrame be C3dTank mutató néz kétséges, de most ez könnyen azt biztosítja, hogy minden joga megvolt erre.