Aktuelle Zeit: 05.01.2025, 08:15

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 27.11.2009, 16:00 
Offline

Registriert: 27.11.2009, 15:40
Beiträge: 5
Hi leute,

ich versuch mich grade in C++ und Irrlicht einzuarbeiten und bin dabei auf ein Problem gestossen.
Um besser zu verstehen was ich mache und wie ich bestimmte dinge umsetzen kann (zb. 3rd Person View) möchte ich mir eine Ausgabe erzeugen in der die Positionen des Mauszeigers, der (zukünftigen) Spielfigur und die der Kamera ausgegeben werden.
Den folgenden Quellcode habe ich in Microsoft Visual C++ 2008 Express Edition geschrieben und Ausprobiert. Dort funktioniert er auch. Da ich aber eigentlich komplett mit Freeware programmieren möchte habe ich mir gedacht das Eclipse vielleicht besser wäre, also hab ichs mir eingerichtet ausprobiert und da taucht das Problem auf.
Denn Eclipse hängt sich beim Starten des Programms auf , es kommt zu garkeiner Ausgabe.

Der Quellcode:
Code:
#include "irrlicht.h"

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

int main()
{
        IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16, false, false, false, 0);
        if (!device) return 1;

      device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
      IVideoDriver* driver = device->getVideoDriver();
        ISceneManager* smgr = device->getSceneManager();
        IGUIEnvironment* guienv = device->getGUIEnvironment();
      ISceneNode* player = smgr->addAnimatedMeshSceneNode(smgr->getMesh("C:/irrlicht/media/faerie.md2"));
        if (!player)
        {
         device->drop();
            return 1;
        }
      if (player)
        {
         player->setMaterialFlag(EMF_LIGHTING, false);
         player->setMaterialTexture( 0, driver->getTexture("C:/irrlicht/media/sydney.bmp") );
        }
      ICameraSceneNode* camera = smgr->addCameraSceneNode();
      camera->setTarget(player->getPosition());
      camera->setPosition(player->getPosition()+vector3df(100,0,10));

      IGUIStaticText *SText = guienv->addStaticText( L"" , rect<s32>(10,10,110,90), true);
      ICursorControl *cursor = device->getCursorControl();

      vector3df playerPos;
      vector3df cameraPos;
      position2d<irr::f32> cursorPos;

      stringw debug_text;
      int i,j;

      while(device->run())
        {
         cursorPos = cursor->getRelativePosition();
         cameraPos = camera->getPosition();
         playerPos = player->getPosition();

         debug_text = "Cursor X: ";
         debug_text += cursorPos.X;
         debug_text += "\nCursor Y: ";
         debug_text += cursorPos.Y;
         debug_text += "\nCamera X: ";
         debug_text += cameraPos.X;
         debug_text += "\nCamera Y: ";
         debug_text += cameraPos.Y;
         debug_text += "\nCamera Z: ";
         debug_text += cameraPos.Z;
         debug_text += "\nPlayer X: ";
         debug_text += playerPos.X;
         debug_text += "\nPlayer Y: ";
         debug_text += playerPos.Y;
         debug_text += "\nPlayer Z: ";
         debug_text += playerPos.Z;

         //  Start_Problemzone
         j = debug_text.size();

         wchar_t *p= new wchar_t[j+1];
         for( i=0; i<j; ++i)
            p[i]=debug_text[i];
         SText->setText( p );
         // End_Problemzone

         driver->beginScene(true, true, SColor(255,100,101,140));
         smgr->drawAll();
         guienv->drawAll();
         driver->endScene();
        }
      device->drop();
        return 0;
}


Genauer gesagt scheint es die Zeile "SText->setText( p )" zu sein die in Eclipse den Absturz verursacht. Im Visual Studio hingegen nicht, kann mir einer von euch vielleicht erklären wie es dazu kommt?
Oder eine andere Lösung für die Ausgabe erläutern?

MfG der VollDepp


Nach oben
 Profil  
 
BeitragVerfasst: 27.11.2009, 16:41 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Visual Studio Express ist doch Freeware !?

Zum Problem:
Ich denk mal, dass wird einfach daran liegen, dass du den 0-Terminator nicht mit kopierst.
Fügt noch ein
Code:
p[j] = 0x0;

davor, dann sollte es laufen

Wobei es natürlich viel einfach wäre einfach
Code:
SText->setText( debug_text.c_str() );


Zu schreiben. So kannst du dir das von hand kopieren sparen und vermeidest solche Fehler

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 19.12.2009, 15:04 
Offline

Registriert: 27.11.2009, 15:40
Beiträge: 5
Vielen dank für die schnelle hilfe!
Was Visual Studio Express habe ich wohl beim letzten mal die falsche Version installiert und die war nur ne trial.
Diesmal scheine ich die richtige erwischt zu haben. Dennoch bleibe ich der einfachheit halber nun bei Eclipse.

Nochmals danke!


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de