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

Irrlicht+Irrklang gra wyłącza się

Ostatnio zmodyfikowano 2008-10-02 00:26
Autor Wiadomość
grabon
Temat założony przez niniejszego użytkownika
Irrlicht+Irrklang gra wyłącza się
» 2008-10-01 23:39:55
Tak jak w temacie, po kilkunastu sekundach wyłącza mi się gra. Nie bardzo wiem gdzie popełniłem błąd może znajdzie się ktoś mądrzejszy i mi pomoże. Dodam jeszcze że wszystko gra tak jak chciałem, tyle że, po jakimś czasie sama się wyłącza :-/
Oto kod:
C/C++
#include <irrKlang.h>
#include <irrlicht.h>
#include <iostream>
using namespace irrklang;
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif
class MyEventReceiver
    : 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 ];
    }
   
    MyEventReceiver()
    {
        for( u32 i = 0; i < KEY_KEY_CODES_COUNT; ++i )
             KeyIsDown[ i ] = false;
       
    }
   
private:
    bool KeyIsDown[ KEY_KEY_CODES_COUNT ];
};

int main()
{
    video::E_DRIVER_TYPE driverType;
    MyEventReceiver receiver;
    IrrlichtDevice * device = createDevice( EDT_OPENGL, core::dimension2d < s32 >( 800, 600 ),
    32, false, false, false, & receiver );
    if( device == 0 )
         return 1;
   
    device->setWindowCaption( L"cube_mahjong" );
    video::IVideoDriver * driver = device->getVideoDriver();
    scene::ISceneManager * smgr = device->getSceneManager();
    gui::IGUIEnvironment * env = device->getGUIEnvironment();
    driver->setTextureCreationFlag( video::ETCF_ALWAYS_32_BIT, true );
   
    // dodaj logo
    env->addImage( driver->getTexture( "media/img/logoMAH.png" ),
    core::position2d < s32 >( 10, 10 ) );
    // kamera
    scene::ICameraSceneNode * cam = smgr->addCameraSceneNodeFPS( 0, 100.0f, 60.0f );
    device->getCursorControl()->setVisible( true );
    cam->setPosition( core::vector3df( 0, 0, - 40 ) );
    // ładuj scene
   
    smgr->loadScene( "media/muz.irr" );
    scene::IAnimatedMeshSceneNode * pok = smgr->addAnimatedMeshSceneNode( smgr->getMesh( "media/mesh/komnata0.x" ) );
    pok->setPosition( core::vector3df( 30, 0, 0 ) );
    int lastFPS = - 1;
    while( device->run() )
    {
        {
            // inicjacja silnika muzyki
            ISoundEngine * engine = createIrrKlangDevice();
            //if (!engine)
            //    return 0;
            if( receiver.IsKeyDown( irr::KEY_KEY_P ) )
            {
                // wczytaj muze
                engine->play2D( "media/sounds/bell.wav", false );
            }
        }
       
        pok->setRotation( core::vector3df( 0, 0, 10 ) );
       
        // Klawiszologia
        if( receiver.IsKeyDown( irr::KEY_KEY_W ) )
        {
            core::vector3df v = cam->getPosition();
            v.Z += 0.02f;
            cam->setPosition( v );
        }
        else if( receiver.IsKeyDown( irr::KEY_KEY_S ) )
        {
            core::vector3df v = cam->getPosition();
            v.Z -= 0.02f;
            cam->setPosition( v );
        }
        if( receiver.IsKeyDown( irr::KEY_ESCAPE ) )
        {
            return 0;
        }
        driver->beginScene( true, true, video::SColor( 255, 113, 113, 133 ) );
        smgr->drawAll(); // rysuj scene
        device->getGUIEnvironment()->drawAll();
        driver->endScene();
        int fps = driver->getFPS();
        if( lastFPS != fps )
        {
            core::stringw tmp( L"Cube Mahjong" );
            tmp += driver->getName();
            tmp += L" fps: ";
            tmp += fps;
            device->setWindowCaption( tmp.c_str() );
            lastFPS = fps;
        }
    }
    device->drop();
    return 0;
}
P-1746
DejaVu
» 2008-10-01 23:50:24
Hm... proponuję w takim wypadku uruchomić aplikację, wcisnąć ALT+CTRL+DEL i zobaczyć ile pamięci wciąga Ci twoja aplikacja (zarówno wirtualnej jak i fizycznej). Prawdopodobnie kończy Ci się RAM i aplikacja jest ubijana (ale to tylko postawiona hipoteza, którą powinieneś potwierdzić lub obalić).

Aby zobaczyć ile pamięci wirtualnej wciąga Ci aplikacja musisz dodać sobie taką pozycję na liście procesów. Aby to zrobić musisz w Menedżerze zadań Windows wejść w menu Widok, a następnie kliknąć Wybierz kolumny.... Jeśli ilość zarezerwowanej pamięci się nie zwiększa, to trzeba będzie szukać innej przyczyny zamykania się aplikacji.
P-1747
grabon
Temat założony przez niniejszego użytkownika
» 2008-10-02 00:05:18
No właśnie użycie pamięci 138 440 ale nie wiem dlaczego ? Zaczyna się od zera i cały czas rośnie CPU = 48 Oczywiście te dane są kiedy gra wyłącza się.
w konsoli gry cały czas wczytuje się Using DirectSound8 driver i IrrKlang 3D sound Engine 1.1.0
Tak jakby doczytywało cały czas IrrKlang
Dodam że, przed użyciem IrrKlang'u nie było żadnych problemów.
P-1748
DejaVu
» 2008-10-02 00:12:51
Przypuszczam, że odpowiedź jest w tej linijce:
ISoundEngine * engine = createIrrKlangDevice();
Nie wiem jak ona działa, ale przypuszczam, że tworzy ona obiekt, który później powinno sie usunąć. Ty wewnątrz pętli while() nieustannie tworzysz nowy silnik do obsługi dźwieku i nie usuwasz przy tym starego, co w konsekwencji powoduje wycieki pamięci i program się zamyka gdy pamięć się skończy.
P-1749
grabon
Temat założony przez niniejszego użytkownika
» 2008-10-02 00:26:31
Też tak myślę, zamknięcie to:   engine->drop(); i nie wiem gdzie dodać tą komendę by naprawić błąd.
Ja też nie znam się na IrrKlang, dzisiaj zacząłem, próbowałem użyć sdl_mixer ale jakoś nie mogłem tego ogarnąć z irrlichtem

EDIT: Chyba rozwiązałem problem ;-)
C/C++
int main()
{
    // inicjacja silnika muzyki
    ISoundEngine * engine = createIrrKlangDevice();
    video::E_DRIVER_TYPE driverType;
    MyEventReceiver receiver;
Dałeś mi do myślenia że, dałem w pętli while()
Teraz mam FPS ponad 2800 a, tak miałem około 60 ;-)
Przez cały czas wymuszałem doczytywanie DirectSound i IrrKlang.
P-1750
« 1 »
  Strona 1 z 1