index3d79




[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)
index30b5
index3

więcej podobnych podstron