klonyyy Temat założony przez niniejszego użytkownika |
[IrrBullet] Problem z uruchomieniem » 2013-07-12 21:07:16 Witam! Ostatnio dowiedziałem się o fajnej bibliotece, a mianowicie irrBullet. Stworzyłem nowy projekt w C::B, uruchomiłem na nim jakieś hello world z irrlichta, po czym postanowiłem uruchomić irrbullet, zrobiłem wszystko co było w pliku readME ale co chwilę wyskakiwał jakiś error. Na szczęście udało mi się go zlikwidować, ale pojawiły się kolejne 4 : obj\Debug\main.o||In function `main':| \gra\Nowy folder\TEST\main.cpp|7|undefined reference to `CCharacterExample::CCharacterExample()'| \gra\Nowy folder\TEST\main.cpp|9|undefined reference to `CCharacterExample::runExample()'| \gra\Nowy folder\TEST\main.cpp|11|undefined reference to `CCharacterExample::~CCharacterExample()'| \gra\Nowy folder\TEST\main.cpp|11|undefined reference to `CCharacterExample::~CCharacterExample()'| ||=== Build finished: 4 errors, 0 warnings (0 minutes, 1 seconds) ===| Niestety nie jestem w stanie sobie z nimi poradzić. myślałem że robię coś źle, więc postanowiłęm uruchomić gotowy program z folderu examples - otworzyłem projekt w C::B sprawdziłem includy , wszystko tak jak w readme uruchamiam main.c i tutaj program przestaje działać :/ I już nie wiem co mam robić, bo wszystko co mi przychodzi do głowy nie działa. Byłbym bardzzo wdzięczny gdyby ktoś opisła krok po kroku jak dla dziecka linkowanie takiej bibliteki. Aha i jeszcze pytanie gdzie mam wypakować Bulleta ? w folderze z irrBulletem ? Co mam zrobić z Bulletem ? z góry dziękuję i pozdrawiam |
|
kubawal |
» 2013-07-12 21:09:09 Zazwyczaj błędy typu "undefined reference" znaczą, że linker nie mógł znaleźć zawartości danej funkcji, co zazwyczaj oznacza, że nie dolinkowałeś jakichś lib'ów :) |
|
klonyyy Temat założony przez niniejszego użytkownika |
» 2013-07-13 07:10:35 Zmieniłem CCharacterExample example; na CCharacterExample example(); i teraz wyskakuje jeden błąd, więc chyba wszystko jest dobrze zalinkowane: \gra\Nowy folder\TEST\main.cpp|10|error: request for member 'runExample' in 'example', which is of non-class type 'CCharacterExample()'| #include <irrlicht.h> #include "characterexample.h" int main() { CCharacterExample example; example.runExample(); return 0; }
tutaj characterexample.h: #ifndef __CHARACTER_EXAMPLE_H_INCLUDED__ #define __CHARACTER_EXAMPLE_H_INCLUDED__
#include "C:/framework/exampleframework.h" #include <irrString.h> #include <irrTypes.h>
class IRigidBody;
class CCharacterExample : public CExampleFramework { public: CCharacterExample(); virtual ~CCharacterExample(); virtual void runExample(); virtual bool OnEvent( const irr::SEvent & event ); void createBoxes(); void createGround(); bool IsKeyDown( irr::EKEY_CODE keyCode ) const { return KeyIsDown[ keyCode ]; } private: irr::u32 rows; irr::u32 columns; bool KeyIsDown[ irr::KEY_KEY_CODES_COUNT ]; irr::f32 DirZ; irr::f32 DirX; };
#endif
i characterexample.cpp: #include <irrlicht.h> #include <irrBullet.h> #include "characterexample.h"
using namespace irr; using namespace core; using namespace video; using namespace scene; using namespace gui; using namespace io; using namespace std;
CCharacterExample::CCharacterExample() : DirZ( 0.0f ) , DirX( 0.0f ) { }
bool CCharacterExample::OnEvent( const SEvent & event ) { if( !device ) return false; switch( event.EventType ) { case EET_MOUSE_INPUT_EVENT: { if( event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN ) { } else if( event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN ) { shootSphere( vector3df( 0.2, 0.2, 0.2 ), 0.2 ); return true; } } break; case EET_KEY_INPUT_EVENT: { KeyIsDown[ event.KeyInput.Key ] = event.KeyInput.PressedDown; if( event.KeyInput.Key == KEY_KEY_P && event.KeyInput.PressedDown == false ) { world->pauseSimulation( !world->simulationPaused() ); return true; } else if( event.KeyInput.Key == KEY_KEY_R && event.KeyInput.PressedDown == false ) { while( world->getNumCollisionObjects() > 0 ) { world->removeCollisionObject( world->getCollisionObjectByIndex( 0 ) ); } createGround(); createBoxes(); return true; } } break; default: break; } return false; }
void CCharacterExample::runExample() { for( s32 i = 0; i < KEY_KEY_CODES_COUNT; i++ ) KeyIsDown[ i ] = false; debugDraw = true; drawProperties = true; drawWireFrame = false; rows = 10; columns = 10; device = createDevice( video::EDT_OPENGL, dimension2d < u32 >( 640, 480 ), 16, false, false, false, this ); device->setWindowCaption( L"irrBullet Character Example - Josiah Hartzell" ); device->getFileSystem()->addFolderFileArchive( "C:/media/" ); device->getSceneManager()->addLightSceneNode( 0, vector3df( 20, 40, - 50 ), SColorf( 1.0f, 1.0f, 1.0f ), 4000.0f ); world = createIrrBulletWorld( device, true, debugDraw ); world->setDebugMode( EPDM_DrawAabb | EPDM_DrawContactPoints ); world->setGravity( vector3df( 0, - 10, 0 ) ); camera = device->getSceneManager()->addCameraSceneNodeMaya(); camera->setPosition( vector3df( 50, 15, 200 ) ); camera->bindTargetAndRotation( true ); createGround(); createBoxes(); IKinematicCharacterController * character = new IKinematicCharacterController( world ); IAnimatedMeshSceneNode * sydney = device->getSceneManager()->addAnimatedMeshSceneNode( device->getSceneManager()->getMesh( "sydney.md2" ) ); sydney->setScale( vector3df( 0.14, 0.14, 0.14 ) ); sydney->getMaterial( 0 ).setTexture( 0, device->getVideoDriver()->getTexture( "sydney.bmp" ) ); sydney->setMD2Animation( scene::EMAT_STAND ); u32 TimeStamp = device->getTimer()->getTime(); u32 DeltaTime = 0; EMD2_ANIMATION_TYPE animation = EMAT_STAND; EMD2_ANIMATION_TYPE newAnimation = EMAT_RUN; bool jump = false; while( device->run() ) { device->getVideoDriver()->beginScene( true, true, SColor( 255, 100, 101, 140 ) ); DeltaTime = device->getTimer()->getTime() - TimeStamp; TimeStamp = device->getTimer()->getTime(); if( IsKeyDown( KEY_KEY_W ) ) { DirZ = - 1.0f; } else if( IsKeyDown( KEY_KEY_S ) ) { DirZ = 1.0f; } else { DirZ = 0.0f; } if( IsKeyDown( KEY_KEY_A ) ) { DirX = 1.0f; } else if( IsKeyDown( KEY_KEY_D ) ) { DirX = - 1.0f; } else { DirX = 0.0f; } if( IsKeyDown( KEY_SPACE ) ) { character->jump(); jump = true; } if( DirZ != 0 || DirX != 0 ) newAnimation = EMAT_RUN; else newAnimation = EMAT_STAND; if( !character->isOnGround() ) { newAnimation = jump ? EMAT_JUMP: EMAT_CROUCH_STAND; } else jump = false; if( animation != newAnimation ) { animation = newAnimation; sydney->setMD2Animation( animation ); } sydney->setPosition( character->getWorldTransform().getTranslation() ); vector3df rot( 0, camera->getRotation().Y - 90.0f, 0 ); sydney->setRotation( rot ); vector3df direction( DirX, 0.0f, DirZ ); irr::core::matrix4 m; m.setRotationDegrees( vector3df( 0, camera->getRotation().Y - 180.0f, 0 ) ); m.transformVect( direction ); character->setPositionIncrementPerSimulatorStep( direction * 0.3f ); camera->setTarget( sydney->getPosition() ); world->stepSimulation( DeltaTime * 0.001f, 120 ); world->debugDrawWorld( debugDraw ); world->debugDrawProperties( true ); device->getSceneManager()->drawAll(); device->getGUIEnvironment()->drawAll(); device->getVideoDriver()->endScene(); } delete character; if( world ) delete world; if( device ) device->drop(); }
void CCharacterExample::createBoxes() { for( u32 j = 0; j < columns; j++ ) { for( u32 i = 0; i < rows; i++ ) { addCube( vector3df( 3 * j, 0 + 3 * i + 3, 0 ), vector3df( 3, 3, 3 ), 3 ); } } }
void CCharacterExample::createGround() { ISceneNode * Node = device->getSceneManager()->addCubeSceneNode( 1.0 ); Node->setScale( vector3df( 300, 3, 300 ) ); Node->setPosition( vector3df( 20, 0, 10 ) ); Node->setMaterialFlag( video::EMF_LIGHTING, true ); Node->setMaterialFlag( video::EMF_NORMALIZE_NORMALS, true ); Node->setMaterialTexture( 0, device->getVideoDriver()->getTexture( "rockwall.jpg" ) ); if( drawWireFrame ) Node->setMaterialFlag( EMF_WIREFRAME, true ); ICollisionShape * shape = new IBoxShape( Node, 0, false ); IRigidBody * body; body = world->addRigidBody( shape ); }
CCharacterExample::~CCharacterExample() { }
|
|
pekfos |
» 2013-07-13 22:04:33 i teraz wyskakuje jeden błąd, więc chyba wszystko jest dobrze zalinkowane: |
Dokładniej mówiąc, teraz jest jeszcze gorzej. Zrób tak jak było i sprawdź, czy masz wszystkie pliki w projekcie. |
|
Gabes |
» 2013-07-14 13:34:59 Chyba zaczyna się nowa batalia, VersionInfo: irrBullet Version: 0.1.8 Compatibilities: Bullet Version: 2.75-2.77 (2.77 included) Irrlicht Version: 1.6.1, 1.7, 1.7.1, 1.7.3
Do projektu Character.cbp dodać należy tylko irrlichta. |
|
klonyyy Temat założony przez niniejszego użytkownika |
» 2013-07-15 07:05:50 Nagrałem filmik z tym jak od instalacji uruchamiam projekt może to wam pomoże powiedzieć dokładnie co jest źle : http://www.youtube.com/watch?v=0XBmzzMNR-M"Bullet Version: 2.75-2.77 (2.77 included) Irrlicht Version: 1.6.1, 1.7, 1.7.1, 1.7.3 Do projektu Character.cbp dodać należy tylko irrlichta." Masz na myśli że trzeba dolinkować irrlichta ? Aha i 2.77 included znaczy że w paczce irrbullet 0.1.8 jest już bullet ? Bardzo dziękuję za zainteresowanie tematem |
|
DejaVu |
» 2013-08-06 16:27:23 @klonyyy: rozwiązałeś problem? Mógłbyś się nim podzielić :) |
|
« 1 » |