Autor Wątek: Problem z przekazaniem stringw  (Przeczytany 1957 razy)

Offline walkinguer

  • Użytkownik

# Sierpień 03, 2013, 19:28:45
Witam!

Buduję interfejs do swojej gry. Utworzyłem sobie pasek mający za zadanie wyświetlać nazwę ostatnio wywołanej funkcji. Pewnego dnia rozkminię też log w postaci pliku, ale na razię chcę to zrobić w tymże pasku.

Pobrałem do swojej gry trochę kodu z tutoriala i przerobiłem, że niby tak będzie działał:

struct SAppContext
{
IrrlichtDevice *device;
s32 counter;
stringw Debug_Call; //moja zmienna
};

//------------------ RECEIVER

class HopeEventReceiver : public IEventReceiver
{
public:
HopeEventReceiver(SAppContext & context) : Context(context) { }

virtual bool OnEvent(const SEvent& event)
{
if (event.EventType == EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
IGUIEnvironment* env = Context.device->getGUIEnvironment();
stringw Call_Name;

//------------------- (....)

case EGET_BUTTON_CLICKED:
switch(id)
{
case GUI_ID_QUIT_BUTTON:
Call_Name = "Quit";
Context.Debug_Call = Call_Name;
//Context.device->closeDevice();
return true;

default:
return false;
}
break;

default:
break;
}

//------------------------------ W INT MAIN()

/*
ADD RECEIVER
*/

SAppContext context;
context.device = device;
context.counter = 0;
context.Debug_Call;

stringw Debug_Call = context.Debug_Call;


IGUIStaticText* debug_log = env->addStaticText(L"NO CALL", rect<s32>(170,0,350,28), false, true, 0, -1, false);
debug_log->setText(Debug_Call.c_str());


Myślę, że nie muszę wrzucać całego kodu. Po tych kawałkach widać co chciałem osiągnąć, tj.:

Po wciśnięciu przycisku (QUIT) skrypt miałby nadać zmiennej "Debug_Call" wartość "Quit", a następnie wyświetlić ją w StaticText "debug_log".

Niestety wartość "Quit" nie pojawia się, czyli nie została przekazana dalej. Dodam, że jeśli przywrócimy przyciskowi Quit swoją dawną funkcję (wyłączanie programu), to działa bez zarzutu.


Chciałbym utworzyć funkcję, zamiast takich komplikacji, ale jeszcze nie wpadłem na pomysł jak to rozwiązać, więc póki co szukam pomocy do tego rozwiązania.

--------
PS. W tym czasie utworzyłem log do pliku Do szczęścia brakuje mi więc tylko wyświetlania ostatniej komendy w grze.
« Ostatnia zmiana: Sierpień 03, 2013, 20:31:50 wysłana przez walkinguer »

Offline Mr. Spam

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

Offline Xirdus

  • Redaktor

# Sierpień 03, 2013, 20:34:54
Moja kryształowa kula mówi, że powinieneś przenieść linijkę debug_log->setText(Debug_Call.c_str()); do pętli głównej gry.

Offline walkinguer

  • Użytkownik

# Sierpień 03, 2013, 21:46:44
Niestety, byłoby zbyt prosto, już tego próbowałem. Ogółem tekst się wyświetla w pierwotnej formie ("NO CALL") dopóki o niego nie poproszę (debug_log->setText(Debug_Call.c_str());). Wtedy zastępuje go NICOŚĆ.

Cóż, najwyżej sobie daruje jeśli nikt nie wie co ja przekombinowałem. Ogólnie to mój pomysł i wykonanie, więc normalne, że nie działa.

Dzięki za odpowiedź ;)