Aktuelle Zeit: 22.12.2024, 18:07

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Hilfe bei IGUIElement!
BeitragVerfasst: 18.10.2008, 16:00 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo!

Ich komme an einer bestimmten Stelle von Irrlicht nicht weiter. Die Irrlicht-Doku ist da keine Hifle, obwohl ich diese im großen und ganzen durchstudiert habe.

Ich möchte folgendes erreichen:
Verschiedene GUI-Elemente erstellen (wie IImage, IButton, etc.) und in einer array einen Zeiger zum IGUIElement speichern, um die Elemente später ansprechen zu können.

Code:
struct struct_elements
{
          bool usage;
          bool visible;
          IGUIElement *element;
};

array<struct_elements> elements;

void registerElement(bool usage, s32 id)
{
          struct_elements obj;
          obj.usage = usage;
          obj.visible = false;
          obj.element = 0; // Hier soll der Zeiger auf das IGUIElement zeigen und nich auf Null.
          elements.push_back(obj);
}

void createImage(s32 id, rect<s32> rect, ITexture *texture)
{
          IGUIImage *image = gui->addImage(rect, 0, id, L"");
          image->setImage(texture);
          image->setScaleImage(true);
          image->setVisible(false); // Ja soll so sein
          registerElement(1, id);
}


irr::gui::IGUIElement::getElementFromId wäre wohl die richtige Technik über die Id auf das Element zu kommen, nur wie wird das praktisch angewand?

Das brauche ich, um zB. auf diese oder ähnliche Weise auf die Elemente zuzugreifen:
Code:
elements[0].element->setVisible(true);

Und IGUIElementFactory, was wäre damit? In welchem Fall würde man diese Funktionen verwenden?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Hilfe bei IGUIElement!
BeitragVerfasst: 18.10.2008, 16:18 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Entweder der registerElement gleich den Zeiger mit übergeben oder
Code:
IGUIEnvironment::getElementById( ELEMENTID, true)


das true sorgt dafür, dass auch die children von root durchsucht werden.
Die Factory ist nur zum erstellen von elementen da.

_________________
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  
 
 Betreff des Beitrags: Re: Hilfe bei IGUIElement!
BeitragVerfasst: 18.10.2008, 17:59 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo nochmal!

Zitat:
IGUIEnvironment::getElementById( ELEMENTID, true)
Wo hast du denn diese Funktion her? Bei mir existiert so etwas nicht??

Wie übergebe ich nun einen Zeiger auf IGUIElement, wenn dieses zB. ein IGUIButton ist?

Würde das hier funktionieren?
Code:
void registerElement(bool usage, IGUIElement *element)
{
          struct_elements obj;
          obj.usage = usage;
          obj.visible = false;
          obj.element = element;
          elements.push_back(obj);
}

void createImage(s32 id, rect<s32> rect, ITexture *texture)
{
          IGUIElement *element = 0;
          IGUIImage *image = gui->addImage(rect, 0, id, L"");
          image->setImage(texture);
          image->setScaleImage(true);
          image->setVisible(false);
          element = image->getElementFromId(id);
          registerElement(MENU, element);
}

// ...
          for(s32 i = 0; i < elements.size(); i++)
          {
                    elements[i].element->setVisible(true);
          }
// Pang(!), hier kracht es. Ich gehe mal davon aus, es wurde ein Zeiger auf Null übergeben. Der Fehler liegt wohl oben im element = ...

Also irgendwie geht es nicht. Wo liegt der Fehler?


EDIT: Habs doch gelöst bekommen!
Code:
void createImage(s32 id, rect<s32> rect, ITexture *texture)
{
          IGUIImage *image = gui->addImage(rect, 0, id, L"");
          image->setImage(texture);
          image->setScaleImage(true);
          image->setVisible(false);
          registerElement(MENU, image);
}


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Hilfe bei IGUIElement!
BeitragVerfasst: 18.10.2008, 19:41 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Ah sorry.

IGUIEnvironment::getRootGUIElement()->getElementFromId()

_________________
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  
 
 Betreff des Beitrags: Re: Hilfe bei IGUIElement!
BeitragVerfasst: 19.10.2008, 14:10 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Hallo!

IGUIEnvironment::getRootGUIElement()->getElementFromId()
Ja genau.

Ich habe jetzt alle Probleme dieser Art gelöst.


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de