Hi.. 
Die Suche ergab zwar einen Treffer, aber da ging es mehr um globale Variablen und es wurde nur der Code geschrieben, um lokale zu prüfen... Ich krieg das allerdings nicht hin.
Situation: Einheiten, Gebäude und viele Teile des GUIs haben eine Beschreibung in der Variable "desc" gespeichert. Diese soll in der Statusleiste angezeigt werden. Das funktioniert auch bestens.
Ich möchte jetzt aber machen, dass diese Beschreibung nur angezeigt wird, wenn auch eine angegeben ist, weil ich einen Knopf mit einer Beschreibung habe, die erst abrufbar wird, wenn der Knopf durch eine andere Sache zuvor aktiviert wurde. In dem Fall wird geprüft, ob die gerade selektierte Einheit bauen kann, also mit "can_build = true" und nur dann wird intuitiverweise der Bauknopf angezeigt, inklusive Beschreibung (das brauch ich vorallem, wenn ich später machen will, dass die Knöpfe relativ nacheinander platziert werden, je nach den Fähigkeiten der selektierten Einheit und nicht an festen Plätzen).
Problem: Ich krieg es nicht hin, dass dies geprüft wird. Die Beschreibung wird nur angezeigt, wenn ich das "variable_local_exists" komplett weglasse und sonst krieg ich nur eine 0 oder so ein komisches Sonderzeichen. Irgendwie spricht es das selektierte Objekt nicht an - das macht es nur, wenn ich nicht prüfe, ob es die Variable gibt.
Normalerweise spreche ich die Variable der gerade selektierten Einheit mit "id.desc" an, so wie alle anderen Werte von Einheiten und Gebäuden, aber wenn ich die Variable überprüfe, klappt auch das nicht. Bei dem unten stehenden Code gibt es mir immer nur eine 0 aus - egal, ob die Instanz eine Beschreibung hat oder nicht.
Ich denke, der Code erklärt es selbst am besten... Und nicht wundern über die komisch gesetzten Klammern: Ich krieg die GML-Formatierung hier im Forum nicht hin... Eigentlich sieht das übersichtlicher und strukturierter aus.
obj_statusbar
Spoiler anzeigen
Alles anzeigen
Nur, damit keine Verwirrung entsteht: with(obj_mouseover) ist das oberste aller Parents, damit spreche ich alle Instanzen darunter an, die obj_mouseover als Parent haben. Hierarchie: obj_mouseover -> obj_own -> obj_unit und obj_build getrennt. Also da liegt der Fehler nicht. Die Variablenprüfung haut einfach nicht hin.
P.S.: "if global./local.variable != null" fänd ich viel intuitiver

Die Suche ergab zwar einen Treffer, aber da ging es mehr um globale Variablen und es wurde nur der Code geschrieben, um lokale zu prüfen... Ich krieg das allerdings nicht hin.
Situation: Einheiten, Gebäude und viele Teile des GUIs haben eine Beschreibung in der Variable "desc" gespeichert. Diese soll in der Statusleiste angezeigt werden. Das funktioniert auch bestens.
Ich möchte jetzt aber machen, dass diese Beschreibung nur angezeigt wird, wenn auch eine angegeben ist, weil ich einen Knopf mit einer Beschreibung habe, die erst abrufbar wird, wenn der Knopf durch eine andere Sache zuvor aktiviert wurde. In dem Fall wird geprüft, ob die gerade selektierte Einheit bauen kann, also mit "can_build = true" und nur dann wird intuitiverweise der Bauknopf angezeigt, inklusive Beschreibung (das brauch ich vorallem, wenn ich später machen will, dass die Knöpfe relativ nacheinander platziert werden, je nach den Fähigkeiten der selektierten Einheit und nicht an festen Plätzen).
Problem: Ich krieg es nicht hin, dass dies geprüft wird. Die Beschreibung wird nur angezeigt, wenn ich das "variable_local_exists" komplett weglasse und sonst krieg ich nur eine 0 oder so ein komisches Sonderzeichen. Irgendwie spricht es das selektierte Objekt nicht an - das macht es nur, wenn ich nicht prüfe, ob es die Variable gibt.

Ich denke, der Code erklärt es selbst am besten... Und nicht wundern über die komisch gesetzten Klammern: Ich krieg die GML-Formatierung hier im Forum nicht hin... Eigentlich sieht das übersichtlicher und strukturierter aus.

obj_statusbar
GML-Quellcode
- // Draw instance description on statusbar
- with(obj_mouseover) // Check all instances which offer mouseover support
- {
- if mouseover = true // If mouse is over an instance
- { if variable_local_exists("desc") // If instance has a description
- { with(obj_hud_infobar) { draw_text(view_xview[0]+185, view_yview[0]+view_hview[0]-17, id.desc);
- }
- }
- else // If instance has no description
- { with(obj_hud_infobar){ draw_text(view_xview[0]+185, view_yview[0]+view_hview[0]-17, "No description");
- }
- }
- }
- }
Nur, damit keine Verwirrung entsteht: with(obj_mouseover) ist das oberste aller Parents, damit spreche ich alle Instanzen darunter an, die obj_mouseover als Parent haben. Hierarchie: obj_mouseover -> obj_own -> obj_unit und obj_build getrennt. Also da liegt der Fehler nicht. Die Variablenprüfung haut einfach nicht hin.
P.S.: "if global./local.variable != null" fänd ich viel intuitiver

Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von Bonsaiheld ()