Lekcja 3 Irrlicht - Klawiszologia
Ostatnio zmodyfikowano 2010-05-19 16:10
lenrokskate Temat założony przez niniejszego użytkownika |
Lekcja 3 Irrlicht - Klawiszologia » 2010-05-19 12:07:44 Ten kod z lekcji mi się nie kompiluje: #include <irrlicht.h>
using namespace irr; using namespace core; using namespace scene; using namespace video;
class Klawisze : public IEventReceiver { public: virtual bool OnEvent( const SEvent & event ) { if( event.EventType == irr::EET_KEY_INPUT_EVENT ) KeyIsDown[ event.KeyInput.Key ] = event.KeyInput.PressedDown; return false; } 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: bool KeyIsDown[ KEY_KEY_CODES_COUNT ]; };
int main()
{ 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 ) ); 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() ) { 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 ); } 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 ); } 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(); } }
Linker: -lIrrlicht Błędy: E:\Programowanie\Irr\proby\main.cpp In function `int main()': 40 E:\Programowanie\Irr\proby\main.cpp cannot declare variable `aktywne' to be of type `Klawisze' 40 E:\Programowanie\Irr\proby\main.cpp because the following virtual functions are abstract: 218 D:\Dev-Cpp\include\IEventReceiver.h virtual bool irr::IEventReceiver::OnEvent(irr::SEvent)
|
|
DejaVu |
» 2010-05-19 12:17:52 Zapewne używasz innej wersji irrlichta niż ta co była w kursie. Być może const'a nie powinno być w argumencie metody OnEvent. Generalnie chodzi o to, że metoda klasy Klawisze jest abstrakcyjna, czyli istnieje deklaracja, ale nie posiada implementacji. Deklaracja pochodzi z interfejsu po którym dziedziczysz i nie 'nadpisujesz' wszystkich abstrakcyjnych metod interfejsu w swojej klasie. |
|
lenrokskate Temat założony przez niniejszego użytkownika |
» 2010-05-19 16:10:27 dzięki, mimo że nic z tego co powiedziałeś nie zrozumiałem to poddałeś mi pomysł Wystarczyło zamienić: virtual bool OnEvent( const SEvent & event )
na virtual bool OnEvent( SEvent event )
|
|
« 1 » |