Bekannte Probleme mit externen Bibliotheken
Aus PantheonWiki
Hier bitte Problem mit den anderen Libs eintragen, die wir so verwenden.
Inhaltsverzeichnis |
Boost Bibliothek
Bind
- Problem: Wie funktioniert das mit dem Bind
- Lösung: http://www.boost.org/libs/bind/bind.html#with_member_pointers
- Brauche ich das Ereignis selbst, muss
boost::bind(&CeConsole::handleEnter, this, _1)
benutzt werden (mehr Parameter sind natürlich möglich, siehe obigen Link), die Methode hat dann die Signaturbool CeConsole::handleEnter(const CEGUI:: EventArgs& e)
- Brauche ich das Ereignis nicht, kann ich z.B. folgendes benutzen
boost::bind(&CharacterSheetWindow::showTab, this, (utf8*)" MagicSheet ")
dann muss die Methode die Signaturbool CharacterSheetWindow::showTab(utf8*)
haben.
- Brauche ich das Ereignis selbst, muss
Thread
- Problem: Wie funktioniert das mit den Threads
- Lösung: http://www.boost.org/doc/html/threads.html
- Boost Thread möchte gerne einen Funktor, als ein Funktionsobjekt haben. D.h. man muss dem Konstruktor von boost::thread ein Objekt mit
operator() ()
übergeben. - Bei thread::sleep(xtime) muss man beachten, dass sleep als Wecker funktioniert, also muss man den Zeitpunkt angeben, an dem sleep wieder aufwachen soll.
- Für einen Mutex muss man zum Locken ein Objekt vom Typ boost::mutex::scoped_lock definieren. Das Mutex ist gesperrt, solange das Lock-Objekt lebt.
- Boost Thread möchte gerne einen Funktor, als ein Funktionsobjekt haben. D.h. man muss dem Konstruktor von boost::thread ein Objekt mit
...
{
scoped_lock lock(mutex);
...
}
...
Crazy Eddie's Gui
- Problem: Beim Debuggen sehe ich nicht den Inhalt eines CeGuiStrings
- Lösung: In Visual Studio gibt es die Möglichkeit dem Debugger zu erklären wie er Klassen/Strukturen anzeigen soll. Dies steht in der Datei autoexp.dat, zu finden unter Programme\Microsoft Visual Studio 8\Common7\Packages\Debugger (o.ä. bei anderen VS-Versionen)
Die folgenden Zeilen einfach in der autoexp.dat hinzufügen, und zwar am Ende der Datei, aber noch über [hresult]:
CEGUI::String{
preview
(
#if (($c.d_reserve) > (32))
(
[$c.d_buffer,sub]
)
#else
(
[$c.d_quickbuff,sub]
)
)
stringview
(
#if ($c.d_reserve > 32)
(
[$c.d_buffer,su]
)
#else
(
[$c.d_quickbuff,su]
)
)
children
(
#(
[raw members]: [$c,!],
[size]: $c.d_cplength,
#if (($c.d_cplength) < 32)
(
#array (
expr: $c.d_quickbuff[$i],
size: $c.d_cplength
) : [$e, c]
) #else (
#array (
expr: $c.d_buffer[$i],
size: $c.d_cplength
) : [$e, c]
)
)
)
}
Die "alte" Darstellung aller Member findet man in "raw members" Das ganze sieht dann so aus:
Devil Bibliothek
- Problem: Ich schaffe es nicht, Devil unter Linux zu kompilieren.
- Lösung: Nimm die 1.6.5, die 1.6.6 und 1.6.7 sind kaputt.
Ogre
Das Ogre Koordinatensystem
Ogre verwendet ein rechtshändiges System, das bedeutet konkret X geht nach rechts, Y nach oben und Z nach vorne (also quasi zu einem hin).
- Rotation um X ist pitch
- Rotation um Y ist yaw
- Rotation um Z ist roll
Noch hinzuzufügen:
- Quaternionen
Links
- Die Ogre-Homepage - http://www.ogre3d.org
- Das Ogre-Wiki - http://www.ogre3d.org/wiki/
- Das Ogre-Forum - http://www.ogre3d.org/phpBB2/index.php
