Ich stehe etwas an; vielleicht kann jemand helfen(?):
Beim Upgraden mancher meiner touren, die eigene swf-plugins enthalten, ist es nötig, die mittlerweile neue swf 1.0.8.14 sowie deren interface.as und die neue Einbindung in as3-code zu verwenden, wie es klaus schreibt.
Sieht bei mir zB so aus:
function registerplugin(krpanointerface:Object, pluginfullpath:String, pluginobject:Object):void
{
// get the krpano interface and the plugin object
kr = krpanointerface;
plugin = pluginobject;
// add plugin attributes and functions
/* some example attributes:
plugin.registerattribute("attr1", "defaultvalue");
add a from xml callable functions:
plugin.testfunction1 = testfunction1;*/
kr.set("pas_makeLinkTo", placeLink);
kr.set("ScrGet.texte", getScTexte);
kr.set("ScrSet.newscene", newSc);
kr.set("Scr.showtitle", putTitle);
kr.set("Scr.HideHot", hideHotspots);
kr.set("Scr.ShowHot", showHotspots);
// say hello
kr.trace(0,"hello from plugin[" + plugin.name + "]");
}
Display More
.. jetzt habe ich hier nur die möglichkeit, (xml-aufrufbare) funktionen zu definieren, aber nicht, wie bisher - nach geladenem plugin - direkt code ausführen zu lassen, mit dem diese funktionen ggf. interagieren;
so wie bisher einfach mit code fortzusetzen:
var sceneCount:int = kr.get("scene.count");
var scTexte = new Array ;
var scTitel = new Array ;
scTitel[1] = "leer";
scTexte[1] = "Ich bin von scene 1 abgerufen";
function getScTexte():void
{
var i:int = 1;
var ausdruck:String = "";
var tmp:String = "";
var teile = new Array ;
for (i=1; i<=sceneCount; i++)
{
var pano:String = kr.get("sc" + makeLeadingCero(3,i));
ausdruck = "data[pano" + pano + "].content";
tmp = kr.get(ausdruck);
teile = tmp.split("#",2);
scTitel[i] = teile[0];
scTexte[i] = teile[1];
}
}
function newSc(Nr: int)
{
scroller.kopf.htmlText = scTitel[Nr];// Titel & Text einsetzen
scroller.scrollText.htmlText = scTexte[Nr];
scroller.scrbar.validateNow();
scroller.scrbar.scrollPosition = 1;
if (scTitel[Nr] == "leer")
{// Leertextverhalten definieren (im scenentext mus "leer" stehen!)
scroller.scrollText.htmlText = scroller.kopf.htmlText = "";
scroller.alpha = 0.2;
}
else
{
scroller.alpha = initA;
}
}
Display More
... ist nicht möglich, da zB die arrays scTexte und scTitel sich nicht mehr im jew. benötigten Gültigkeitsbereich befinden. In der bisherigen Methode, war ich nicht gezwungen, die benötigten funktionen (die mit kr.set("...",...)) innerhalb der registerplugin-funktion zu definieren.
Gibt es einen Weg, dies zu umgehen?
PS: Es geht in dem Beispiel um eine in Flah erstellte Textbox "Scroller" mit Titelleiste und Textscrollbereich, für die beim Laden des Plugins ein 2dim Array alle Texte erhält und das Plugin selbst tauscht (xml-Befehl "newSC" bei jedem szenenwechsel) auf Befehl diese Texte für die neue szene aus...
EDIT:
Bin schon draufgekommen, dass meine bisherige Version der Einbindung - mit
import krpano_as3_interface;
// create krpano as3 interface object - krpano
var kr:krpano_as3_interface = krpano_as3_interface.getInstance();
// empty functions? - then it wasn't included in the viewer
if (kr.get == null)
{
// run plugin swf standalone - no interfaces - add dummy functions
function dummy_get(v:String):String
{// avoid progress timer traces
if (v != "progress.loaddone")
{
trace("get(" + v + ");");
}
return "";
}
function dummy_set(v:String,val:String):void
{
trace("set("+v+","+val+");");
}
function dummy_call(action:String):void
{
trace("call("+action+");");
}
kr.get = dummy_get;
kr.set = dummy_set;
kr.call = dummy_call;
}
... code
...code
...code
Display More
weiterhin auch mit der neuen interface.as funktioniert und damit das Problem der Variablengültigkeit ausserhalb v. funktionen gar nicht besteht...
Manchmal ist der einfache Weg, etwas zum Laufen zu bringen, der, der einem zuletzt einfällt...