[Kurs Irrlicht, C++] III. Klawiszologia
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
var pageTracker = _gat._getTracker("UA-3650348-1");
pageTracker._initData();
pageTracker._trackPageview();
Serwis został przeniesiony pod nową domenę: http://cpp0x.pl/ Strona główna Kursy Artykuły Forum Pliki Promuj Nas! PowrótHistoria odwiedzonych stronPoprzednia lekcjaKurs Irrlicht, C++Następna lekcjaIII. Klawiszologia#include <irrlicht.h>using namespace irr;using namespace core;using namespace scene;using namespace video;// Tworzymy klaseclass Klawisze : public IEventReceiver{ public: virtual bool OnEvent(const SEvent& event) { // Zapamiętuje położenie klawisza (klucza) (góra/dół) if (event.EventType == irr::EET_KEY_INPUT_EVENT) KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown; return false; } // Sprawdza czy klawisz (klucz) został użyty virtual bool IsKeyDown(EKEY_CODE keyCode) const { return KeyIsDown[keyCode]; } Klawisze() { for (u32 i=0; i<KEY_KEY_CODES_COUNT; ++i) KeyIsDown[i] = false; } private: // Używamy by zgromadzić aktualny stan każdego klawisza (klucza) bool KeyIsDown[KEY_KEY_CODES_COUNT];};int main(){ // Tworzymy urządzenie Klawisze aktywne; IrrlichtDevice* device = createDevice( EDT_OPENGL, core::dimension2d<s32>(640, 480), 32, false, false, false, &aktywne); video::IVideoDriver* video = device->getVideoDriver(); scene::ISceneManager* menage= device->getSceneManager(); scene::ICameraSceneNode *kam = menage->addCameraSceneNodeFPS(); device ->getCursorControl()->setVisible(false); kam ->setPosition(core::vector3df(0,0,-100)); //Wczytywanie modelu IAnimatedMesh* pudlo = menage->getMesh("media/mesh/pudlo.md2"); IAnimatedMeshSceneNode* pud = menage->addAnimatedMeshSceneNode( pudlo ); pud -> setScale (core::vector3df(-300,-300,-300)); pud -> setPosition (core::vector3df(0,0,900)); pud ->setMaterialFlag(video::EMF_LIGHTING, false); pud ->setMaterialTexture(0, video->getTexture("media/img/pudlo.png")); while(device->run()) { //Poruszanie do przodu i do tyłu if(aktywne.IsKeyDown(irr::KEY_KEY_W)) { core::vector3df v = pud->getPosition(); v.Z += 0.1f; pud->setPosition(v); } else if(aktywne.IsKeyDown(irr::KEY_KEY_S)) { core::vector3df v = pud->getPosition(); v.Z -= 0.1f; pud->setPosition(v); } //Powiększanie obiektu else if(aktywne.IsKeyDown(irr::KEY_F2)) { core::vector3df v = pud->getScale(); v.X -= 0.01f; v.Y -= 0.01f; v.Z -= 0.01f; pud->setScale(v); } //Obracanie obiektu else if(aktywne.IsKeyDown(irr::KEY_F1)) { core::vector3df v = pud->getRotation(); v.Y += 0.04f; pud->setRotation(v); } else if(aktywne.IsKeyDown(irr::KEY_ESCAPE)) { device->drop(); return 0; } video->beginScene(true, true, video::SColor(255,0,10,200)); menage->drawAll(); video->endScene(); }}Na początku tworzymy klasę do obsługi klawiszy. O klasach przeczytasz w kursie C++. Poszczególne elementy opisałem w komentarzach.Klawisze aktywne;W tej linij kodu stworzyliśmy urządzenie które musi zostać zainicjowane w linij:IrrlichtDevice* device = createDevice( EDT_OPENGL, core::dimension2d<s32>(640, 480),32, false, false, false, &aktywne);if(aktywne.IsKeyDown(irr::KEY_KEY_W)){ core::vector3df v = pud->getPosition(); v.Z += 0.1f; pud->setPosition(v);}Tu wykorzystujemy nasze urządzenie, za pomocą polecenia:if(aktywne.IsKeyDown(irr::KEY_KEY_W)){ core::vector3df v = pud->getPosition(); v.Z += 0.1f; pud->setPosition(v);}Sprawdzamy czy klawisz "w" został wciśnięty, jeżeli tak, to zmieniamy pozycje naszego obiektu w tym wypadku "pud" czyli naszego pudełka, tu wybrany wektor to v.Z.Pamiętajmy by nazwy klawiszy pisać dużymi literami, czyli KEY_KEY_W a, nie KEY_KEY_wv.Z - wektor Z, v.X - wektor X, v.Y - wektor YWektor Z określa kierunek "przód/tył"Wektor X określa kierunek "lewo/prawo"Wektor Y określa kierunek "góra/dół"Cała "klawiszologia" znajduje się na tej stronie: Sprawdź Pliki potrzebne do uruchomienia tej lekcji, można pobrać z naszego repozytoriumPoprzednia lekcjaKurs Irrlicht, C++Następna lekcjaWszelkie prawa zastrzeżone. Autor: Mariusz KlepaczkoWszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.PowrótHistoria odwiedzonych stronPanel LogowaniaLogin:Hasło:Zapamiętaj mnie!Zarejestruj sięOdzyskiwanie hasłaUżytkownikówObecnie aktywnych:13Zalogowanych:0Zarejestrowanych:4367Ostatnie 24h:413Non-cookie 24h:3190Wszystkich:264759Ostatnia Aktualizacja2010-11-23 00:46:20 (39 dni temu)Ostatnio aktywniHandy9020 godzPiotr Szawdyński21 godzFletcher37 godzwiew39 godzPietrzuch40 godzmat250149 godzbooncki51 godzRaver74 godzWynajem Sopot - wakacjePokój 2 osobowy 130zł/doba;Lokalizacja: Sopothttp://sopotwynajem.pl
O portaluArchiwumHistoriaIndeksRegulaminWyszukiwarkaLinkiRestauracja "ATOL" - Sopot© Wszelkie prawa zastrzeżone 2005-2011Czas wygenerowania strony: 0.250sAutor: Piotr Szawdyński
Wyszukiwarka
Podobne podstrony:
index3 (2)index30b5index3więcej podobnych podstron