Autor Wątek: Natychmiastowe zamykanie okna  (Przeczytany 2560 razy)

Offline lukiz1

  • Użytkownik

# Październik 22, 2007, 14:45:28
cześć:) Mam następny problem. Robię wszystko według Tutoriala i za każdym razem jak uruchamiam exe wyskakuje mi okienko dosowe po chwili okno głowne się pojawia na ułamek sekundy a potem wszystko znika główne i dosowe. Wziełem projekt gotowy z tutoriala który przez kogoś był zrobiony i to samo.
Powiedzcie czemu tak się dzieje.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline desertangel

  • Użytkownik

# Październik 22, 2007, 14:51:04
Witam,

Sprawę ułatwisz gdy podasz kod źródłowy oraz kompilator/ide z jakiego korzystasz.

Offline lukiz1

  • Użytkownik

# Październik 22, 2007, 14:57:15
Korzystam z DevC++, a kod jest z toturiala
#include "irrlicht.h"
#include <iostream>




using namespace irr;

using namespace core;

using namespace scene;

using namespace video;

using namespace io;

using namespace gui;





int main()

{
   
   


video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9;

printf("Please select the driver you want for this example:\n"\
      " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
      " (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\
      " (f) NullDevice\n (otherKey) exit\n\n");


char i;
std::cin >> i;

switch(i)
{
   case 'a': driverType = video::EDT_DIRECT3D9;break;
   case 'b': driverType = video::EDT_DIRECT3D8;break;
   case 'c': driverType = video::EDT_OPENGL;   break;
   case 'd': driverType = video::EDT_SOFTWARE; break;
 
   case 'f': driverType = video::EDT_NULL;     break;
   default: return 1;
}



IrrlichtDevice *device =
    createDevice(driverType, core::dimension2d<s32>(640, 480));

if (device == 0)
   return 1;

video::IVideoDriver* driver = device->getVideoDriver();

scene::ISceneManager* smgr = device->getSceneManager();

device->getFileSystem()->addZipFileArchive("../../media/map-20kdm2.pk3");

scene::IAnimatedMesh* mesh = smgr->getMesh("20kdm2.bsp");
scene::ISceneNode* node = 0;



if (mesh)
    node = smgr->addOctTreeSceneNode(mesh->getMesh(0));
   
 if (node)
    node->setPosition(core::vector3df(-1300,-144,-1249));
   
    smgr->addCameraSceneNodeFPS();
   
    device->getCursorControl()->setVisible(false);
   
       




                                         


   
  smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); 
   


  int lastFPS = -1;

while(device->run())

{

  driver->beginScene(true, true, video::SColor(0,200,200,200));

  smgr->drawAll();

  driver->endScene();

  int fps = driver->getFPS();

  if (lastFPS != fps)

  {

     core::stringw str = L"Irrlicht Engine - Quake 3 Map example [";
     str += driver->getName();
     str += "] FPS:";
     str += fps;
     device->setWindowCaption(str.c_str());
     lastFPS = fps;

  }

}



  device->drop();
  return (0);
}

Offline Anton Chigurh

  • Użytkownik

# Październik 22, 2007, 15:16:24
A moze trzeba zmienic konfiguracje z "debug" na "release"? Niestety nie pamietam, jak to sie robilo w dev c++.

Offline Pierdek

  • Użytkownik

# Październik 22, 2007, 15:40:59
Czytales w ogole logi , ktore irllicht wypluwa ?

Offline lukiz1

  • Użytkownik

# Październik 22, 2007, 15:55:19
Nie czytałem przedtem, teraz wziełęm przeczytałem ale nić takiego tam nie widzie

Cytuj
Kompilator: Default compiler
Building Makefile: "D:\Dev-Cpp\moje programy\Irrilcht\Makefile.win"
Wykonywanie  make...
make.exe -f "D:\Dev-Cpp\moje programy\Irrilcht\Makefile.win" all
make.exe: Nothing to be done for `all'.

Wykonanie zakończone
Kompilacja zakończona sukcesem

To mi wyświetla w logu, jedynie zastanawia mnie to "make.exe: Nothing to be done for `all'." . Co o tym myślice.


A tej konfiguracji "debug" i "release szukałem ale nie mogłem znaleść jeżeli byście wiedzieli to napiszcie , a ja dalej będę szukał .

Offline desertangel

  • Użytkownik

# Październik 22, 2007, 19:12:40
Witam,

Sprawdź w pętli while ile razy się wykonała, tzn. wstaw licznik np. integer.
Przykład:

int i_loc_Count = 0;
 while(device->run()) {

  ...
 
  i_loc_Count++;
 };

printf("Ilosc wykonan petli  %i", &i_loc_Count);
getc();

Jeżeli wartość wyniesie 1 oznacza to najprawdopodobniej iż, nie utworzono kontekstu dla urządzenia. Polecam wtedy sprawdzić w dokumentacji Irlichta dlaczego.

Offline lukiz1

  • Użytkownik

# Październik 22, 2007, 19:38:46
Zrobiłem tak jak mówiłeś ale nawet nie mogłem sprawdzić bo wyłączało. Przypomniałem sobie że jak się uruchomi z lini poleceń cmd to zawsze wszystko zostaje to co wyświetli się. Więc włączyłem cmd, wpisałem ścieżkę i uruchomiłem wyświetliło mi że dll nie jest komplętna,a dokłądniej :
Cytuj
Irrlicht Engine version 1.3.1
Microsoft Windows XP Professional Dodatek Service Pack 2 (Build 2600)
DIRECT3D8 Driver was not compiled into this dll. Try another one.
Co o tym sądzice  i co mam zrobić by to naprawić ?

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Październik 22, 2007, 20:00:22
Co o tym sądzice  i co mam zrobić by to naprawić ?

Skompilować z DirectX 8.0. Aby to zrobić, musisz odkomentować odpowiednią linijkę "#define" w pliku IrrCompileConfig.h (jeśli dobrze pamiętam nazwę). Albo po prostu utwórz urządzenie Irrlichta dla takiego sterownika, który JEST w tej chwili wkompilowany do twojego DLL (podejrzewam, że jest to DirectX 9.0).

Offline lukiz1

  • Użytkownik

# Październik 22, 2007, 20:23:21
A co radził byś mi zrobić to pierwsze czy drugie? Na początku programu wybieram DirectXa 9 lub 8 albo OpenGL i tak samo wszystko działa wyłancza mi się. Może mam jakiś błąd w kodzie, w innym razem chyba bede musiał robić to co pisałeś do kazdego DirectXa i OpenGL.

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Październik 22, 2007, 21:44:37
Błędu w kodzie nie widzę. Chyba po prostu masz jakiegoś trefnego DLL-a. Najlepiej otwórz sobie projekt Irrlichta z katalogu 'source' i skompiluj go sam (na domyślnych ustawieniach powinien się skompilować z wrapperami na wszystkie osługiwane renderery, a przynajmniej na większość). Jeśli nie chcesz tego robić, możesz użyć gotowych binarek, ale tych ściągniętych z oficjalnej strony Irrlichta. Musisz też upewnić się, że linkujesz swój projekt z dokładnie tą samą wersją eksportów (plik *.lib albo *.a), którą ma plik 'irrlicht.dll'.