Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[IrrBullet] Problem z uruchomieniem

Ostatnio zmodyfikowano 2013-08-06 16:27
Autor Wiadomość
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
P-87683
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 :)
P-87684
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()'|

C/C++
#include <irrlicht.h>
#include "characterexample.h"
int main()
{
    CCharacterExample example;
    example.runExample();
    return 0;
}

tutaj characterexample.h:
C/C++
#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 // __CHARACTER_EXAMPLE_H_INCLUDED__

i characterexample.cpp:
C/C++
#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 )
            {
                //shootCube(vector3df(2,2,2), 1);
                //return true;
            }
           
            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 );
   
   
    ////////////////////////////
    // Create irrBullet World //
    ////////////////////////////
    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 );
   
   
    // Set our delta time and time stamp
    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();
       
       
        /*sydney->setPosition(character->getWorldTransform().getTranslation() +vector3df(0,-(( sydney->getBoundingBox().MaxEdge.Y-sydney->getBoundingBox().MinEdge.Y) * 0.1*0.5f),0));
                vector3df dir = camera->getAbsolutePosition()-sydney->getAbsolutePosition();
                dir.normalize();
                dir.Y = 0;
                dir *= -1;
       
                character->setWalkDirection(dir*0.3f);*/
       
        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() );
       
        // Step the simulation with our delta time
        world->stepSimulation( DeltaTime * 0.001f, 120 );
       
       
        world->debugDrawWorld( debugDraw );
       
        // This call will draw the technical properties of the physics simulation
        // to the GUI environment.
        world->debugDrawProperties( true );
       
       
        device->getSceneManager()->drawAll();
        device->getGUIEnvironment()->drawAll();
       
        device->getVideoDriver()->endScene();
    }
   
    delete character;
   
    // We're done with the IrrBullet world, so we free the memory that it takes up.
    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 ) ); // 400, 3, 400
    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 );
   
    //shape->setMargin(0.01);
   
    IRigidBody * body;
    body = world->addRigidBody( shape );
}


CCharacterExample::~CCharacterExample()
{
}
P-87716
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.
P-87797
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.
P-87842
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
P-87884
DejaVu
» 2013-08-06 16:27:23
@klonyyy: rozwiązałeś problem? Mógłbyś się nim podzielić :)
P-89611
« 1 »
  Strona 1 z 1